• Jeder User im Forum verpflichtet sich zur Akzeptanz und zur Einhaltung dieser Regeln:
    1. Umgangston
      Ein angemessener höflicher Umgangston, ohne Beleidigungen, Beschimpfungen und aggressive Postings ist für jedes Mitglied Pflicht.
    2. Beiträge
      Jedes Mitglied sollte sich bemühen nur sinnvolle Beiträge zum Thema zu posten. Dabei ist unbedingt vorher zu prüfen, ob das Thema vorher schon einmal diskutiert wurde und daher fortgesetzt werden kann
      • Suchfunktion benutzen!
      • offizielle Doku lesen!
    3. Haftung
      Jeder Beitragsersteller übernimmt die alleinige Verantwortung seiner Inhalte.
    4. Werbung
      Wir erlauben keine Beiträge, Signaturen, Private Nachrichten oder eMails an Benutzer, die Werbung enthalten. Ausgenommen
      sind Stellengesuche /-angebote, welche ausschließlich im Forum "Stellengesuche" veröffentlicht werden dürfen.
    5. Verstöße
      Regelwidrige Beiträge sollten dem Team gemeldet werden. Nach deren Überprüfung werden wir schnellstmöglich
      entsprechend handeln.
    6. Authorität
      Den Anweisungen der Team-Mitglieder (Administratoren und Moderatoren) sind in diesem Forum Folge zu leisten.
      Bei Fragen oder Beschwerden bitte an diese wenden.
    Wir möchten Euch darauf aufmerksam machen, dass es bei Verstößen gegen einen oder mehreren der oben genannten
    Punkte dem Team frei steht entsprechend zu handeln. Dies kann z.B. das Löschen eines Beitrags, das Ausschliessen bzw.
    Sperren von Mitgliedern oder aber lediglich eine Verwarnung sein.

    In diesem Zusammenhang sollte erwähnt werden, dass das Forum automatisch die IP-Adresse jedes Beitrag-Erstellers
    speichert. Bei schweren Vergehen, behalten wir es uns vor, die IP-Adresse zur Strafverfolgung weiterzugeben.
  • Willkommen im Zend Framework Forum

    ZF1 Zend Framework 1 + ZF2 Zend Framework 2

    Das Zend Framework Forum ist seit 2006 die erste Anlaufstelle für Zend Framework Entwickler in Deutschland. Mit über 70.000 Beiträgen und einer steigenden Nutzerzahl bietet das Forum hilfreiche Themen und ZF-Tutorials für professionelle Entwickler, fortgeschrittene Programmierer sowie Zend Framework Einsteiger.
    Wenn dies Dein erster Besuch in der Zend Framework Community ist, lies bitte zuerst die Hilfe - FAQ durch. Du musst Dich registrieren, bevor Du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um die Registrierung zu starten. Du kannst auch jetzt schon Beiträge lesen. Hier im Forum findest Du die Zend Framework Hilfe, die Du suchst!

    Grüße an alle Zend Framework Entwickler. Das Team vom Zend Framework Forum!

    Drupal Agentur

Mehrfach Navigation Kapitel 11.7

T.Kalweit

New member
Hallo,

wie kann ich den Code für die Navigation aus dem Branch chapter_11_05 und Kapitel 11.7 so verändern, dass die NavigationAbstractServiceFactory genutzt wird, um "multiple navigations" zu erstellen?

MFG

Thorsten
 

Ralf

New member
Hallo Thorsten,

was genau meinst du mit "multiple Navigations". Möchtest du neben dem Hauptmenü noch ein anderes Menü, z.B. für den Footer erstellen? Oder soll das Hauptmenü aus mehreren Ebenen bestehen?

Gruß,

Ralf
 

Ralf

New member
Hallo Thorsten,

dabei musst du einige Dinge beachten. Hier findest du ein Beispiel-Tutorial. Das ist zwar für das ZF2, kann aber mit kleinen Änderungen für das ZF3 übernommen werden:

Zend Framework 2 Navigation - Tutorial 1

Die Konfiguration für den Service-Manager solltest du wie folgt abändern:

PHP:
'service_manager' => [
    'factories' => [          
        'app_navigation' => Zend\Navigation\Service\DefaultNavigationFactory::class,
        'site_navigation' => Application\Model\Navigation\Service\SitemenuNavigationFactory::class,
    ],
],
Wenn es Probleme gibt, bitte wieder melden.

Gruß,

Ralf
 

Kaiuwe

Super-Moderator
dabei musst du einige Dinge beachten.
Nicht unbedingt! ;)

Thorsten war schon richtig, denn mehrere Navigationen lassen sich tatsächlich so einfach erstellen, wie in der offiziellen Doku angegeben. Es muss keine weitere Klasse erstellt werden.
 
Zuletzt bearbeitet:

T.Kalweit

New member
Und wo genau hast du jetzt ein Problem?
Hey die Atom-Brennstäbe brauchen Kühlung! Und wo ist jetzt dein Problem? (Das Problem könnte ich eher lösen;-)

