在Prestashop 1.5.3中创建自定义页面

时间:2013-01-15 10:44:44

标签: prestashop

我想在不使用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');
?>

我将相应的test.tpl放在我的主题basefolder中。它只包含'你好世界'。

我更改了blockmenu.php并创建了一个指向我页面的自定义链接:

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

如果我点击链接显示页面,但html是某种腐败的。页面的body-id设置为 pagenotfound ,左列生成但未显示。有没有办法为我的自定义页面设置$ page_name,以便我可以检查我的自定义页面是否已加载并抑制左右列的生成?

有没有其他方法可以在没有CMS的情况下创建功能性自定义页面?

4 个答案:

答案 0 :(得分:27)

只需创建一个具有页面所需名称的控制器,并将其放在/ 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。

答案 1 :(得分:6)

除了“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;
    }

}

答案 2 :(得分:2)

  1. 在覆盖目录中创建自定义页面控制器 - override / controllers / front / CustompageController.php
  2. 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. 我们的新自定义页面的模板 - themes / site-current-theme / custom-page.tpl

      <h3>{$company_name}</h3>
      <p><strong>{l s='Expert In'}</strong></p>
      <ul>
          {foreach from=$expert_in item=skill}
          <li>{$skill}</li>
          {/foreach}
      </ul>
      
    2. creating custom front page in prestashop

答案 3 :(得分:0)

您好,这个解决方案也可以完美地使用覆盖。

1 /在文件夹/覆盖创建页面manufacturer-detail.php并输入以下代码:

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

工具:: displayFileAsDeprecated();

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

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

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

2 /在文件夹/ override / controllers / front创建页面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 /在文件夹/ themes / your-default-theme中创建页面manufacturer-detail.php并输入以下代码:

Hello world

4 /你可以去SEO&amp;您的后台办公室中的网址并添加新网址

您可以访问页面http://yourstore.com/index?controller=ManufacturerDetail

OR

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