2017-01-25 1 views
0

Ich habe eine Prestashop 1.7 Website für einen Kunden eingerichtet und ich importiere seine neuen Produkte jeden Tag mit einem Skript. Diese Produkte werden in Kategorien eingefügt, die ich erstelle, wenn sie noch nicht existieren. Mein Problem ist, dass die neu erstellten Kategorien am Ende des Dropdown-Menüs platziert werden, und es wäre viel besser, sie alphabetisch anzuzeigen. Ich weiß, dass ich das im Backoffice tun kann, indem ich sie per Drag & Drop an ihren Platz ziehe, aber ich möchte, dass mein Skript das automatisch macht.Sortierung der Kategorien alphabetisch in Prestashop top Menü

Ich habe bereits die Category.php Klasse außer Kraft gesetzt andere Änderungen vornehmen, damit ich diese Datei bearbeiten kann. Ich habe versucht, alle ORDER BY Klauseln, die ich gefunden habe, von depth oder position zu name zu ändern. Es hatte einige Effekte, da Kategorien tatsächlich nach Namen sortiert wurden, aber viele von ihnen verschwanden einfach aus dem Menü (d. H. Von 10 Kategorien sortiert nach Position, nur 4 blieben sortiert nach Namen).

Kennen Sie einen Weg, dies zu erreichen?

Antwort

0

Sie können dies auf 2 Arten tun. Mein Ansatz ist dies zu tun, wenn das Menü erstellt wird, auf diese Weise ist es in jeder Sprache sortiert. Verwenden Sie diese Überschreibung für das Modul ps_mainmenu einfach:

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']); 
} 

Die andere Option ist das Sortieren beim Erstellen des Menüs. Aber ich müsste den aktuellen Importcode sehen, und selbst dann könnte es schwieriger sein.

Dies ist für die Kinderkategorien. Für die Hauptkategorien wäre es notwendig, eine andere Funktion zu überschreiben.

+0

Es funktioniert perfekt, vielen Dank! – OuberThat

Verwandte Themen