2016-08-18 5 views
2

現在、カスタムモジュールを開発中です。今、それはこのようになりますので、 私がしたいことは、素敵なURLを持つことです。私はすでにカスタムモジュールにリンクするために新しいページを追加しましたPrestashop 1.6のカスタムモジュールのURLリンク

domain.com/flower-deliveries?city=Hamburg&id_country=1&country=Germany 

、ページ名は、私はまだ花の配達ですが、私は "隠す"必要があるパラメータを持っている。

代わりに、そのリンクの私はこのようなURLたい上:

domain.com/flower-deliveries-1-Hamburg-Germany.html 

私は2つの方法を試してみましたが、それらのどれもが働いていない..

最初のものを、hookModuleRoutesを追加しました私のコントローラでは、単に以下のように:

public function hookModuleRoutes($params) 
{ 
    return array(
     'module-vpages-dpage' => array(
      'controller' => 'dpage', 
      'rule' => 'flower-deliveries{-:id_country}{-:country}{-:city}.html', 
      'keywords' => array(
       'id_country' => array('regexp' => '[_a-zA-Z0-9_-]+', 'param' => 'id_country'), 
       'city' => array('regexp' => '[\w]+', 'param' => 'city'), 
       'country' => array('regexp' => '[\w]+', 'param' => 'country') 
      ), 
      'params' => array(
       'fc' => 'module', 
       'module' => 'vpages', 
       'controller' => 'dpage' 
      ) 
     ) 
    );  
} 

そして、コントローラにインストール:

'module-vpages-dpage' => array(
    'controller' => 'dpage', 
    'rule' => 'flower-deliveries{-:id_country}{-:country}{-:city}.html', 
    'keywords' => array(
     'id_country' => array('regexp' => '[0-9]+', 'param' => 'id_country'), 
     'city' => array('regexp' => '[\w]+', 'param' => 'city'), 
     'country' => array('regexp' => '[\w]+', 'param' => 'country'), 
    ), 
    'params' => array(
     'fc' => 'module', 
     'module' => 'vpages', 
     'controller' => 'dpage' 
    ) 
), 

そのカスタムルールを使用する場合は、リンクhttp://domain.com/flower-deliveries?city=Hamburg&id_country=1&country=Germanyhttp://domain.com/flower-deliveries?module_action=listにtranformedたし、それはdidnの:働いていたので、私はディスパッチャクラスを上書きしようとした、カスタムモジュールのルートを追加していなかった

私は最初のページにリダイレクトされました。

私が間違っていることを教えてくれる人もいますか? 私はそれを行うべき方法を何時間も読んだことがあり、それは上記のものと同じでなければなりません。

ありがとう!

+0

最初の方法は問題ありませんが、コントローラにないモジュールクラスにある必要があります。あなたのルールでは、 ''ルール '=>'フラワーデリバリー{ - :id_country} { - :country} { - :city} .html''を定義しました。 -Germany'。あなたは国の前に都市を使用していますが、ルールは異なる順序で定義されています。 – TheDrot

+0

ええ、知っている、私は、モジュールファイル内のフックを持っているが、まだ何も..それは想定通りに表示されません.. – rosuandreimihai

+0

このようなあなたのルールを定義する '=' '花 - {:id_country} - {:country} - {:city} .html''を実行し、それが動作するかどうかを確認します。私はあなたの最初のソリューションをテストし、PrestaShopは例外をスローアウトしかし、この方法は私のために働いた。 – TheDrot

答えて

5

すべての変更を元に戻してください:)。

この方法を試してみてください:

たとえば、これはコアモジュールファイルrootofps/modules/vpages/vpages.php

class VPages extends Module { 
    public function __construct(){ 
     $this->name = 'vpages'; 
     $this->author = 'you'; 
     $this->tab = 'front_office_features'; 
     $this->version = '1.0.0'; 
     $this->controllers = array('dpage'); 

     parent::__construct(); 
    } 

    // This is the function in your core module file (not in controller) 
    public function install(){ 
     return parent::install() && $this->registerHook('moduleRoutes') 
    } 

    public function hookModuleRoutes($params){ 
     $my_link = array(
      'vpages' => array(
       'controller' => 'dpage', 
       'rule' => 'flower-deliveries{-:id_country}{-:country}{-:city}.html', 
       'keywords' => array(
        'id_country' => array('regexp' => '[0-9]+', 'param' => 'id_country'), 
        'country' => array('regexp' => '[\w]+', 'param' => 'country'), 
        'city' => array('regexp' => '[\w]+', 'param' => 'city'), 
       ), 
       'params' => array(
        'fc' => 'module', 
        'module' => 'vpages' 
       ) 
      ) 
     ); 
     return $my_link; 
    } 
} 

今コントローラrootofps/modules/vpages/controllers/front/dpage.php

class VpagesDpageModuleFrontController extends ModuleFrontController { 
    public function init(){ 
     parent::init(); 
     $this->setTemplate('dapage.tpl'); 
    } 
} 

そして今、ビューrootofps/modules/vpages/views/templates/front/dpage.tpl

id_country = {$smarty.get.id_country}<br> 
country = {$smarty.get.country}<br> 
city={$smarty.get.city}<br> 
です

この「スケルトン」は100%で動作します:)ところで、このようなURLを指定すると通知されますmydomain.com/flower-deliveries?id_country=1&country=italy&city=rome PrestaShopはあなたのURLを明確にURLに変換しません。 しかし、mydomain.com/flower-deliveries-2-italy-rome.htmlのようなURLは正しくルートになります:)

+0

こんにちは、私はあなたの答えのように試してみましたが、それはまったく動作しません..私はまだ醜いURLのリンクを持って.. ..( – rosuandreimihai

+0

それはあなたの以前のテストの '汚い'データベースかどうかを確認してくださいps_meta、ps_meta_lang )、ディスパッチャのオーバーライドを取り除いてください。 – sarcom

+0

このトピックに関しては、私はこのトピックに関してオーバーライドがありませんので、今はきれいでなければなりません。しかし、なぜそれが動作していないのですか? – rosuandreimihai

関連する問題