Создать пользовательскую страницу в Prestashop 1.5.3

Я хотел бы создать пользовательскую страницу в Prestashop 1.5.3 без использования CMS.

к сожалению я не могу найти любые учебники, которые работают с 1.5.3.

до сих пор я создал тест.php файл в корневом каталоге shops со следующим содержимым:

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

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

Я разместил соответствующий тест.tpl в моей теме basefolder. Он просто содержит "hello world".

Я изменил blockmenu.php и создал пользовательскую ссылку на my страница:

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

Если я нажму ссылку, страница отобразится, но html-код будет поврежден. Идентификатор тела страницы имеет значение pagenotfound и левый столбец генерируется, но не отображается. Есть ли способ установить $page_name для моей настраиваемой страницы, чтобы я мог проверить, загружена ли моя настраиваемая страница и подавить генерацию левого и правого столбцов?

есть ли другой способ создать функциональную пользовательскую страницу без CMS?

4 ответов


просто создайте контроллер с именем, которое вы хотите для страницы, и поместите его в /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.

затем вы сможете добавить довольно url-адрес в бэк-офис в SEO панель.


все работает хорошо, кроме "public $php_self = 'mypage'".

Если вы поместите файл в каталог переопределения (хорошая практика), идентификатор "mypage" не будет отображаться в меню SEO. Но, если вы поместите файл контроллера в основной каталог, он работает.

классы/мета.php не сканирует каталог переопределения, только корневой каталог (вы можете увидеть его в строке 56 Meta.в PHP)

переопределение класса 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;
    }

}

  1. создайте пользовательский контроллер страницы в каталоге override - override/controllers/front/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. шаблон для нашей новой пользовательской страницы-темы / сайта-текущая тема / пользовательская страница.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>
    

создание пользовательской первой страницы в prestashop


Привет Гейс это решение работает perfectlly с override также.

1 / в папке / переопределить создать страницу производитель-подробно.php и поставьте этот код:

include (dirname ().'/config / config.Инк.на PHP'); Контроллер:: getController ('ManufacturerDetailController') - >run ();

Tools:: displayFileAsDeprecated ();

include (dirname ().'/заголовок.php');

$smarty - >дисплей (_PS_THEME_DIR_.изготовление-деталь.tpl');

include (dirname ().'/футбол.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/ в папке / темы / ваш-по умолчанию-тема создать страницу производителя-подробно.php и поставьте этот код:

Привет мир

4 / Вы можете перейти к SEO & URLs в вашем бэк-офисе и добавить новый url

вы можете получить доступ к своей странице http://yourstore.com/index?controller=ManufacturerDetail

или

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