turk porno porno escort rokettube
Ergebnis 1 bis 15 von 15

Thema: Breadcrumb wird nicht angezeigt

  1. #1
    Erfahrener Benutzer
    Registriert seit
    05.09.2008
    Beiträge
    321
    Thanks
    0
    Thanked 3 Times in 1 Post

    Standard Breadcrumb wird nicht angezeigt

    Ich habe eine Navigation, die ohne Probleme generiert wird.
    PHP-Code:
            $oMenuHelper $this->navigation('navigation')->menu();
            
    $oMenuHelper->setUlClass('navmenu');

            echo 
    $oMenuHelper->render(); 
    Leider erhalte ich aber bei Breadcrumbs gar nichts
    PHP-Code:
            echo $this->navigation('navigation')
                      ->
    breadcrumbs()
                      ->
    setLinkLast(false)
                      ->
    setMinDepth(0)
                      ->
    setSeparator(' ≫ '); 
    Eine Beispiel-Route sieht wie folgt aus:
    PHP-Code:
    return [
            
    'router' => [
                
    'routes' => [
                    
    'home' => [
                        
    'type' => Segment::class,
                        
    'options' => [
                            
    'route'    => '/[:lang]',
                            
    'defaults' => [
                                
    'controller' => IndexController::class,
                                
    'action'     => 'index',
                                
    'lang'         => 'de',
                            ],
                            
    'constraints' => [
                                
    'lang' => '(de)',
                            ],
                        ],
                    ],
                ],
            ],
        ]; 
    Die Navigation sieht für die Startseite wie folgt aus:
    PHP-Code:
    return [
            
    'navigation' => [
                
    'default' => [
                    
    'home' => [
                        
    'type'             => Mvc::class,
                        
    'order'         => 100,
                        
    'label'         => 'application_navigation_home',
                        
    'route'         => 'home',
                        
    'controller'     => IndexController::class,
                        
    'action'         => 'index',
                        
    'resource'        => IndexResource::NAME,
                        
    'privilege'        => IndexResource::PRIVILEGE_INDEX,
                    ],
                ],
            ],
        ]; 
    Wenn ich jetzt Mvc.php (https://github.com/zendframework/zen...e/Mvc.php#L131) durch debugge. Dann ist das $this->routeMatch leer. Deswegen wird die Seite wahrscheinlich auch nicht als Aktiv gesetzt.

    Woran kann dies denn liegen? Wo habe ich meinen Fehler?

  2. #2
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.520
    Thanks
    4
    Thanked 356 Times in 287 Posts

    Standard

    Zitat Zitat von rainman1983 Beitrag anzeigen
    Woran kann dies denn liegen?
    Auf den ersten Blick hätte ich gesagt, dass es am Parameter „lang“ der Route liegt, denn davon weiß die Seite in der Navigation nichts.

    Zitat Zitat von rainman1983 Beitrag anzeigen
    Dann ist das $this->routeMatch leer.
    Hast du eine eigene Fabrik erstellt, welche den Navigations-Container erstellt?

    Nebensache:

    Der Code für die Ausgabe von Menü und Breadcrumb geht auch kürzer:
    PHP-Code:
    <?= $this->navigation('default')->menu()->setUlClass('navmenu'?>

    <?= $this->navigation('default')->breadcrumbs()->setMinDepth(0)->setSeparator(' ≫ '?>
    Zitat Zitat von rainman1983 Beitrag anzeigen
    Die Navigation sieht für die Startseite wie folgt aus:
    PHP-Code:
    'controller'     => IndexController::class,
    'action'         => 'index'
    Wird nicht gebraucht, da du die Route bereits festgelegt hast und diese bereits auf Kontroller und Aktion verweist.
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

  3. #3
    Erfahrener Benutzer
    Registriert seit
    05.09.2008
    Beiträge
    321
    Thanks
    0
    Thanked 3 Times in 1 Post

    Standard

    Ich habe mich am Beispiel im Buch von Ralf Eggert gehalten. Deswegen verwende ich keine eigene Fabrik für die Navigation. Der Parameter "lang" ist nur der Sprachenschlüssel. Wenn ich diesen aus der Route lösche, dann wird mir trotzdem keine Breadcrumb angezeigt.

  4. #4
    Erfahrener Benutzer
    Registriert seit
    05.09.2008
    Beiträge
    321
    Thanks
    0
    Thanked 3 Times in 1 Post

    Standard

    Ich habe mir jetzt einen Listener erstellt, wo ich mir das manuell überprüfe. Sobald die Reource und Privilege von der aktuellen Seite und von der Navigation übereinstimmen. Setze ich den Parameter $navigation->setActive(true). Dies funktioniert sehr gut.

    Bloß habe ich jetzt noch Seiten, wo nicht sichtbar sind. Bei diesen funktioniert es leider nicht. Da diese zum Bearbeiten von Datensätzen vorhanden sind. Diese kann man nicht direkt aufrufen, da ja keine Datensatz-ID in der Navigation bekannt ist. Wie kann ich dies noch hinzufügen, so dass ich hier auch Breadcrumb erhalte?

  5. #5
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.520
    Thanks
    4
    Thanked 356 Times in 287 Posts

    Standard

    Zitat Zitat von rainman1983 Beitrag anzeigen
    Deswegen verwende ich keine eigene Fabrik für die Navigation.
    Wie sieht deine Konfiguration aus? Gibst du eine Fabrik irgendwo an oder lädst du zend-navigation als Modul?
    (Das der „RouteMatch“ fehlt ist falsch und daher die Fragen.)

    Zitat Zitat von rainman1983 Beitrag anzeigen
    Der Parameter "lang" ist nur der Sprachenschlüssel.
    Nöö, für das ZF ist es ein Parameter. Du verwendest diesen nur als Schlüssel für Sprachen.

    Zitat Zitat von rainman1983 Beitrag anzeigen
    Wenn ich diesen aus der Route lösche, dann wird mir trotzdem keine Breadcrumb angezeigt.

    Ich habe mir jetzt einen Listener erstellt…
    Dies ist nur ein Workaround. Es stimmt aber immer noch etwas nicht in deiner Navigation, denn ein manuelles Setzen ist unnötig.
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

  6. #6
    Erfahrener Benutzer
    Registriert seit
    05.09.2008
    Beiträge
    321
    Thanks
    0
    Thanked 3 Times in 1 Post

    Standard

    Zitat Zitat von Kaiuwe Beitrag anzeigen
    Wie sieht deine Konfiguration aus? Gibst du eine Fabrik irgendwo an oder lädst du zend-navigation als Modul?
    (Das der „RouteMatch“ fehlt ist falsch und daher die Fragen.)
    Ich lade das Modul Zend\Navigation in der Datei config/application.config.php. Mehr mache ich nicht. Anschließend wurde auch schon die Navigation angezeigt. Bloß nicht die Breadcrumb. Wie kann ich das ändern?

  7. #7
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.520
    Thanks
    4
    Thanked 356 Times in 287 Posts

    Standard

    Kannst du mal ein Beispiel bereitstellen, z.B. bei Github? Natürlich komplett reduziert, nur damit man deinen Fehler nachvollziehen kann.
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

  8. #8
    Erfahrener Benutzer
    Registriert seit
    05.09.2008
    Beiträge
    321
    Thanks
    0
    Thanked 3 Times in 1 Post

    Standard

    Ich habe mal ein sauberes Projekt begonnen. Hier funktioniert es leider.

    Deswegen werde ich mal mein großes Projekt überprüfen, wo ich den Fehler eingebaut habe. Bisher habe ich noch nichts gefunden.

  9. #9
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.520
    Thanks
    4
    Thanked 356 Times in 287 Posts

    Standard

    Zitat Zitat von rainman1983 Beitrag anzeigen
    Deswegen werde ich mal mein großes Projekt überprüfen, wo ich den Fehler eingebaut habe.
    Nimm mal alle Listener raus, welche mit dem „MvcEvent“ arbeiten und schau dann ob es geht.
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

  10. #10
    Erfahrener Benutzer
    Registriert seit
    05.09.2008
    Beiträge
    321
    Thanks
    0
    Thanked 3 Times in 1 Post

    Standard

    Wenn ich alle Listener herausgenommen habe, dann wurde auf einmal die Breadcrumb angezeigt. Anschließend bin ich auf die Suche gegangen, wo das Problem lag.

    Ich habe einen NavigationListener, wo ich Abgleiche, ob der aktuelle Benutzer, diesen Navigationspunkt überhaupt angezeigt bekommen darf. Wenn nicht, dann wird der Knoten, aus der Navigation entfernt und nicht angezeigt. So habe ich ein flexibleres Berechtigungssystem, als dies mit verschiedenen Rollen aufzubauen.

    Soweit ich jetzt herausgefunden habe, liegt es daran, sobald ich in der Factory die Navigation hole, dass dann die Breadcrumb nicht mehr angezeigt wird.

    NavigationListenerFactory:
    PHP-Code:
    /** @var $oNavigation \Zend\Navigation\Navigation */
    $oNavigation $oContainer->get(\Zend\Navigation\Navigation::class); 
    NavigationListener:
    PHP-Code:
    public function attach(EventManagerInterface $oEvents$iPriority 1)
    {
                
    $this->listeners[] = $oEvents->attach(MvcEvent::EVENT_DISPATCH, [$this'prepareNavigation'], -1000);
     }

    public function 
    prepareNavigation(MvcEvent $oEvent)
    {
                
    // ....
                
    $this->_oNavigationHelper->setRole($this->getCurrentRole());
                
    $this->_oNavigationHelper->setAcl($this->_oUserAcl);

    Wie kann ich dies anders lösen?

  11. #11
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.520
    Thanks
    4
    Thanked 356 Times in 287 Posts

    Standard

    Zitat Zitat von rainman1983 Beitrag anzeigen
    Wenn nicht, dann wird der Knoten, aus der Navigation entfernt und nicht angezeigt. So habe ich ein flexibleres Berechtigungssystem, als dies mit verschiedenen Rollen aufzubauen.
    Dies widerspricht sich doch mit deinem Code. Wenn du Seiten entfernst, die nicht vom Benutzer aufgerufen werden sollen, warum setzt du dann noch die Rolle und die ACL in die Navigationshelfer?!
    An welcher Stelle ist dieses System flexibler? Und selbst wenn man so vorgehen wollte, dann ergibt es keinen Sinn, die Seiten der Navigation hinzuzufügen, wenn diese kurz danach wieder entfernt werden.
    Zusätzlich wird das ganze auch noch während des „Dispatch“-Vorgangs durchgeführt, obwohl noch nicht klar ist, ob überhaupt ein Layout oder View-Skript gerendert wird.

    Sehr konfus die Geschichte!

    Zitat Zitat von rainman1983 Beitrag anzeigen
    Soweit ich jetzt herausgefunden habe, liegt es daran, sobald ich in der Factory die Navigation hole, dass dann die Breadcrumb nicht mehr angezeigt wird.
    Der „RouteMatch“ ist mit dem „MvcEvent::EVENT_DISPATCH“ vorhanden und daher sollte dies stimmen. Du baust deine Navigation um oder neu, liegt vielleicht hier der Fehler? (den Part sehen wir leider nicht)
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

  12. #12
    Erfahrener Benutzer
    Registriert seit
    05.09.2008
    Beiträge
    321
    Thanks
    0
    Thanked 3 Times in 1 Post

    Standard

    PHP-Code:
    public function prepareNavigation(MvcEvent $oEvent)
            {
                if (
    $this->_oAuthService->hasIdentity())
                {
                    
    $oPaginator $this->_oPermissionRepository->getListExtended(19999);

                    foreach (
    $this->_oNavigation AS $mKeyMain => $oValueMain)
                    {
                        
    $sResPriv $this->getResourcePrivilege($oValueMain->resource$oValueMain->privilege);

                        
    /** @var $oEntityPermission \AdminPermission\Model\Entity\PermissionEntity */
                        
    foreach ($oPaginator->getCurrentItems() As $mKeyPermission => $oEntityPermission)
                        {
                            if (
    $sResPriv == $oEntityPermission->getTarget()->getZiel())
                            {
                                
    $iPosition   $oEntityPermission->getPosition() - 1;
                                
    $sPermission substr($this->_oAuthService->getIdentity()->getBerechtigung(), $iPosition1);

                                if (
    $sPermission == 0)
                                {
                                    
    $this->_oNavigation->removePage($oValueMain);
                                }
                            }
                        }
                    }
                }
                else
                {
                    
    $this->_oNavigation->removePages();
                }

                
    $this->_oNavigationHelper->setRole($this->getCurrentRole());
                
    $this->_oNavigationHelper->setAcl($this->_oUserAcl);
            } 
    $this->_oPermissionRepository->getListExtended(1, 9999); = Hier erhalte ich die Berechtigungen von der Datenbank!
    $sResPriv = Hier bekomme ich dann den String $sResource--$sPrivilege zurück.

  13. #13
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.520
    Thanks
    4
    Thanked 356 Times in 287 Posts

    Standard

    Verwirf mal deine Fabrik für den Listener, denn du kannst alles vom „MvcEvent“ holen. Erst den View-Helfer „NavigationHelper::class“ per „ViewHelperManager“ und dann kommst du vom View-Helfer auch an den Container. Ebenfalls bekommst du dein Repository.

    Code löschen ist immer schön!
    Geändert von Kaiuwe (15.06.2017 um 13:29 Uhr)
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

  14. #14
    Erfahrener Benutzer
    Registriert seit
    05.09.2008
    Beiträge
    321
    Thanks
    0
    Thanked 3 Times in 1 Post

    Standard

    Zitat Zitat von Kaiuwe Beitrag anzeigen
    Verwirf mal deine Fabrik für den Listener, denn du kannst alles vom „MvcEvent“ holen. Erst den View-Helfer „NavigationHelper::class“ per „ViewHelperManager“ und dann kommst du vom View-Helfer auch an den Container. Ebenfalls bekommst du dein Repository.

    Code löschen ist immer schön!
    Das stimmt! Es wird jetzt die Breadcrumb ausgegeben. Aber warum funktioniert es jetzt? Wenn ich die Klasse von der Fabrik an den Listener übergebe, dann funktioniert es nicht. Warum?

  15. #15
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.520
    Thanks
    4
    Thanked 356 Times in 287 Posts

    Standard

    Zitat Zitat von rainman1983 Beitrag anzeigen
    Wenn ich die Klasse von der Fabrik an den Listener übergebe, dann funktioniert es nicht. Warum?
    Die Fabrik wird garantiert zu früh aufgerufen und damit steht z.B. kein „RouteMatch“ zur Verfügung. Zum Zeitpunkt der Ausführung vom Listener selber, in deinem Falle „dispatch“, ist der Routing-Vorgang abgearbeitet und „RouteMatch“ vorhanden.

    Lass den Listener am „MvcEvent::EVENT_RENDER“ lauschen, denn das reicht aus.
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

Ähnliche Themen

  1. Action wird nicht angezeigt
    Von Joeschie im Forum Einsteigerfragen
    Antworten: 14
    Letzter Beitrag: 18.02.2011, 15:06
  2. ZendX_JQuery_Form wird nicht angezeigt
    Von zf-neuling im Forum Javascript + RIA
    Antworten: 4
    Letzter Beitrag: 22.11.2010, 00:53
  3. Startseite wird angezeigt, Action nicht
    Von mondy im Forum Installation & Konfiguration
    Antworten: 2
    Letzter Beitrag: 16.05.2009, 01:20
  4. Captcha wird nicht angezeigt
    Von makeflo im Forum Einsteigerfragen
    Antworten: 2
    Letzter Beitrag: 28.04.2009, 17:21
  5. Formular wird nicht angezeigt
    Von heinrichth im Forum Formulare
    Antworten: 3
    Letzter Beitrag: 16.09.2008, 00:30

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •