Hi, ich möchte gerne die Gridangaben an meine Bedürfnisse anpassen,nur leider klappt es nicht so ganz.Bei mir soll der eigentliche Inhalt nicht grid_13 sondern grid_12 sein. Da mein Template updatefähig bleiben soll,möchte ich nun alle .tpl Dateien die diese Angabe enthalten gesondert in mein Template ablegen und dort nur die Gridangabe ändern. Ein Beispiel: Möchte die Gridangabe in der /listing/index.tpl ändern. Hab nun einen neuen Ordner in meinem Template namens listing erstellt.Darin liegt meine neue index.tpl mit folgendem Inhalt. {extends file="…/_default/frontend/listing/index.tpl"} {* Gridanpassung *} {block name='frontend_index_content’append}
{/block} Leider funktioniert es nicht.Woran liegt das???Mir ist aufgefallen das bei den anderen Blöcken die man ändern möchte das {/block} direkt im Anschluss kommt und bei diesem Block kommt das und {/block} erst ganz zum Schluss und da sind dann mehrere Blöcke dazwischen. Steh ich auf dem Schlauch???
{/block} [/quote] Als erstes muss vor das “append” ein Leerzeichen… Aber das wird nichts nützen, denn damit würdest Du ja am Ende des erhalten gebliebenen Content-Blocks [b]
[/b] eines neues (und nicht abgeschlossenes(!)) anlegen. Wobei die interessante Frage tatsächlich ist, wie man das machen könnte, außer den Block komplett zu überschreiben… Im Moment fällt mir dazu nix ein… Man müsste die Klasse des DIV auch als Block definieren, dann könnte man die selektiv ändern… Mir (und unseren Designern) ist das GRID-System sowieso zu restriktiv, in meinem(!) Standard-Template würde ich mich davon wieder lösen. (So wir -bzw. Shopware- denn eine Lösung für dieses Problem finden: viewtopic.php?f=14&t=395&p=2282.) Aber da das ja auch nur CSS-Definitionen sind, ist das ja kein großes Problem. Macht ja keinen Sinn, wenn alle Shops das gleiche Layout haben.
Hast ja recht hab nur gedacht das es vielleicht noch ein paar Leute gibt die das Problem haben. Ich find es zum Beispiel persönlich besser wenn ich links und rechts eine gleichgroße Sidebar hab.
Da müsste man anders rangehen. Es soll ja kein Inhalt ergänzt werden, sondern das grid_12 soll in grid_13 geändert werden. Die richtige Syntax wäre hier: {block name=‘frontend_index_content’} {$smarty.block.parent|replace:“grid_12”:“grid_13”} {/block} Man kann also mit $smarty.block.parent auf den Original-Inhalt des Blocks zurückgreifen und diesen dann z.B. per replace modifizieren - das ist gerade bei solchen Konstrukten die optimalere Variante.
[quote=“Stefan Hamann”]Da müsste man anders rangehen. Es soll ja kein Inhalt ergänzt werden, sondern das grid_12 soll in grid_13 geändert werden. Die richtige Syntax wäre hier: {block name=‘frontend_index_content’} {$smarty.block.parent|replace:“grid_12”:“grid_13”} {/block} Man kann also mit $smarty.block.parent auf den Original-Inhalt des Blocks zurückgreifen und diesen dann z.B. per replace modifizieren - das ist gerade bei solchen Konstrukturen die optimalere Variante.[/quote] Coooooolllllll!
Okay, ich muss zurück rudern. Standardmäßig kann man keine Modifier auf $smarty.block anwenden, da dieses keine Smarty-Variablen im herkömlichen Sinne sind, sondern Platzhalter. Damit das möglich ist, muss zunächst ein “Block-Plugin” eingebunden werden. Datei engine\Enlight\Enlight\Template\Plugins\block.replace.php anlegen. Folgender Code: [code]<?php function smarty_block_replace($params, $content, $smarty, &$repeat, $template)
{
if (is_null($content)) {
return;
}
if (!function_exists('mb_str_replace')) {
// simulate the missing PHP mb_str_replace function
function mb_str_replace($needles, $replacements, $haystack)
{
$rep = (array)$replacements;
foreach ((array)$needles as $key => $needle) { $replacement = $rep[$key]; $needle\_len = mb\_strlen($needle); $replacement\_len = mb\_strlen($replacement); $pos = mb\_strpos($haystack, $needle, 0); while ($pos !== false) { $haystack = mb\_substr($haystack, 0, $pos) . $replacement . mb\_substr($haystack, $pos + $needle\_len); $pos = mb\_strpos($haystack, $needle, $pos + $replacement\_len); } } return $haystack; } } if(empty($params['search'])||empty($params['replace'])) { return $content; } if (function\_exists('mb\_substr')) { return mb\_str\_replace($params['search'], $params['replace'], $content); } else { return str\_replace($params['search'], $params['replace'], $content); } } [/code] Die korrekte Syntax zum anpassen des Inhalts ist dann wie folgt: [code] {block name='frontend\_index\_content'} {replace search='grid\_12' replace='grid\_13'} {$smarty.block.parent} {/replace} {/block} [/code] Wenn du aber "einfach" global die Breite anpassen willst, könntest du doch auch in deiner CSS-Datei die Definition von grid\_12 ändern - dann müssen gar keine Template-Dateien angepasst werden?
OK,danke vielmals dafür. Also das Block-Plugin kommt dann mit dem nächsten Update.Hab ich das so richtig verstanden?Das mit der Breite im CSS ändern.Meinst Du ich sollte in der framework einfach bei grid 13 einen anderen Wert eingeben???Passiert da nichts bezogen auf die Gesamtdarstellung der Seite? Gruß
OK,hab jetzt mal in meiner framework bei grid_13(Standarteinstellung) meinen gewünschten Wert(der von grid_12)eingetragen.Funktioniert auch.Muss ich dann bei PREFIX EXTRA SPACE,PUSH SPACE und PULL SPACE auch den Wert von 12 bei 13 eintragen??? Soll ich das so machen oder lieber mit dem Plugin wie vorher beschrieben?Bei welchem Weg hab ich denn später weniger Arbeit wenn das Update kommt?