2017-01-25 4 views
0

クライアントのPrestashop 1.7ウェブサイトを設定しており、毎日スクリプトを使用して新しい商品をインポートしています。これらの製品は、まだ存在しなければ作成するカテゴリに入れられます。私の問題は、新しく作成されたカテゴリがドロップダウントップメニューの最後に置かれ、アルファベット順に表示するほうがずっと良いことです。私はバックオフィスのドラッグ&ドロップでそれを行うことができることを知っていますが、私のスクリプトが自動的にそれをやりたいのです。Prestashopトップメニューのアルファベット順のカテゴリを指定する

Category.phpクラスをすでにオーバーライドして他の変更を加えています。このファイルを編集できます。私はdepthまたはpositionからnameまで見つかったすべてのORDER BY節を変更しようとしました。カテゴリは実際には名前でソートされていましたが、多くはメニューから消えてしまいました(つまり、10個のカテゴリがポジション別にソートされ、残りの4個だけが名前でソートされていました)。

これを達成する方法をご存知ですか?

答えて

0

これは2通りあります。 私のアプローチは、メニューが作成されたときにこれを行うことです。これはすべての言語で並べ替えられます。そのためには、ちょうどps_mainmenuモジュールのこのオーバーライドを使用します。

use PrestaShop\PrestaShop\Core\Module\WidgetInterface; 

class Ps_MainMenuOverride extends Ps_MainMenu implements WidgetInterface 
{ 
    protected function generateCategoriesMenu($categories, $is_children = 0) 
    { 
     $categories = $this->sortCategories($categories); 
     return parent::generateCategoriesMenu($categories, $is_children); 
    } 

    public function sortCategories($categories) 
    { 

     uasort($categories, 'cmpcat'); 

     foreach($categories as $k => $category) 
     { 
      if (isset($category['children']) && !empty($category['children'])) { 
       $children = $this->sortCategories($category['children']); 
       $categories[$k]['children'] = $children; 
      } 
     } 
     return $categories; 
    } 
} 

function cmpcat($a, $b) { 
    return strcmp($a['name'], $b['name']); 
} 

他のオプションは、メニューを作成するときにソートすることです。しかし、私は現在のインポートコードを見なければならず、さらに困難になる可能性があります。

これは子供向けのカテゴリです。主なカテゴリについては、別の機能を無効にする必要があります。

+0

これは完璧に動作します、ありがとうございます! – OuberThat

関連する問題