Man bekommt eben nichts mit dem goldenen Löffel serviert;-)

In der Vergangenheit habe immer irgend einen Fehler, wenn ich versuche unter ZF3 mehrfach Menus zu implementieren, unter ZF2 ist es mir mit dem Beispiel aus den Online-Tut's locker gelungen, aber seit ZF3 lande ich immer in der Sackgasse und um den Fehler zu finden, wollte ich mich jetzt an einem bekannten Beispiel orientieren und habe deshalb das Kapitel Navigation aus dem Buch angeführt.
Also ich beziehe mich auf das chapter_11_05, aus dem Git-Repo https://github.com/zf3buch/zendframework-center/ .

Ich editiere das Application Modul und dort ist nur 1 Datei interessant.
Application>config>module.config.php

Der Spaß fängt schon mal damit an, dass in dem Beispiel kein 'service_manager' vorhanden ist. Also Textschnipsel oben ausgeschnitten und in die module.config.php kopiert.
Ich habe noch die Zeile geändert, bei mir steht jetzt:

PHP:
 'service_manager' => [
  'factories' => [
   'app_navigation' => Zend\Navigation\Service\NavigationAbstractServiceFactory::class,
  ],
 ],
und weiter unten habe ich die Navigation um 'special' erweitert.

PHP:
    'navigation' => [
        'default' => [
            'application' => [
                'type'          => Mvc::class,
                'order'         => '100',
                'label'         => 'Startseite',
                'route'         => 'home',
                'controller'    => IndexController::class,
                'action'        => 'index',
                'useRouteMatch' => true,
            ],
        ],
  'special' => [
   [
                'label' => 'Special',
                'route' => 'special',
            ],
            [
                'label' => 'Special Page #2',
                'route' => 'special-2',
            ],
        ],    ],
und der Kram läuft?!?!? Ich kann es nicht glauben, wozu muss man in der config>application.config.php unter 'modules' überhaut Module eintragen?
Bei mir ist das Modul zend/service-Manager, nicht vorhanden.
Warum läuft NavigationAbstractServiceFactory unter einer Factory, obwohl es eine a
bstract factorie ist?
Warum muss ich kein use
Zend\Navigation\Service\NavigationAbstractServiceFactory schreiben?

In der Datei Application>view>layout>header.phtml habe ich noch eine Zeile angepasst:

PHP:
      $menuHelper = $this->navigation('navigation')->menu();
in
PHP:
      $menuHelper = $this->navigation('Zend\Navigation\Default')->menu();
läuft beides.

Die Frage nach meinem Problem hat sich also erledigt, die Fallstricke habe ich mir also immer selbst eingebaut, indem ich noch wie beschrieben Module laden wollte.


 

Kaiuwe

Super-Moderator
Ich will mal trotzdem noch ein paar Stellen kommentieren.
Der Spaß fängt schon mal damit an, dass in dem Beispiel kein 'service_manager' vorhanden ist.
Nicht jedes Modul muss unbedingt etwas im „ServiceManager“ verfügbar machen. Daher kann es schon vorkommen, dass der Eintrag in der Konfiguration nicht vorhanden ist.

und der Kram läuft?!?!? Ich kann es nicht glauben, wozu muss man in der config>application.config.php unter 'modules' überhaut Module eintragen?
Das Module „Application“ ist bereits eingetragen, daher musstest du hier nichts mehr anpassen.

Bei mir ist das Modul zend/service-Manager, nicht vorhanden.
Nicht jede Komponente vom Zend Framework kann als Modul verwendet werden. Sollest du keinen Hinweis in der Dokumentation der jeweiligen Komponente finden, dann einfach in der Dateiliste der Komponente nach der Klasse „Module.php“ schauen. Siehe zum Beispiel bei „Zend\Log“.

Warum läuft NavigationAbstractServiceFactory unter einer Factory, obwohl es eine abstract factorie ist?
Ein „normale Fabrik“ kann in Version 3 vom ZF auch mehrere Dienste bereitstellen. Damit können die meisten abstrakten Fabriken ersetzt werden. Am Ende ist es eine Vereinfachung gegenüber Version 2.

Warum muss ich kein use Zend\Navigation\Service\NavigationAbstractServiceFactory schreiben?
Da du dich in einer Konfigurationsdatei befindest und dort kein Namespace angegeben ist, wird der Code global ausgeführt und dort braucht es keinen ersten Backslash. Du darfst ein „use“ verwenden, musst aber an der Stelle nicht.
 

Ralf

New member
Nicht unbedingt! ;)

Thorsten war schon richtig, denn mehrere Navigationen lassen sich tatsächlich so einfach erstellen, wie in der offiziellen Doku angegeben. Es muss keine weitere Klasse erstellt werden.
Stimmt, ich hatte wie so oft die Zend\Navigation\Service\NavigationAbstractServiceFactory verdrängt. Ist mir leider schon mehrfach passiert. *hmpf*

https://docs.zendframework.com/zend-navigation/quick-start/#using-multiple-navigations

Danke und Gruß,

Ralf
 
Oben