我想在不使用CMS的情况下在Prestashop 1.5.3中创建自定义页面.
不幸的是我找不到任何与1.5.3一起使用的教程.
到目前为止,我已在stores根目录中创建了一个test.php文件,其中包含以下内容:
<?php
include(dirname(__FILE__).'/config/config.inc.php');
include(dirname(__FILE__).'/header.php');
$smarty->display(_PS_THEME_DIR_.'test.tpl');
?>
Run Code Online (Sandbox Code Playgroud)
我将相应的test.tpl放在我的主题basefolder中.它只包含'你好世界'.
我更改了blockmenu.php并创建了一个指向我页面的自定义链接:
$this->_menu .= '<li><a href="test.php">TEST</a></li>'.PHP_EOL;
Run Code Online (Sandbox Code Playgroud)
如果我点击链接页面显示,但HTML是某种腐败.页面的body-id设置为pagenotfound,左列生成但未显示.有没有办法为我的自定义页面设置$ page_name,以便我可以检查我的自定义页面是否已加载并抑制左右列的生成?
有没有其他方法可以创建没有CMS的功能自定义页面?
rom*_*ger 28
只需使用页面所需的名称创建一个控制器,并将其放在/ overrides/controllers/front /中.控制器的名称必须是NameyouwantforthepageController.php
这是一个可以工作的基本类:
class MyPageController extends FrontController {
/**
* Initialize controller
* @see FrontController::init()
*/
public function init() {
parent::init();
}
/**
* Assign template vars related to page content
* @see FrontController::initContent()
*/
public function initContent() {
parent::initContent();
$this->setTemplate(_PS_THEME_DIR_.'my-page.tpl');
}
}
Run Code Online (Sandbox Code Playgroud)
看看FrontController,看看你需要覆盖什么方法来添加功能,例如setMedia()添加CSS/JS文件.
然后,您将能够在SEO面板的后台添加一个漂亮的URL.
一切都很好,除了"public $ php_self ='mypage'".
如果您将文件放在覆盖目录(良好实践)中,标识符"mypage"不会显示在SEO菜单上.但是,如果您将控制器文件放在主目录中,它就可以了.
classes/Meta.php不扫描覆盖目录,只扫描根目录(你可以在Meta.php的第56行看到它)
使用此代码覆盖Meta.php类允许PrestaShop扫描覆盖目录并添加页面:
class Meta extends MetaCore
{
public static function getPages($exclude_filled = false, $add_page = false)
{
$selected_pages = parent::getPages($exclude_filled, $add_page);
if (!$files = Tools::scandir(_PS_CORE_DIR_.DIRECTORY_SEPARATOR.'override'.DIRECTORY_SEPARATOR.'controllers'.DIRECTORY_SEPARATOR.'front'.DIRECTORY_SEPARATOR, 'php', '', true))
die(Tools::displayError('Cannot scan override directory'));
$exlude_pages = array(
'category', 'changecurrency', 'cms', 'footer', 'header',
'pagination', 'product', 'product-sort', 'statistics'
);
foreach ($files as $file)
{
if ($file != 'index.php' && !in_array(strtolower(str_replace('Controller.php', '', $file)), $exlude_pages))
{
$class_name = str_replace('.php', '', $file);
$reflection = class_exists($class_name) ? new ReflectionClass(str_replace('.php', '', $file)) : false;
$properties = $reflection ? $reflection->getDefaultProperties() : array();
if (isset($properties['php_self']))
$selected_pages[$properties['php_self']] = $properties['php_self'];
elseif (preg_match('/^[a-z0-9_.-]*\.php$/i', $file))
$selected_pages[strtolower(str_replace('Controller.php', '', $file))] = strtolower(str_replace('Controller.php', '', $file));
elseif (preg_match('/^([a-z0-9_.-]*\/)?[a-z0-9_.-]*\.php$/i', $file))
$selected_pages[strtolower(sprintf(Tools::displayError('%2$s (in %1$s)'), dirname($file), str_replace('Controller.php', '', basename($file))))] = strtolower(str_replace('Controller.php', '', basename($file)));
}
}
return $selected_pages;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19329 次 |
| 最近记录: |