Eigenes Modul -> Breadcrumb anpassen

Hallo zusammen,

Ich habe nach dem ich tausende Dokus und Anleitungen gewälzt habe, endlich geschaft mein erstes OXID-Modul zu erstellen. Soweit so gut, aber da ist noch eine Sache mit dem Breadcrumb das mich wahnsinnig macht. Auf der Seite steht immer “You are here:” und dnann ist da nichts mehr.

In der zuständigen .tpl ist folgendes eingetragen:

[{capture append="oxidBlock_content"}]
<?php echo 'Works!'; ?>
[{/capture}]
[{include file="layout/page.tpl"}]

Was mache ich flasch, oder besser gefragt, wie bekomme ich den Breadcrumb überschreiben/entfernt?

Ich finde einfach keine Lösung :confused:

Moin,

guck mal hier, das ist das breadcrumbs Template:

Wie du siehst, werden die eigentlichen Breadcrumbs von der Methode getBreadCrumb() im Controller bereitgestellt.
Nehmen wir nun den Controller der CMS Seiten als Beispiel, so wird dort der Breadcrumb zusammengebaut:

Kopiere den Code eifnach mal in den Modul und dann kannst du sowohl den Link als auch den Titel des Breadcrumbs anpassen.

Schon mal vielen Dank. Mein Controller sieht nun wie folgt aus:

<?php

/**
 * Copyright © OXID eSales AG. All rights reserved.
 * See LICENSE file for license details.
 */

namespace MyVendor\MyModule\Controller;

class MyController extends \OxidEsales\Eshop\Application\Controller\FrontendController
{
	    

    public function getBreadCrumb()
    {
        $oContent = $this->getContent();

              
        $aPaths = [];
        $aPath = [];

              
        $aPath['title'] = $oContent->oxcontents__oxtitle->value;
        $aPath['link'] = $this->getLink();
        $aPaths[] = $aPath;

              
        return $aPaths;
    }


  
    public function helloWorld()
    {
		$this->_sThisTemplate = 'test.tpl';

    }
	
}

die TPL:

[{capture append="oxidBlock_content"}]
<?php echo 'Hello World'; ?><br/>
[{/capture}]
[{include file="layout/page.tpl"}]

Das Modul funktioniert natürlich beim aufruf von /index.php?cl=myvendor_mymodule_mycontroller&fnc=helloWorld nicht mehr :frowning: Ich glaube ich verstehe das Prizip dahinte reinfach nicht. Was mache ich den falsch???

Irgendwie… Alles :open_mouth:

Also, fangen wir vorne an.

  1. der Controller muss ohne zusätzlichen Funktionsaufruf per URL Parameter funktionieren, d. H. $this->_sThisTemplate = ‘test.tpl’; sollte direkt in der Klasse und nicht in einer Methode gesetzt werden. Oxid Entwickler Schulung auf Udemy war unter den “tausenden Dokus und Anleitungen” nicht dabei, oder? :smiley: da wird der Aufruf eigener Klassen über URL erklärt.
  2. Du arbeitest ohne einer gescheiten IDE, oder? Sonst müsste der Code in der kopierten Methode rot aufleuchten, weil die dort verwendeten Methoden in deinem Controller nicht existieren.
  3. “Funktioniert nicht mehr” ist keine zielführende Problembeschreibung. Ich vermute, dass man auf die maintenance Seite weitergeleitet wird. In solchen Fällen schreibt Oxid einen Eintrag in source/log/oxideshop.log und dort wird wahrscheinlich stehen, dass die Methode getContent nicht existiert.
  4. in 99,9% der Fälle kann man den Code nicht einfach so von A nach B kopieren, ohne ihn für B anzupassen.
    Setze mal die Werte für title und link hardcoded auf irgendwas und entferne dann alles, was mit $oContent zu tun hat.

Das ist auch nicht selbst erarbeitet, sondern zusammenkopiert, überwiegend oder zu 100% aus dem Contentcontroller. Nimm ein Demomodul oder beginne zu lesen.

Ich glaube du brauchst kein Modul du musst nur ein template anpassen
source/Application/views/wave/tpl/widget/breadcrumb.tpl

suche <li class="text-muted">[{oxmultilang ident="YOU_ARE_HERE"}]:</li>
und füge dies zum beispiel hinzu:

[{if $oViewConf->getTopActionClassName() == 'start'}][{assign var="homeSelected" value="true"}][{/if}]
<li class="[{if $homeSelected != 'true'}]hidden-xs[{/if}][{if $homeSelected == 'true'}] active[{/if}]">
      <a href="[{$oViewConf->getHomeLink()}]" title="[{oxmultilang ident="HOME"}]">
            <span>[{oxmultilang ident="HOME"}]</span>
       </a>
</li>

Ich weiß ja nicht wie du angefangen hast, aber ich habe eben nun mal damit angefangen. Vorwürfe und in den Raum geworfen Beiträge helfen mir da nicht wirklich weiter. Hilfe ist ein Ratschlag oder Ansatz, aber kein Vorwurf…

Nun auch egal, ich werde es schon irgendwie schaffen…

Es wird alles nicht so heiß gegessen, wie es gekocht wird. Wenn Du allerdings wirklich soviel gelesen hättetst, würde sich einiges erübrigen:

> <?php 
> namespace MyVendor\MyModule\Controller;
> use OxidEsales\Eshop\Application\Controller\FrontendController;
> use oxRegistry;
> class mycontroller extends FrontendController
> 
> {
> 	protected $_sThisTemplate = 'test.tpl'; //aus helloWorld();
> 
>     public function render()
>     {
>         parent::render();
>         return $this->_sThisTemplate;
>     }
> 
>     public function getBreadCrumb()
>     {
>        $aPaths = array();
> 
>        $aPath['title'] = oxRegistry::getLang()->translateString(
>                 'DEINE_SPRACHKONSTANTE', //im Modul unter z.B. translations/de/xxx_lang.php anöegen
>                 oxRegistry::getLang()->getBaseLanguage(),
>                 false
>         );
>         $aPath['link'] = $this->getLink();
>         $aPaths[] = $aPath;
>         return $aPaths;
>     }
> 
>    /* public function helloWorld()
> 
>     {
>        $this->_sThisTemplate = 'test.tpl';
> 
>     }*/
> 
> }

$aPath[‘title’] erhält seine Info aus der Sprachdatei. Soll in $aPath[‘title’] der Titel eines Contents erscheinen, so muss dieser geladen werden. Suche nach load bzw. loadbyIdent.