neues smarty-Plugin erstellen

Hallo,

 

ich möchte gern ein eigenes smarty erstellen, mit dieser Anleitung:
https://developers.shopware.com/designers-guide/smarty/?_ga=1.3934256.1483405301.1423301853#register-custom-smarty-plugins
 

Zur Verständnis: Ich erstelle einen neunen Block in einer neuen Datei. Aber wo muss diese dann liegen?
In der Beschreibung heißt auch, dass es einen Pfad gibt:
 

Example:  Path to custom Smarty plugins

/_private/smarty/function.markdown.php
/_private/smarty/modifier.picture.php

Ist das der Pfad, wo ich meine Datei ablegen muss?
Und wie rufe ich das smarty dann auf? 

@Gesundwürzen schrieb:

Hallo,

 

ich möchte gern ein eigenes smarty erstellen, mit dieser Anleitung:
https://developers.shopware.com/designers-guide/smarty/?_ga=1.3934256.1483405301.1423301853#register-custom-smarty-plugins
 

Zur Verständnis: Ich erstelle einen neunen Block in einer neuen Datei. Aber wo muss diese dann liegen?
In der Beschreibung heißt auch, dass es einen Pfad gibt:
 

Example:  Path to custom Smarty plugins

/_private/smarty/function.markdown.php
/_private/smarty/modifier.picture.php

Ist das der Pfad, wo ich meine Datei ablegen muss?
Und wie rufe ich das smarty dann auf? 

 Hallo,

der Pfad der Datei, dessen Block du anpassen möchtest, richtet sich natürlich danach, welchen Block du anpassen möchtest. Es kommt hier also drauf an, wo oder was du anpassen möchtest, um dir evtl. einen Pfad sagen zu können. Meist kann man den Pfad auch anhand von CSS-Klassen ungefähr ableiten.

Den Pfad für die Smart-Datei muss folgendermaßen sein: themes/Frontend/DEIN_THEME/_private/smarty/deine_smarty_datei.php .

Wenn deine Smarty-Funktion bspw. smarty_function_selection heisst, rufst du diese dann über {selection} in deiner Template-Datei auf.

Alle weiteren Informationen dazu findest du hier: Chapter 18. Extending Smarty With Plugins | Smarty .

Beste Grüße

Sebastian

Hallo Sebastian,

ich möchte eine eigene smarty_function erstellen. Ausgeben möchte ich ein array aus einer SQL-Abfrage.
Siehe anderen thread: Neue SQL-Abfrage in array - Programmierung - Shopware Community Forum
Diese möchte ich dann in einer landingpage oder EW aufrufen, falls das möglich ist.

Grüße

Gerd

@Gesundwürzen schrieb:

Hallo Sebastian,

ich möchte eine eigene smarty_function erstellen. Ausgeben möchte ich ein array aus einer SQL-Abfrage.
Siehe anderen thread: http://forum.shopware.com/discussion/37122/neue-sql-abfrage-in-array#latest
Diese möchte ich dann in einer landingpage oder EW aufrufen, falls das möglich ist.

Grüße

Gerd

Hallo,

da dieses Array wahrscheinlich bei den Einkaufswelten oder den Landingpages gar nicht standardmäßig verfügbar sein wird, musst du da sicherlich erstmal eher ran und mit dem entsprechenden Event das Array mit ausgeben lassen. In Smarty-Funktionen selbst ist soweit ich weiss glaub ich ein Datenbankzugriff eher schwer umsetzbar.

Ein Beispiel eines Smarty-Plugins für die Artikel-Detailseite findet man bspw. hier: Eigenen Finanzierungsrechner erstellen - #24 von derkosta - Programmierung - Shopware Community Forum .

Beste Grüße

Sebastian

Vielleicht bin ich auch auf dem Holzweg. Wäre es dann nicht einfacher, das per php zu lösen?

$sql = '
            SELECT
            FROM

Nur: Kann man z.B. $this->s_statistics_search auch includen?

@Gesundwürzen schrieb:

Vielleicht bin ich auch auf dem Holzweg. Wäre es dann nicht einfacher, das per php zu lösen?

$sql = ’
SELECT
FROM

Nur: Kann man z.B. $this->s_statistics_search auch includen?

Hallo,

Template-Dateien und php vertragen sich aber nicht.

Wie erwähnt - einfach das entsprechende Event suchen, dort die Abfrage machen und das Ergebnis der Abfrage wie gewünscht als Array an die Template-Datei (mit assign) übergeben lassen.

Beste Grüße

Sebastian

Hallo Sebastian,

funktioniert hier also 

 {literal} auch nicht?

Zu deiner Antwort, das Event suchen usw. das übersteigt leider meine Kenntnisse  Blush

Ich dachte, das wäre einfacher.

@Gesundwürzen schrieb:

Hallo Sebastian,

funktioniert hier also 

{literal} auch nicht?

Zu deiner Antwort, das Event suchen usw. das übersteigt leider meine Kenntnisse  Blush

Ich dachte, das wäre einfacher.

Hallo,

nein {literal} ist eher für JavaScript-Code gedacht, der { oder } enthält. Damit kannst du auch keinen PHP-Code in die Template-Datei integrieren.

Beste Grüße

Sebastian

Sorry, meinte nicht literal sondern das:

