11

Prestashop 1.5.3 で CMS を使用せずにカスタム ページを作成したいと考えています。

残念ながら、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 をテーマのベースフォルダーに配置しました。単に「hello world」が含まれています。

blockmenu.php を変更し、自分のページへのカスタム リンクを作成しました。

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

リンクをクリックするとページは表示されますが、html が何らかの形で壊れています。ページの body-id はpagenotfoundに設定され、左側の列は生成されますが表示されません。カスタム ページの $page_name を設定して、カスタム ページがロードされているかどうかを確認し、左右の列の生成を抑制する方法はありますか?

CMS を使用せずに機能的なカスタム ページを作成する他の方法はありますか?

4

4 に答える 4

29

ページに付ける名前でコントローラーを作成し、/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 を追加できます。

于 2013-01-15T11:57:48.337 に答える
8

「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;
    }

}
于 2014-06-17T09:04:37.567 に答える
2
  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. 新しいカスタム ページのテンプレート - 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>
    

prestashop でカスタム フロント ページを作成する

于 2015-10-25T06:27:11.443 に答える