prestashop 1.4 코드 해석: 약수 3천 바가지
해석
먼저 prestashop 1.4의 파일 불러오는 방식을 보십시오. 만약 new에 클래스가 있다면, 코드는 먼저 controller에서 같은 이름의 클래스 파일을 찾을 것입니다. 이것은 이전 버전과 차이가 많지 않습니다.찾을 수 없으면 오버라이드라는 사용자가 사용자 정의 클래스의 폴더를 찾을 수 있습니다. 찾을 수 없으면 exec로 요청한 클래스 파일을 새로 만들고classes 아래의 클래스 + 코어 클래스를 불러옵니다.그러니까 진정한 Front Controller.php,classes 아래에서 찾아야 하며, 클래스의 이름도 Front Controller Core입니다.
그 전에 가장 중요한 게 init였다면.php, prestashop 1.4의 FrontController.php, init의 모든 작업을 인수하고 이전 헤드를 대체합니다.php,index.php와 footer.php의 모든 작업은 페이지 나누기와 상품 정렬까지 포함됩니다.요컨대 FrontController.php는zend 프레임워크의dispatch와 약간 비슷해서 모든 작업을 시작하는 신호입니다.
public function run()
{
$this->init();
$this->preProcess();
$this->setMedia();
$this->displayHeader();
$this->process();
$this->displayContent();
$this->displayFooter();
}
if ($this->ssl AND !(isset($_SERVER['HTTPS']) AND strtolower($_SERVER['HTTPS']) == 'on') AND Configuration::get('PS_SSL_ENABLED'))
{
header('HTTP/1.1 301 Moved Permanently');
header('Location: '.Tools::getShopDomainSsl(true).$_SERVER['REQUEST_URI']);
exit();
}
function init의 자동 301, 이것이prestashop 1.4에 추가된 기능입니다. 제가 쓴 모듈maindomin은 폐기된 셈입니다.
$page_name = (preg_match('/^[0-9]/', $page_name)) ? 'page_'.$page_name : $page_name;
function init의 $pagename 변수는 서로 다른 페이지의 다른 템플릿에 대한 판단을 쉽게 실현할 수 있습니다.예전 버전에서는 제가 직접 헤드에 있었다는 걸 알아야 돼요.tpl에서 판단했어.
Tools::addCSS(_THEME_CSS_DIR_.'global.css', 'all');
Tools::addJS(array(_PS_JS_DIR_.'tools.js', _PS_JS_DIR_.'jquery/jquery-1.4.4.min.js', _PS_JS_DIR_.'jquery/jquery.easing.1.3.js'));
function setMedia에서 이러한 장점은 css와 js를 통일적으로 관리하면prestashop의'CCC'를 할 수 있다는 것이다.Combine,Compress and Cachefunction productSort와pagination은 이전의sort와pagination 업무를 인계받았다.다른 것은 큰 변화가 없고, 주요 기능은 과거의 init를 복제한 것이다.php.심지어 변수의 이름은 전역 변수이지 대상에 전역 클래스가 있어야 하는 것이 아니다.
맞춤형 구성
오버라이드/classes 폴더 아래에서 하나를 발견할 수 있습니다FrontController.php, 이것은 사실 맞춤형 Front Controller입니다.php의 예, ""삭제하고 페이지를 방문하면 debug 정보를 볼 수 있습니다.주의해야 할 것은 같은 폴더 아래에 mysql와module2 파일이 있는데, 만약 Front Controller만 바뀌었다면.php, 오류 보고로 인해 실행할 수 없는 문제를 초래할 수 있습니다.필요한FrontController.php의 148 줄
error_reporting(E_ALL | E_STRICT);
... 로 바꾸다
error_reporting(7);
이 7의 뜻은 모르는 것이 있으면 수첩을 보고 공부할 수 있다.FrontController 사용자정의하기php, 또는 override/classes 폴더 아래에 새 파일을Front Controller로 명명합니다.php, 그리고 클래스 extends FrontController Core를 쓰면 됩니다. 방법은 코어의 방법을 덮어쓸 수 있습니다.하나의 예:
class FrontController extends FrontControllerCore{
function setMedia()
{
parent::setMedia();
Tools::addCSS(_THEME_CSS_DIR_.'addition.css');
} public function displayFooter()
{
global $cookie, $smarty;
if (!self::$initialized)
$this->init(); self::$smarty->assign(array(
'HOOK_RIGHT_COLUMN' => (($smarty->get_template_vars('page_name') == 'category') ? '' : Module::hookExec('rightColumn', array('cart' => self::$cart))),
'HOOK_FOOTER' => Module::hookExec('footer'),
'content_only' => (int)(Tools::getValue('content_only'))));
self::$smarty->display(_PS_THEME_DIR_.'footer.tpl');
//live edit
if ($cookie->live_edit AND $ad = Tools::getValue('ad'))
{
self::$smarty->assign(array('ad' => $ad, 'live_edit' => true));
self::$smarty->display(_PS_ALL_THEMES_DIR_.'live_edit.tpl');
}
else
Tools::displayError();
}}
이 예에서는 setMedia와 displayFooter 방법을 다시 썼습니다.setMedia를 다시 쓸 때, 원본 FrontController의 이 방법을 실행했고, css에 새 css를 불러왔습니다.display Footer를 다시 쓸 때 원본 코드를 복사합니다. 유일한 변경 사항은 페이지name이category라면 오른쪽의column을 출력하지 않는다는 판단을 추가하는 것입니다.category list의 공간을 더 넓히기 위해서다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.