Account Menu erweitern

Hallo liebe Community,

ich bin neu hier, daher habt bitte ein bisschen Nachsicht mit mir.

Meine Situation: Ich erstelle ein Plugin, dass eine Statistik im Benutzermenü bekommen soll. Anders gesagt: Ein Benutzer loggt siche in, klickt auf sein Konto, dabei erscheint links ein Menü mit „Meine Bestellungen“, „Rechnungsadresse ändern“, etc. Dieses Menü möchte ich gerne um einen weiteren Punkt „Statistik“ ergänzen.

Meine Bootstrap:
 

public function onPostDispatchAccount(Enlight_Event_EventArgs $args)
{
    $controller = $args->getSubject();
    $request = $controller->Request();
    $response = $controller->Response();
    $view = $controller->View();
    if(!$request->isDispatched()||$response->isException()) {
        return;
    }
    $view->addTemplateDir($this->Path().'Views/');
    $view->extendsTemplate('frontend/account/index.tpl');
}

Meine index.tpl :

{extends file='parent:frontend/account/index.tpl'}

{* Breadcrumb *}
{block name='frontend_index_start' append}
    {$sBreadcrumb[] = ['name'=>"{s name='statistik'}Statistik{/s}", 'link'=>{url}]}
{/block}

{block name='frontend_index_left_menu' append}
Link
{/block}

{* Main content *}
{block name='frontend_index_content'}
    Content
{/block}

Der Link erscheint allerdings unter dem Menü, was auf den falschen Block hinweist, allerdings finde ich auch keinen passenderen…

Bin ich auf dem völlig falschen Dampfer?

Hi fehmelchen,

welche Template Version nutzt du denn? Das Responsive Theme in Shopware 5 oder noch ein altes Legacy Template ( Emotion ) ?

  1. Diese Zeile kannst du dir in Shopware5 sparen, Shopware sucht automatisch nach .tpl Dateien, wenn du zuvor addTemplateDir aufgerufen hast.

    $view->extendsTemplate(‘frontend/account/index.tpl’);

  2. Du hast dich ja anscheinend beim Account Index Dispatch eingeklinkt. Jedoch würdest du dann doch die Startseite des Accountbereiches überschreiben? ( Wenn du z.B. den Block “frontend_index_content” überschreibst. ) Wenn du eine eigene Unterseite haben möchtest musst du einen neuen Controller anlegen. 

  3. Den Block für das Menü im Shopware5 Responsive Theme findest du in der frontend/account/sidebar.tpl

Viele Grüße

hi,

guck dir mal frontend/account/sidebar.tpl an.

{extends file='parent:frontend/account/sidebar.tpl'}

{block name="frontend_account_menu_link_downloads" prepend}
	
		
			link
		
	
{/block}

 

Der Link erscheint allerdings unter dem Menü, was auf den falschen Block hinweist, allerdings finde ich auch keinen passenderen…

Da hast du ja noch den Block „frontend_index_left_menu“ also kein Wunder, dass es unterhalb angezeigt wurde.

Mit deinem Code aus der sidebar.tpl sollte es aber ohne Probleme funktionieren. Tut es das etwa nicht?

Viele Grüße

Ich habe die sidebar.tpl extended und den Link an passender Stelle eingefügt. Funktioniert klasse, danke!

Mein Controller lädt jetzt die entsprechende tpl-Datei, Breadcrumb passt, allerdings stellt die sidebar.tpl nun die Kategorien des Shops dar, statt des Account Menu …

Meine statistics.tpl:

{extends file='frontend/account/index.tpl'}

{* Breadcrumb *}
{block name='frontend_index_start' append}
	{assign var='sBreadcrumb' value=[['name'=>"{s name='Statistics'}Statistiken{/s}",
		'link' =>{url controller='myStatistics' action='index'}]]}
{/block}

{block name="frontend_index_left_categories_my_account"}{/block}

{* Account Sidebar *}
{block name="frontend_index_left_categories" prepend}
	{block name="frontend_account_sidebar"}
		{include file="frontend/account/sidebar.tpl"}
	{/block}
{/block}

{block name='frontend_index_content'}
Content
{/block}

 

Hallo fehmelchen,

ich kämpf gerade mit exakt dem selben Problem herum.

Hast du den Fehler schon gefunden?

Beste Grüße

Ich habe nach einigen hin und her die Lösung gefunden.

Erstens musst du im Controller die Variable ‘sUserLoggedIn’ setzen.

$this->View()->sUserLoggedIn = Shopware()->Modules()->Admin()->sCheckUser();

Dies kannst du entweder in jeder Action machen oder im PostDispatch.

Nun solltest du das Menü schon sehen, aber auch immer noch die Kategorien des Shops.

Hierfür müssen noch ein paar Zeilen in Less hinzugefügt werden (alternativ auch in CSS).

@media screen and (min-width: @tabletViewportWidth) {
  .sidebar-main {
    .is--ctl-##controller_name##.is--user & {
      display: block;

      & + .content--wrapper {
        .unitize(margin-left, 260);
      }
    }

    .is--ctl-##controller_name## & {
      .categories--headline,
      .categories--navigation,
      .shop-sites--container {
        display: none;
      }
    }
  }
}

##controller_name## mit dem Controller Namen ersetzen.

 

Ich hoffe das hiflt weiter :slight_smile:

VG

exii88

1 „Gefällt mir“