Ich habe die {{abhängige}} Vorlagenfunktion verwendet, bevor ich E-Mail-Vorlagen verwendet habe, und ich frage mich, ob dies in statischen CMS-Blöcken möglich ist, zum Beispiel:
<a href="{{store url='customer/account'}}">Login/Account</a>
Könnte aktualisiert werden auf:
<a href="{{store url='customer/account'}}">
{{depend loggedIn}}Account{{/depend}}
{{depend loggedOut}}Login{{/depend}}
</a>
Dies kann nützlich sein, um Kunden die Möglichkeit zu geben, diese innerhalb des CMS-Blocks zu aktualisieren, während die Abhängigkeitsfunktionalität erhalten bleibt.
Offensichtlich hängt diese Abhängigkeit von den Variablen ab, die für den Block selbst verfügbar sind, den die E-Mail-Vorlage mithilfe der folgenden Kriterien erreicht (die mit einem Umschreiben auf den cms-Block / das cms-Modell angewendet werden können):
public function setTemplateParams(array $templateParams)
{
return $this->setData('template_params', $templateParams);
}
Ich bin mir nicht sicher, wie die im Block verwendete Vorlagensprache auf diese Informationen zugreift. Das Hinzufügen von {{depend}}
Tags zu einem Block wird einfach als einfacher Text ausgegeben. Ich gehe davon aus, dass vor dem Rendern des HTML-Codes ein Kompilierungsschritt angewendet wird, aber ein Anstoß in die richtige Richtung, wie vorzugehen ist, wäre eine große Hilfe.
The Right Way™
ist, dass dies nur für diese bestimmte Instanz (des Anmeldelinks) gilt und ich andere Block- / Vorlagenkombinationen für andere Instanzen schreiben müsste, für die möglicherweise die {{abhängige}} Funktionalität erforderlich ist.getLabel()
Funktion aktualisieren , damit ich Etiketteninformationen über die cms mit{{ [...] logged_out_label="Login to your account"}}
und Zugriff weitergeben kann sie mit$this->getBlockParams()
so dass der Editor die Markierung aus dem cms statischen Block außer Kraft zu setzen - ich fühle , dass ein guter Kompromiss ist.Die Filteranweisungen werden verarbeitet, in
Mage_Cms_Model_Template_Filter
denen erbt vonMage_Core_Model_Email_Template_Filter
, sodass Sie alle Funktionen von E-Mail-Vorlagen auch in CMS-Blöcken und -Seiten haben.Aber Sie haben Recht, dass alles davon abhängt, welche Variablen verfügbar sind. Und leider weisen die CMS-Seiten dem Filter keine Variablen zu, wie Sie in sehen können
Mage_Cms_Block_Block::_toHtml()
:Zwischen diesen Zeilen
$processor->setVariables($block->getData())
wäre nützlich.So aktivieren Sie Vorlagenvariablen in CMS
Umschreiben
Mage_Cms_Block_Block
undMage_Cms_Block_Page
wie oben beschrieben.Sie könnten dann zusätzliche Variablen mit
$block->setData()
einem anderen Umschreiben festlegen , aber ich würde vorschlagen, stattdessen einen Beobachter zu verwenden, um flexibler zu sein. Beobachten Sie das Ereigniscms_page_render
für CMS-Seiten odercore_block_abstract_prepare_layout_after
für statische Blöcke, um allen Blöcken / Seiten dynamische Variablen wie "logged_in" hinzuzufügen.Warum siehst du nichts?
Der Grund, den Sie
{{depend}}
als einfachen Text sehen, ist wahrscheinlich, dass keine Vorlagenvariablen festgelegt wurden. Wenn Sie sich diedependDirective
Implementierung ansehen , werden Sie feststellen , dass die Direktive unverändert zurückgegeben wird, wenn keine Vorlagenvariablen vorhanden sind ($construction
eine Übereinstimmung, die vonpreg_match_all
und$construction[0]
dem gesamten Untermuster zurückgegeben wird):Solltest du das wirklich tun?
Wahrscheinlich nicht. In Marius 'Antwort finden Sie eine Lösung für Ihr Problem, wie es von Magento beabsichtigt ist.
Achten Sie in beiden Fällen auf die Auswirkungen des Blockcaches. Möglicherweise müssen Sie dem Block zusätzliche Cache-Tags hinzufügen, um den dynamischen Inhalt zu unterscheiden.
quelle