http://www.smarty.net/docsv2/en/language.function.php.tpl

 

@Gesundwürzen schrieb:

Sorry, meinte nicht literal sondern das:

http://www.smarty.net/docsv2/en/language.function.php.tpl

 

Hallo,

ich glaube du solltest langsam einfach mal google oder ähnliches benutzen: {php} | Smarty .

{php} darf und soll nicht mehr verwendet werden - ein einfaches hin- und herraten bringt dich aber deiner Lösung auch nicht weiter.

Beste Grüße

Sebastian

 

Vor allem sollte er auch einfach mal lesen: Dicke fette Headline:

IMPORTANT NOTICE

{php} tags are deprecated from Smarty, and should not be used. Put your PHP logic in PHP scripts or plugin functions instead.

Das hier ist ein ganz gutes Beispiel für ein Smarty Plugin: Template Functions | Smarty

Tja das ist jetzt lustig, dass die ursprüngliche Frage gar nicht beantwortet wurde: Wo müssen eigentlich die eigenen Smarty-Plugins (functions/modifier) abgelegt werden?

So steht’s in der Anleitung:

Example: Path to custom Smarty plugins

/_private/smarty/function.markdown.php
/_private/smarty/modifier.picture.php

 

Bleibt die große Frage, unter welchem Verzeichnis dieser Pfad liegen muss?

 shopware/themes/Frontend/myTheme/\_private/smarty/

ist auf jeden Fall schon mal nicht richtig, zumindest ich habe da keinen Erfolg. Im Moment kann ich mir nur mit dem leider nicht update-sicheren Pfad

showpware/engine/Library/Smarty/plugins

helfen.

 

Hat jemand einen besseren Tipp?

Danke & Gruß

Geert

 

 

Doch der Pfad ist richtig.

shopware/themes/Frontend/myTheme/_private/smarty/

Das Smarty Beispiel Plugin funtkioniert auch ohne Probleme. Wie sieht denn dein Smarty Plugin aus?

1 „Gefällt mir“

Ja, genau da muss es hin.

Du musst aber genau auf den Namen achten. Wenn du zum Beispiel einen modifier in Smarty mit {…mymodifier…} aufrufen willst, dann muss die php-Datei

 modifier.mymodifier.php

heißen und in dieser Datei muss die Funktion

function smarty_modifier_mymodifier(…) {

sein.

Liebe Grüße

Kerstin

1 „Gefällt mir“

Hey Shopwareinar und Kerstin,

nach einigem Probieren - ihr habt natürlich recht, das Verzeichnis ist grundsätzlich richtig. Also, die Modifier werden in den ‘normalen’ Frontend-Templates richtig angezogen,

nur nicht in den Produktexport-Templates !

Siehe auch den Thread: https://forum.shopware.com/discussion/44241/textbausteine-nicht-in-produktexport-templates-verfuegbar/p1

Ist das jetzt ein Denkfehler von mir oder lohnt sich dafür ein Ticket?

Gruß

Geert

Kann gut sein. Ich hatte auch folgendes Problem, das ich hier einmal posten möchte:

Die Datei …\plugins\index\delivery_informations.tpl wird von

…\checkout\items\product.tpl und von

…\detail\data.tpl

eingebunden. Wenn man nun in delivery_informations.tpl einen privaten modifier verwendet, funktioniert dieser im ersten Fall (…product.tpl) einwandfrei. Beim Aufruf durch …product.tpl gibt es einen bösen Error.

Sind die privaten modifier im checkout nicht bekannt ?

Weiß darüber jemand etwas ?

Beispiel 1:

{$var|yeah}

Beispiel 2:

{$var|woop:‘hello’:‘world’}

 

 'onFrontendPostDispatch'
    ];
}

public function onFrontendPostDispatch(\Enlight_Controller_ActionEventArgs $args)
{
    $this->template->smarty->registerPlugin('modifier', 'yeah', [&$this, 'myModifier']);
    $this->template->smarty->registerPlugin('modifier', 'woop', [&$this, 'myModifier2']);
}

public function myModifier($string)
{
    // do your stuff with string

    return $string;
}

public function myModifier2($string, $param1, $param2)
{
    // do your stuff with string
    
    // param1 = hello
    // param2 = world

    return $string;
}

?>

 

1 „Gefällt mir“

Hallo zusammen,

ich hatte das Problem, dass mein Smarty-Modifier nicht in der Bestellbestätigung funktionierte.
Mir hat letztendlich eine Lösung durch einen » CompilerPass « geholfen um einen Smarty-Modiefier in allen Bereichen verwenden zu können.

Vielleicht hilft es auch hier jemandem.

Viele Grüße,
Morty

Hallo Morty

Ich habe ein Smarty-Plugin geschrieben, um die Kundenbewertungen abzurufen, und ich möchte diese Funktion im Artikelexport-Backend-Modul verwenden.
Nach dem Verständnis dieses Threads kann „CompilerPass“ meinen Zweck lösen.
Soll ich also ein benutzerdefiniertes Shopware-Plugin schreiben, um CompilerPass für mein Smarty-Plugin zu implementieren? oder wo es umgesetzt werden soll.

Sie können mein Problem hier überprüfen Smarty-Funktion funktioniert nicht für das Backend-Modul