Block überschreiben

Hallo Zusammen,
ich möchte den Block “details_productmain_productlinks” überschreiben.
(Block von productmain.tpl)

Um das zu machen habe ich alles gemacht wie in der Anleitung von Oxid beschrieben.

Anleitung von Oxid

Das hat auch alles gut funktioniert. Ich habe folgedes in meine .tpl geschrieben.

[{$smarty.block.parent}]
<li>
    <span>[B]TEST[/B]</span>
</li>

Allerdings wird mir jetzt einfach am Ende der Liste der Listenpunkt [B]TEST[/B] angezeigt. Ich möchte aber den Ganzen Block überschreiben. So das in der Liste nur noch [B]TEST[/B] steht.

Es ist wahrscheinlich nur eine Kleinigkeit zu ändern. Aber Wiki und Boardsuche haben mich nicht weiter gebracht.

Bitte um hilfe.

du hast aber unaufmerksam gelesen :slight_smile:

nimm

[{$smarty.block.parent}]

wieder raus

immerer wenn es um Smarty geht, kann die Smarty Doku helfen, in diesem Fall z.B.
http://www.smarty.net/docs/en/language.function.block.tpl

das wars besten dank -.-

Hi Zusammen,

Ich greife diesen Thread nochmal auf da ich ebenfalls ein Block-Element überschreiben will.
Ich bin Anfänger, daher könnte es durchaus sein, dass die Lösung recht einfach ist.

Um ein Block-Element überschreiben zu können muss ich es als Modul registrieren. Dazu benötige ich also auch eine metadata.php. Dazu habe ich diese Anleitung benutzt.

Ich hab hier die[B] Shop-Version 4.84 Community Edition[/B] und daraus habe ich folgende metadata.php erstellt:

<?php

$sMetadataVersion = '1.0';

$aModule = array(
    'id'           => 'sidebar_boxes',
    'title'        => 'Linke Sidebarboxen hinzufügen',
    'description'  => 'Fügt der Sidebar mehrere Boxen hinzu die auf CMS-Seiten verweisen',
    'version'      => '1.0',
    'author'       => 'Oliver Stecher',
    'url'          => 'http://www.techdivision-econsulting.com',
    'extend'		   => array(),
    'blocks' => array(
        array('template' => '/layout/sidebar.tpl', 'block'=>'sidebar', 'file'=>'sidebar.tpl'),
        				),
    )
?>

Sie liegt in folgendem Verzeichnis:[B] /modules/sidebarboxes[/B]

Der Block an den ich etwas anhängen will nennt sich [B]sidebar in der sidebar.tpl[/B]. Das Ziel des Moduls sollte es sein mehrere Boxen der Sidebar anzuhängen, welche auf eine CMS-Seite verweist. So sieht meine Template-Datei im Modul aus, welches den Block sidebar erweitern soll:

[{extends file="sidebar.tpl"}]
	[{block name="sidebar" append}]
		[{oxifcontent ident="box1_left" object="oCont"}]
			[{ oxcontent ident=box1_left }]
		[{/oxifcontent}]

		[{oxifcontent ident="box2_left" object="oCont"}]
			[{ oxcontent ident=box2_left }]
		[{/oxifcontent}]

[{oxifcontent ident="box3_left" object="oCont"}]
		[{ oxcontent ident=box3_left }]
[{/oxifcontent}]

[{oxifcontent ident="box4_left" object="oCont"}]
		[{ oxcontent ident=box4_left }]
[{/oxifcontent}]

		[{oxifcontent ident="box5_left" object="oCont"}]
			[{ oxcontent ident=box5_left }]
		[{/oxifcontent}]

		[{oxifcontent ident="box6_left" object="oCont"}]
			[{ oxcontent ident=box6_left }]
		[{/oxifcontent}]
	[{/block}]

Die Datei liegt in folgendem Verzeichnis :[B] /modules/sidebarboxes/out/blocks[/B]

Der Code im Block-Element wurde breits in der sidebar.tpl direkt getestet und er funktioniert.

Im Backend sieht das ganze auch soweit ganz gut aus, jedoch wenn ich das Modul aktiviere sind die CMS-Seiten nicht in der Sidebar zu sehen. Ich vermute, dass das Problem in der Registrierung des Moduls liegt. Aber was mach ich falsch?

Grüße mediaJunkie

kann mir keiner weiter helfen? :slight_smile:

Schau mal hier: http://forum.oxid-esales.com/showthread.php?t=20827#post133293

Das macht genau das, was du willst. Gehta uch in 48

Ja richtig, dieses Modul hab ich bereits integriert. Aus zwei Gründen würde ich jedoch gern meine Lösung umsetzen:

[ul]
[li]Das Modul bietet mir genau eine Box. Ich möchte jedoch mehrere. Das Modul öfter zu integrieren wurde bereits erfolglos versucht.[/li][li]Der Lösungsansatz mit dem Überschreiben eines Blockes kann, wenn es funktioniert, auf noch mehr andere Probleme angewandt werden die hinten anstehen. Zumal diese Lösung auch Update sicher ist.[/li][/ul]

Mein Fokus liegt also nicht unbedingt darauf ein paar Boxen zu integrieren, sondern ein Modul zum Laufen zu bringen.

