2017-10-11 3 views
1

Meine Prestashop-basierte Site hat derzeit eine Überschreibung für AdminOrdersController.php, ich habe sie im Override-Ordner platziert.Prestashop 1.6 Create-Modul zum Anzeigen des Carrier-Filters

Von den unten stehenden Link zur Verfügung gestellt, es perfekt funktioniert gut ein Trägerfilter hinzufügen, die in Prestashop 1.6 jetzt verfügbar ist. Ich habe die Lösung ausprobiert und es funktioniert perfekt.

Referenz: Adding carrier filter in Orders page.

Leider für Produktionsstätte, ich habe keinen Zugriff auf die wichtigsten Dateien und nicht in der Lage als solche zu implementieren. Daher muss ich ein benutzerdefiniertes Modul erstellen. Beachten Sie, dass ich bereits eine Überschreibung für AdminOrdersController.php eingerichtet habe. Ich möchte diesen Override antippen und den Filter einfügen.

Ich habe es geschafft, ein Modul zu erstellen und versucht, eine Überschreibung (mit dem Code in der URL zur Verfügung gestellt) in mymodule/override/controller/admin/AdminOrdersController.php mit der Carrier-Filter-Funktion.

Es gab keine Änderungen/Auswirkungen, ich bin verwirrt. Muss ich eine .tpl Datei erzeugen oder kopieren?

Jede Anleitung wird sehr geschätzt.

Vielen Dank.

Antwort

1

Während die Antwort in der verknüpften Frage gut funktioniert, kann das gleiche mit einem Modul allein erreicht werden (keine Überschreibungen erforderlich).

Admin-Controller haben einen Haken für Listenfeldänderungen. Es gibt zwei mit dem gleichen Namen, aber sie haben unterschiedliche Daten in ihrem params Array.

actionControllernameListingFieldsModifier ausgeführt, bevor ein Filter angewendet wird, aufzulisten.

actionControllernameListingFieldsModifier ausgeführt, bevor Daten aus DB gezogen wird und Liste wiedergegeben wird.

So können Sie Felder zu vorhandenen Controller Listendefinition wie dies in Ihrem Modul-Datei hinzufügen:

public function hookActionAdminOrdersListingFieldsModifier($params) { 
    if (isset($params['select'])) { 
     $params['select'] .= ', cr.name'; 
     $params['join'] .= ' LEFT JOIN `'._DB_PREFIX_.'carrier` cr ON (cr.`id_carrier` = a.`id_carrier`)'; 
    } 
    $params['fields']['carrier'] = array(
     'title' => $this->l('Carrier'), 
     'align' => 'text-center', 
     'filter_key' => 'cr!name' 
    ); 
} 

Da Arraydaten durch Bezugnahme in $params Array übergeben werden Sie sie in Ihrem Haken modifizieren und Änderungen bestehen bleiben zurück zum Prüfer. Dies wird Träger Spalte am Ende der Liste anhängen.

Es ist Prestashop beste Praxis zu versuchen, Probleme durch Modulhaken zu lösen und nur, wenn es wirklich keine Möglichkeit, es mit Haken zu tun, dann tun Sie es mit Überschreibungen.

+0

Notiert. Vielen Dank für Ihren Vorschlag. Ich habe es geschafft, die Seite basierend auf den Haken, den Sie vorgeschlagen, zu bearbeiten. Ihr Code gibt zwar einen Fehler zurück, kann aber nicht ausgeführt werden. – Enthu

+0

$ params ['select']. = ' , cr.name als carrier '; $ params [' join ']. =' LINKE VERBINDUNG ''._DB_PREFIX _.' carrier' cr ON (cr.'id_carrier' = a.'id_carrier') '; $ params ['fields'] ['carrier'] = array ( 'title' => $ this-> l ('Träger'), 'align' => 'text-center' ); Dies gibt einen Fehler zurück: Unbekannte Spalte 'Träger' in 'Where-Klausel' – Enthu

+0

Es zeigte eine Anzeige von Bestellungen mit Träger-Filter, aber wirft mir einen Fehler, wenn ich in das Suchfeld eingab. – Enthu

0

Haben Sie /cache/class_index.php gelöscht? Sie müssen, wenn Sie möchten, dass Ihre Überschreibung wirksam wird. Wenn es immer noch nicht funktioniert, können Sie möglicherweise mit dem in der AdminOrderControllers-Methode aufgerufenen Hook mit Ihrem neuen Modul arbeiten.

+0

Notiert, ich werde diese Methode versuchen, wenn der Haken nicht für mich arbeiten kann. Am besten nicht zu überschreiben, aber ich habe versucht, für einen Tag zu übersteuern. :( – Enthu

Verwandte Themen