在1.5.3的Prestashop创建自定义页面(Create custom page in Pre

2019-07-18 05:50发布

我想不使用CMS创造的Prestashop 1.5.3自定义页面。

不幸的是我无法找到与工作1.5.3任何教程。

到目前为止,我已经创造了在商店根目录下有以下内容的test.php的文件:

<?php
include(dirname(__FILE__).'/config/config.inc.php');
include(dirname(__FILE__).'/header.php');

$smarty->display(_PS_THEME_DIR_.'test.tpl');
?>

我放置在相应test.tpl在我的主题basefolder。 它只是包含了“世界你好”。

我改变了blockmenu.php并创建了一个自定义链接到我的网页:

$this->_menu .= '<li><a href="test.php">TEST</a></li>'.PHP_EOL;

如果我点击显示在页面中的链接,但HTML是某种形式的腐败。 在页面的主体-ID设置为pagenotfound并产生左列,但没有显示。 有什么办法来设置$ PAGE_NAME为我的自定义页面,这样我可以检查我的自定义页面加载和剿左,右列的产生?

是否有任何其他的方式,而不CMS创建一个功能自定义页面?

Answer 1:

只要创建你想要的页面名称的控制器,并把它放在/重写/控制器/正面/。 控制器的名称必须是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设计,看你需要重写添加functionnalities,例如什么方法setMedia()添加CSS / JS文件。

然后,您就可以在搜索引擎优化面板中添加一个漂亮的URL在后台。



Answer 2:

除“大众$ PHP_SELF =‘我的空间’”所有的工作好。

如果你把你的文件中覆盖目录(好习惯),标识符“我的空间”并不能够对SEO菜单显示。 但是,如果你把你的控制器文件中的主目录,这是工作。

该班/ 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;
    }

}


Answer 3:

  1. 在覆盖目录中创建自定义页面控制器 - 覆写/控制器/正面/ CustompageController.php

 class CustompageController extends FrontController{ //add js / css required for the custom page public function setMedia(){ $this->context->controller->addJS(_THEME_JS_DIR_.'custom-page.js'); $this->context->controller->addCSS(_THEME_CSS_DIR_.'custom-page.css'); parent::setMedia(); } public function initContent(){ //preparingdata for passing to the custom page $name = 'Gofenice Technologies'; $expert_in = array('Prestashop Development', 'Prestashop Customization', 'Prestashop Custom Module Development', 'Prestashop Page Speed Optimization'); $this->context->smarty->assign(array( 'company_name' => $name, 'expert_in' => $expert_in )); //data ends-here //pass data to template file $this->setTemplate(_PS_THEME_DIR_.'custom-page.tpl'); //show left/ right columns - will be true and shown by default $this->display_column_left = false; $this->display_column_right = false; //call parent initcontent - this is for loading the site's default header, footer, left and right columns parent::initContent(); } } 
  1. 一种用于我们新的自定义页面模板 - 主题/站点当前主题/定制page.tpl

     <h3>{$company_name}</h3> <p><strong>{ls='Expert In'}</strong></p> <ul> {foreach from=$expert_in item=skill} <li>{$skill}</li> {/foreach} </ul> 

在创建自定义的Prestashop头版



Answer 4:

你好geys与覆盖也该解决方案的工作perfectlly。

1 /在文件夹/覆盖营造页制造商detail.php,并把这个代码:

包括(目录名(FILE) '/配置/ config.inc.php文件'); 控制器:: getController( 'ManufacturerDetailController') - >运行();

工具:: displayFileAsDeprecated();

包括(目录名(FILE) '/ header.php文件');

$ smarty->显示器(_PS_THEME_DIR _ '制造商detail.tpl');

包括(目录名(FILE) '/ footer.php');

2 /在文件夹/超驰/控制器/前创建页面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文件* /

//public function setMedia(){
  //parent::setMedia();
  //$this->addCSS(_THEME_CSS_DIR_.'custom-page.css');
  //$this->addJS(_THEME_JS_DIR_.'custom-page.js');
//}

}

3 /在文件夹/主题/您的默认主题创建页面制造商detail.php,并把这个代码:

你好,世界

4 /你可以去搜索引擎和网址在你的后台,并添加新网址

您可以访问您的土特产品页面http://yourstore.com/index?controller=ManufacturerDetail

要么

http://yourstore.com/urr-you-have-added-from-back-office



文章来源: Create custom page in Prestashop 1.5.3
标签: prestashop