Die Geschichte mit den Boxen war nur als Übung gedacht, um zu sehen ob es wirklich funktioniert.

Trotzdem danke für Deinen Lösungsansatz @adamweber

Damit kannste soviel Boxen einsetzen, wie benötigt. Entweder über ein CSM oder mehrere.
http://forum.oxid-esales.com/showthread.php?t=22113&highlight=logoapp&page=2

Schau die letztne Beiträge an…

Viel mehr würde mich interessieren warum mein Modul (code siehe oben) nicht funktioniert.

Also bei uns geht es. Halte dich an die readme.

???

[{block name="sidebar" append}]

???

Nimm:

[{$smarty.block.parent}]

So… hab nun folgende Varianten versucht:

[{extends file="sidebar.tpl"}]
		[{$smarty.block.parent}]
......
{extends file="sidebar.tpl"}]
	[{block name="sidebar"}]
		[{$smarty.block.parent}]
....
	[{/block}]

jedoch ohne Erfolg.

Ich hab auch immer brav Views geupdatet Temp´s gelöscht und Cache´s geleert.

block.parent hab ich deswegen nicht benutzt da im zweiten Post auf eine Smarty-Seite verlinkt wird, die eben die append-Methode beschreibt und ich Post von der block.parent abgeraten wurde.

Die Raterei kostet sehr viel Zeit. Lade das Modul hoch und Dir wird geholfen. Metadata und die Struktur sind wichtig und sollten vollständig sein.

Ich lasse mal diesem diesen Thread wieder aufleben, statt einen neuen zu starten.

Ich möchte mit einem Modul einen Block überschreiben, stehe aber gerade mal wieder auf dem Schlauch und brauche Hilfe.

Es ist ein OXID 6.2.4 CE.
In der Metadata.php habe ich das hier

    'blocks' => array(
        ['template' => 'email/html/oder_cust.tpl',    'block' => 'email_html_order_cust_paymentinfo',  'file' => 'views/blocks/sim_email_html_order_cust_paymentinfo.tpl'],
    )

Die Pfade sind (glaube ich) richtig. Cache habe ich bereuts geleert und Views geupdatet.

Wie kann ich jetzt am besten de Fehler suchen, warum das nicht funktioniert?
Ich kann mich auch daran erinnern, dass es auf PAckagist mal ein Modul gab, welches bei intallierten Modulen eventuelle Fehler anzeigt? Das habe ich nicht gefunden - hat hier jemand ggf. einen Link für mich?
Und gibt es andere Module zur Hilfestellung hierfür?

Danke vorab.

Deine Syntax ist unsauber. Entweder nimmst array() oder [] aber beides vermischen ist Katastrophe.

  1. Würde ich prüfen ob ein anderes Modul den gleichen Block überlädt.
  2. Unter der Systemgesundheit im Admin werden z.B. fehlende Template Blöcke angezeigt, damit könntest prüfen ob der Block den überladen willst vorhanden ist. Alternativ guckst in der Datei die überladen möchtest nach.
  3. Gibt es je nach Metadata Version Unterschiede wo OXID eShop dein Block Template Verzeichnis im Modul erwartet, neuere OXID eShop Community Serien wie die 6.2 sollen dies laut Dokumentation abfangen, aber dem könntest ggfs. nachgehen.
  4. Du musst im Code die Stelle suchen wo OXID eShop die Blocks fürs Theme einlädt und sich einklingen würde. An dieser Stelle könntest anfangen mit dem Debuggen warum ein Block nicht verarbeitet wird.

Ivh tippe mal drauf, dass ‘template’ => ‘email/html/oder_cust.tpl’ falsch ist. Ich würde es mit order probieren.

Danke, das habe ich mittlerweile auch schon entdeckt aber das ist leider nicht dir Ursache.

Kommt drauf an. Modul neu gestartet (Composer)? 'Wurde der Eintrag in DB OXTPLBLOCKS geändert?

Danke für Deine Anteilnahme.

Was muss denn hier alles gemacht werden?
Immer wenn ich eine Änderung an einem Modul vornehme, mache ich

  • Modul deaktivieren, aktivieren
  • Views updaten
  • Cache leeren.

Muss wirklich jedes mal das Modul mit composer update neu geupdatet werden?

Die Änderung mache ich im Modules-Ordner und wenn das funtkioniert, ändere ich es im Verzeichnis-Repository.

Zu indianer3c: Ja, du hast recht. Die Syntax im Array mit den eckigen Klammern ist nicht gut. Habe das nun korrigiert. In meiner Verzweiflung habe ich eigene Schreibweisen mit Schreibweisen anderer Entwickler gemischt.

Der Bereich in der Metadata-php V 2.1 sieht nun so aus:

    'blocks' =>
        array(
            'template' => 'email/html/order_cust.tpl',
            'block'    => 'email_html_order_cust_paymentinfo',
            'file'     => 'views/blocks/email_html_order_cust_paymentinfo.tpl'
        ),

leider geht es noch immer nicht.

Änderungen an der metadata musst mitteilen. install oder apply configuration. In der Datenbank kannst prüfen, ob die Änderung geschrieben wurde.