2

ich ein Modul in Prestashop modifizieren, die Ordnerstruktur wie folgt hat ..Wie eine Variable global zugänglich in Prestashop machen

css 
translations 
index.php 
module.php 
module.tpl 

Es gibt eine Variable $ Produkte, die ein Array aller Produkte hat . Aber es ist nur zugänglich für module.tpl, die alle Produkte auf der Homepage anzeigt, die ich nicht mag.

Ich habe einen Controller erstellt, der auf eine andere Seite und eine Vorlage/view/front/products.tpl umleitet, um alle Produkte anzuzeigen. Aber diese $ products-Variable ist in der Datei products.tpl nicht definiert.

Antwort

1

Wenn Sie einen neuen Controller mit einem erstellten neue Vorlage, müssen Sie in diesem Controller diese Variable erstellen und diese einer Vorlage zuweisen, also:

In der initContent() Funktion des Controllers müssen Sie Erstellen Sie die Variable „$ Produkte“ mit den Werten, die Sie benötigen, zum Beispiel:

$products = Product::getProducts($id_lang, 0, 0, 'id_product', 'DESC'); 

Dann Sie dieses PHP-Variable auf einen Smarty Variable zuweisen müssen den Wert in der TPL-Datei zu zeigen. Um dies zu tun verwenden wir die Methode von „@Ravinder Pal“, aber die Änderung des Wertes:

$this->context->smarty->assign('products', $products); 

Und schließlich können Sie diese Variable in der Vorlage verwenden, die in der initContent() Funktion mit diesem zugeordnet:

{$products} 

Ich hoffe, es hilft Ihnen.

0

Das Definieren einer Konstante könnte den Job erledigen oder vielleicht Sitzungen verwenden. Alles ist von Smarty in Templates zugänglich.

Ex in Ihrem Modul:

 define('MYGLOBALVAR', 'data'); 

in Ihrer Vorlage:

 $smarty.const.MYGLOBALVAR 
+0

Hey danke für deine schnelle Antwort, obwohl es nicht wirklich funktioniert hat. Übrigens, ich habe mich gefragt, ob es eine Möglichkeit gibt, mehrere Displays zurückzugeben, anstatt nur eines. Wie, hookDisplay ($ params) { zurückgeben $ this-> display (file.tpl) UND $ this-> display (file2.tpl); } –

+0

Sie können die Funktion fetch() verwenden. Die obige Methode funktioniert jedoch, wenn sie vor Smarty geladen wird. –

0

Sie können Cookie-Variable gesetzt und es verwenden, wo Sie wollen. wie:

$this->context->cookie->products=$products; 

, wenn Sie in der Steuerung in tpl, drucken möchten, können Sie zuweisen Variable Smarty

$this->context->smarty->assign('products', $this->context->cookie->products); 

und in tpl verwenden es

1

Ich habe das tatsächlich herausgefunden. Ich hatte keine andere Wahl, als eine neue Kategorie zu instanziieren und dann alle Produkte zu holen. Gefällt mir:

$category = new Category(Context::getContext()->shop->getCategory(), (int)Context::getContext()->language->id); 
$nb = 10000;  
$products = $category->getProducts((int)Context::getContext()->language->id, 1, ($nb ? $nb : 10)); 
Verwandte Themen