在Prestashop 1.5.3中创建自定义页面
我想在Prestashop 1.5.3中创建一个自定义页面,而不使用CMS 不幸的是,我找不到任何适用于1.5.3的教程 到目前为止,我已经在shops根目录中创建了一个test.php文件,其中包含以下内容:在Prestashop 1.5.3中创建自定义页面,prestashop,Prestashop,我想在Prestashop 1.5.3中创建一个自定义页面,而不使用CMS 不幸的是,我找不到任何适用于1.5.3的教程 到目前为止,我已经在shops根目录中创建了一个test.php文件,其中包含以下内容: <?php include(dirname(__FILE__).'/config/config.inc.php'); include(dirname(__FILE__).'/header.php'); $smarty->display(_PS_THEME_DIR_.'tes
<?php
include(dirname(__FILE__).'/config/config.inc.php');
include(dirname(__FILE__).'/header.php');
$smarty->display(_PS_THEME_DIR_.'test.tpl');
?>
我将相应的test.tpl放在我的文件夹中。它只包含“hello world”
我更改了blockmenu.php并创建了指向我的页面的自定义链接:
$this->_menu .= '<li><a href="test.php">TEST</a></li>'.PHP_EOL;
$this->\u菜单。=''.PHP\u EOL;
如果我点击链接,页面会显示出来,但是html有点损坏。页面的主体id设置为pagenotfound,并生成左侧列,但未显示。有没有办法为我的自定义页面设置$page_名称,这样我就可以检查我的自定义页面是否已加载,并禁止生成左右列
有没有其他方法可以创建没有CMS的功能性自定义页面?只需创建一个具有页面名称的控制器,并将其放入/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');
}
}
查看FrontController,了解需要覆盖哪些方法来添加功能性,例如setMedia()
来添加CSS/JS文件
然后,您将能够在SEO面板的后台添加一个漂亮的url。除了“public$php_self='mypage'”之外,其他都可以正常工作 如果将文件放在覆盖目录中(良好做法),SEO菜单上不会显示标识符“mypage”。 但是,如果您将控制器文件放在主目录中,它就可以工作了 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;
}
}
<h3>{$company_name}</h3>
<p><strong>{l s='Expert In'}</strong></p>
<ul>
{foreach from=$expert_in item=skill}
<li>{$skill}</li>
{/foreach}
</ul>
{$company\u name}
{l s='Expert In'}
{foreach from=$expert_in item=skill}
- {$skill}
{/foreach}
Hello geys此解决方案也能完美地与覆盖一起工作 1/在文件夹/override create page manufacturer-detail.php中,输入以下代码: 包括(dirname(文件)。/config/config.inc.php'); 控制器::getController('ManufacturerDetailController')->run() 工具::displayFileAsDeprecated() 包括(dirname(文件)./header.php') $smarty->display(_PS_THEME_DIR_'manufacturer-detail.tpl') 包括(dirname(文件)./footer.php') 2/在/override/controllers/front create page manufacturerDetailController.php文件夹中,输入以下代码: 类ManufacturerDetailController扩展了FrontController{
/*public $php_self = 'manufacturer-detail'; */ /* optional */
public function init(){
parent::init();
}
public function initContent(){
parent::initContent();
$this->setTemplate(_PS_THEME_DIR_.'manufacturer-detail.tpl');
}
/* The following code portion is optional.
*删除双斜线以激活该部分
*如果您想为页面使用外部样式表和JavaScript。
*在主题的CSS和JS目录中创建相应的CSS和JS文件
*/
}
3/在文件夹/themes/您的默认主题创建页面manufacturer-detail.php中,并放置以下代码:
你好,世界
4/您可以在后台转到SEO和url并添加新的url
您可以访问您的页面
或
别忘了设置class属性
public$php_self='mypage'
可以选择SEO和URL菜单中的相关页面。您好,谢谢您的回复,但是我如何访问我的网页,我必须使用哪个URL?@FabienPapet您可以使用www.yoursite.com/index.php?controller=nameOfYourController
访问页面。但是最好的方法是在后面的SEO面板中添加一个urloffice@romainberger.嗯,我想你应该把这个答案从/controllers/front/
编辑成/overrides/controllers/front/
。你同意我的意见吗???@Whiteletsandblank是的,绝对同意。编辑了我的答案。感谢您的建议为什么我仍然看到一个空白页面而不是我的视图?请通过编辑/config/defines.inc.phpWhy启用错误模式,在1.6中设置自定义url ind SEO&url后,我被重定向回“丑陋”链接?当我转到它时,我又回到了编辑状态:我发现它很奇怪,但在创建了一个url之后,我能够选择另一个控制器,然后它工作了。
/*public $php_self = 'manufacturer-detail'; */ /* optional */
public function init(){
parent::init();
}
public function initContent(){
parent::initContent();
$this->setTemplate(_PS_THEME_DIR_.'manufacturer-detail.tpl');
}
/* The following code portion is optional.
//public function setMedia(){
//parent::setMedia();
//$this->addCSS(_THEME_CSS_DIR_.'custom-page.css');
//$this->addJS(_THEME_JS_DIR_.'custom-page.js');
//}