變得有點深入瞭解後,我結束了移動菜單(在MyAccountControllerCore
別名my-account
模板的最初部分)進入一個全新的控制器「MyAccountMenuController」,在/override/controllers/front/
。
<?php
// In /override/controllers/front/MyAccountMenuController.php
// The "exposer" controller
public function display()
{
// Do what ever you want to pass specific variables
if (! $this->template) {
throw new Exception(get_class($this) . '::display() : missing template.');
}
$this->context->smarty->display($this->template);
return true;
}
我現在能夠通過將每個控制器是客戶帳戶部分的部分initContent()
方法中下面的代碼片段導入此菜單(這意味着他們每個人必須重寫,有關更多信息上位控制器,見documentation):
<?php
// In /override/controllers/front/MyAccountController.php
// The "consumer" controller
public function initContent() {
// ...
// Importing the customer area's menu
$menuController = $this->getController('MyAccountMenuController');
ob_start();
$menuController->run();
$this->context->smarty->assign('myAccountMenu', ob_get_clean());
}
我不認爲getController
方法(位於ControllerCore類)的最初目的是爲了包括另一控制器輸出,至少在1.5的Prestashop。不過,對我來說,這種方法比重複的視圖代碼更清潔。
如果您有更好的(更清潔)的方法來實現這樣的機制,請讓我知道!
有什麼想法?