v2.0.x Fehler in der Admin-Menü Aufbereitung

Thema wurde von Avenger, 11. Juni 2012 erstellt.

  1. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Es ist nicht möglich, im Gambio-Menü existierende Admin-Einträge zu ändern (um z.B. einen Link mir Aufrufparametern zu versehen).

    Der Eintrag wird immer neu eingefügt.

    Lösung:

    in "AdminMenuSource.inc.php"

    PHP:
                                    // add menu item
                                    
    $t_menu_item = array(
                                        
    "title" => htmlspecialchars_decode($t_attributes['title']),
                                        
    "link" => $t_link,
                                        
    "link_param" => $t_attributes["link_param"],
                                        
    "sort" => isset($t_sort) ? $t_sort '1000'
                                        
    );
                                    
    $this->v_menu_structure_array[$t_group_id]["menuitems"][] = $t_menu_item;
    ersetzen mit

    PHP:
                    //Avenger
                                    // add/replace menu item
                                    
    $t_menu_item = array(
                                        
    "title" => htmlspecialchars_decode($t_attributes['title']),
                                        
    "link" => $t_link,
                                        
    "link_param" => $t_attributes["link_param"],
                                        
    "sort" => $t_sort
                                    
    );
                    
    //Check if element with "sort" already exists...
                    
    $menu_item_exists=false;
                    foreach (
    $this->v_menu_structure_array[$t_group_id]["menuitems"] as $key => $menu_item)
                    {
                      if (
    $menu_item['sort']==$t_sort)
                      {
                        
    $menu_item_exists=true;
                        break;
                      }
                    }
                    if (
    $menu_item_exists)
                    {
                      
    $this->v_menu_structure_array[$t_group_id]["menuitems"][$key] = $t_menu_item;
                    }
                    else
                    {
                      
    $this->v_menu_structure_array[$t_group_id]["menuitems"][] = $t_menu_item;
                    }
                    
    //Avenger
     
  2. Manni_HB

    Manni_HB G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    9.098
    Danke erhalten:
    1.540
    Danke vergeben:
    909
    Ort:
    Bremen
    DAS ging mir schon lange auf den Wecker - DICKES DANKESCHÖN!
     
  3. HolgerNils (xycons.de)

    HolgerNils (xycons.de) G-WARD 2013/2014

    Registriert seit:
    29. Oktober 2011
    Beiträge:
    1.972
    Danke erhalten:
    456
    Danke vergeben:
    369
    You made my Day!!!
     
  4. Nicki

    Nicki Erfahrener Benutzer

    Registriert seit:
    12. März 2012
    Beiträge:
    469
    Danke erhalten:
    57
    Danke vergeben:
    29
    ?? Verstehe das jetzt nicht ??

    Was meinst du mit "Gambio-Menü" und welche "Admin-Einträge" ?

    [Auf dem Schlauch steh]
     
  5. Manni_HB

    Manni_HB G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    9.098
    Danke erhalten:
    1.540
    Danke vergeben:
    909
    Ort:
    Bremen
    Na ... dann versuch´ doch mal aus "FAV" => "Favoriten" zu machen ... bis gleich. :)
     
  6. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Der Vollständigkeit halber habe ich auch noch die Möglichkeit vorgesehen, einen Menü-Eintrag zu löschen....

    Wenn man das "link"-Attribut in der XML-Definition leer lässt, wird der existierende Menüpunkt gelöscht....

    Hier der neue Code:

    PHP:
                    //Avenger
                                    // add/replace menu item
                                    
    $t_menu_item = array(
                                        
    "title" => htmlspecialchars_decode($t_attributes['title']),
                                        
    "link" => $t_link,
                                        
    "link_param" => $t_attributes["link_param"],
                                        
    "sort" => $t_sort
                                    
    );
                    
    //Check if element with "sort" already exists...
                    
    $menu_item_exists=false;
                    
    $menuitems_text="menuitems";
                    foreach (
    $this->v_menu_structure_array[$t_group_id][$menuitems_text] as $key => $menu_item)
                    {
                      if (
    $menu_item['sort']==$t_sort)
                      {
                        
    $menu_item_exists=true;
                        break;
                      }
                    }
                    if (
    $menu_item_exists)
                    {
                      if (
    $menu_item['link']=='')
                      {
                        unset(
    $this->v_menu_structure_array[$t_group_id][$menuitems_text][$key]);
                      }
                      else
                      {
                        
    $this->v_menu_structure_array[$t_group_id][$menuitems_text][$key] = $t_menu_item;
                      }
                    }
                    else
                    {
                      
    $this->v_menu_structure_array[$t_group_id][$menuitems_text][] = $t_menu_item;
                    }
                    
    //Avenger
     
  7. Timo (Gambio)

    Timo (Gambio) Administrator

    Registriert seit:
    23. Juni 2011
    Beiträge:
    1.688
    Danke erhalten:
    651
    Danke vergeben:
    46
    Hey Avenger,
    vielen Dank für den Hinweis. Habe dies auf meine Todo Liste gesetzt und werde es nochmal intern absprechen. Wird vermutlich mit einem der nächsten Fixes kommen...

    MfG,
    Timo
     
  8. HolgerNils (xycons.de)

    HolgerNils (xycons.de) G-WARD 2013/2014

    Registriert seit:
    29. Oktober 2011
    Beiträge:
    1.972
    Danke erhalten:
    456
    Danke vergeben:
    369
    Wenn Du schon mal drangehst... mit (und ohne) Avengers Modifikation verschwindet bei uns immer wieder der Inhalt des Bereiches "Favs".
    Da ist dann nur ein "-". Dann muss man irgend einen anderen Eintrag in einem anderen Bereich wählen, damit der Inhalt von "Favs" wieder erscheint.
    Hab das hier schon mehrfach gelesen; wär schön, wenn Du da auch mal reinschauen könntest.

    Vorab vielen Dank!
    Holger
     
  9. Timo (Gambio)

    Timo (Gambio) Administrator

    Registriert seit:
    23. Juni 2011
    Beiträge:
    1.688
    Danke erhalten:
    651
    Danke vergeben:
    46
    Hallo Holger,
    magst du da mal ein Ticket eröffnen mit Shop- & FTP-Zugangsdaten und das Ticket an mich weiterleiten lassen?
    Hast du noch weitere Infos? Passiert das sporadisch, oder bei bestimmten Aktionen?

    Würde mir das Problem dann genauer anschauen.

    MfG,
    Timo
     
  10. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Ich habe da noch was.......

    Man kann den Menüeinträgen noch einen "style" oder "class" mitgeben, um seine eigenen Menüs besser hervorzuheben.

    Sonst sieht man die tollen neuen Funktionen gar nicht...

    PHP:
    <?php
    /* --------------------------------------------------------------
       pt_AdminMenuSource.inc.php 2012-02-15 gm
       Gambio GmbH
       http://www.gambio.de
       Copyright (c) 2012 Gambio GmbH
       Copyright (c) 2012 Avenger, entwicklung@powertemplate.de

       Use "add_compatibility_entries" to add e.g. special CSS formats

       Released under the GNU General Public License (Version 2)
       [http://www.gnu.org/licenses/gpl-2.0.html]

       Copyright (c) 2011 Avenger, entwicklung@powertemplate.de
       --------------------------------------------------------------
    */

    //class pt_AdminMenuSource extends pt_AdminMenuSource_parent
    class pt_AdminMenuSource extends AdminMenuSource
    {
      function 
    init_structure_array( )
      {
        
    // load first gambio menu xml
        
    $t_menu_files[] = $this->v_system_xml_path."gambio_menu.xml";

        
    // load xml plugin files from system
        
    $t_plugin_menu_files_system glob($this->v_system_xml_path.'menu_*.xml');
        if (
    is_array($t_plugin_menu_files_system))
        {
          
    $t_menu_files array_merge($t_menu_files$t_plugin_menu_files_system);
        }

        
    // load xml plugin files from user
        
    $t_plugin_menu_files_user glob($this->v_user_xml_path.'menu_*.xml');
        if (
    is_array($t_plugin_menu_files_user))
        {
          
    $t_menu_files array_merge($t_menu_files$t_plugin_menu_files_user);
        }

        foreach (
    $t_menu_files as $t_menu_file)
        {
          
    // get xml content from ContentView
          
    $coo_view MainFactory::create_object('ContentView');
          
    $t_menu_file_parts explode('/'$t_menu_file);
          
    $t_menu_file_name $t_menu_file_parts[count($t_menu_file_parts)-1];
          
    $t_menu_file_path str_replace($t_menu_file_parts[count($t_menu_file_parts)-1], ''$t_menu_file);
          
    $coo_view->set_template_dir($t_menu_file_path);
          
    $coo_view->set_content_template($t_menu_file_name);
          
    $t_xml_content $coo_view->get_html();
          
    $t_menu_groups$this->unserialize_xml($t_xml_content);
          if (
    is_array($t_menu_groups))
          {
            
    $t_menu_groups $t_menu_groups['menugroup'];
            if (!
    $t_menu_groups[0])
            {
              
    $t_menu_groups = array(=> $t_menu_groups);
            }
            foreach (
    $t_menu_groups as $t_menu_group)
            {
              
    // get attributes from xml
              
    $t_attributes $t_menu_group['@attributes'];
              
    $t_group_id $t_attributes['id'];
              
    // add group if not exists
              
    if (!$this->v_menu_structure_array[$t_group_id])
              {
                
    // add default group values
                
    $this->v_menu_structure_array[$t_group_id] = array('id' => $t_group_id,
                                           
    'title' => '',
                                           
    'sort' => 1000,
                                           
    'background' => 'gambio.png',
                                           
    'menuitems' => array());
              }

              
    // set title
              
    if(trim($t_attributes["title"]) != '')
              {
                
    $this->v_menu_structure_array[$t_group_id]['title'] = trim($t_attributes["title"]);
              }

              
    // set sort order
              
    if(trim($t_attributes["sort"]) != '')
              {
                
    $this->v_menu_structure_array[$t_group_id]['sort'] = trim($t_attributes["sort"]);
              }

              
    // set category image
              
    if(trim($t_attributes["background"]) != '')
              {
                
    $this->v_menu_structure_array[$t_group_id]['background'] = trim($t_attributes["background"]);
              }

              
    // get menu items from xml
              
    $t_menuitems $t_menu_group['menuitem'];
              if (
    is_array($t_menuitems))
              {
                if (!
    $t_menuitems[0])
                {
                  
    $t_menuitems = array(=> $t_menuitems);
                }
                foreach (
    $t_menuitems as $t_menuitem)
                {
                  if (
    $t_menuitem)
                  {
                    
    // get attributes from xml
                    
    $t_attributes $t_menuitem['@attributes'];
                    
    // get menu item link
                    
    $t_link $t_attributes["link"];
                    if (
    defined($t_link))
                    {
                      
    $t_link constant($t_link);
                    }
                    
    // get sort order
                    
    $t_sort $t_attributes["sort"];
                    if (
    $t_sort == "")
                    {
                      
    $t_sort 1000;
                    }
                    
    //Avenger
                    // add/replace menu item
                    
    $t_menu_item = array(
                      
    "title" => htmlspecialchars_decode($t_attributes['title']),
                      
    "link" => $t_link,
                      
    "link_param" => $t_attributes["link_param"],
                      
    "sort" => $t_sort
                    
    );
                    
    $t_class $t_attributes["class"];
                    if (
    $t_class)
                    {
                      
    $t_menu_item["class"]=$t_class;
                    }
                    
    $t_style $t_attributes["style"];
                    if (
    $t_style)
                    {
                      
    $t_menu_item["style"]=$t_style;
                    }
                    
    //Check if element with "sort" already exists...
                    
    $menu_item_exists=false;
                    
    $menuitems_text="menuitems";
                    foreach (
    $this->v_menu_structure_array[$t_group_id][$menuitems_text] as $key => $menu_item)
                    {
                      if (
    $menu_item['sort']==$t_sort)
                      {
                        
    $menu_item_exists=true;
                        break;
                      }
                    }
                    if (
    $menu_item_exists)
                    {
                      if (
    $menu_item['link']=='')
                      {
                        unset(
    $this->v_menu_structure_array[$t_group_id][$menuitems_text][$key]);
                      }
                      else
                      {
                        
    $this->v_menu_structure_array[$t_group_id][$menuitems_text][$key] = $t_menu_item;
                      }
                    }
                    else
                    {
                      
    $this->v_menu_structure_array[$t_group_id][$menuitems_text][] = $t_menu_item;
                    }
                    
    //Avenger
                  
    }
                }
              }
              
    // sort menu items according to sort order
              
    usort($this->v_menu_structure_array[$t_group_id]["menuitems"], array($this"compare_sort_order"));
            }
          }
        }
        
    // sort group items according to sort order
        
    usort($this->v_menu_structure_array, array($this"compare_sort_order"));
      }

        
    // adding menu entries (old school) - hint: prefer xml-file in user_classes/conf/AdminMenu directory
        
    function add_compatibility_entries($admin_access)
        {
        
    $css='
    <style type="text/css">
    .messageStackSuccess {
        color: red !important;
        font-size: 12px !important;
    }

    tr.attributes-odd td {
    /*
      padding-left: 20px;
      position: relative;
    */
      width:auto;
    }

    .menu_entry_hilite {
      font-weight:bold;
      color:red;
    }

    /*
    tr.attributes-odd input[type=checkbox] {
      left: 5px;
      position: absolute;
    }
    */
    </style>'
    ;
        echo 
    $css;
        }
    }
    ?>
     
  11. HolgerNils (xycons.de)

    HolgerNils (xycons.de) G-WARD 2013/2014

    Registriert seit:
    29. Oktober 2011
    Beiträge:
    1.972
    Danke erhalten:
    456
    Danke vergeben:
    369
    Mach ich gern fertig. ;-)
     
  12. Timo (Gambio)

    Timo (Gambio) Administrator

    Registriert seit:
    23. Juni 2011
    Beiträge:
    1.688
    Danke erhalten:
    651
    Danke vergeben:
    46
    So,
    ich habe nun ein paar Änderungen durchgeführt. Man kann nun durch ein neues Attribut bestehende Einträge löschen. Beispielweise:
    <menuitem sort="10" link="FILENAME_GM_LIGHTBOX" title="{$txt.BOX_GM_LIGHTBOX}" delete="true" />

    Trägt man das Attribut bei nicht existierenden Einträgen ein, wird dieser Eintrag nicht dem Menü hinzugefügt. Der Eintrag wird quasi durch das delete-Attribut ignoriert.

    Auch die nachträgliche Bearbeitung funktioniert nun. Allerdings haben wir uns dazu entschieden, nicht die sort-Order als Prüfbedingung zu verwenden, sondern den Link und den Link-Parameter. Es kann durchaus vorkommen, dass mehrere unterschiedliche Einträge die gleiche sort-Order haben (z.B. 2 Einträge ohne sort-Order = 1000), welche sich dann gegenseitig überschreiben. Des Weiteren möchte man ja nur Einträge überschreiben, die auch den gleichen Link haben.

    Das Feature mit den Styles und Klassen haben wir zunächst nicht aufgegriffen.

    MfG,
    Timo
     
  13. HolgerNils (xycons.de)

    HolgerNils (xycons.de) G-WARD 2013/2014

    Registriert seit:
    29. Oktober 2011
    Beiträge:
    1.972
    Danke erhalten:
    456
    Danke vergeben:
    369
    Ticket ist erstellt.
    Zuverlässig reproduzieren können wir es, wenn man in die "Attributverwaltung" geht und dort mit SPEICHERN abschliesst.
    Danach ist das FAV-Menü leer, bis man ein anderen Menüpunkt benutzt; in FAV muss natürlich schon was drin sein, sonst fällt das nicht auf.
     
  14. HolgerNils (xycons.de)

    HolgerNils (xycons.de) G-WARD 2013/2014

    Registriert seit:
    29. Oktober 2011
    Beiträge:
    1.972
    Danke erhalten:
    456
    Danke vergeben:
    369
    #14 HolgerNils (xycons.de), 12. Juli 2012
    Zuletzt bearbeitet: 12. Juli 2012
    Machst Du da schon was? Momentan spielt das ganze Menü verrückt, da werden Arrays angezeigt... o_O


    Edit:
    [GambioTestArray] kann ja nur von Euch sein ;-)
     
  15. Daniela

    Daniela Erfahrener Benutzer

    Registriert seit:
    28. Oktober 2011
    Beiträge:
    793
    Danke erhalten:
    142
    Danke vergeben:
    110
    Das kann ich auch bestätigen.
     
  16. Timo (Gambio)

    Timo (Gambio) Administrator

    Registriert seit:
    23. Juni 2011
    Beiträge:
    1.688
    Danke erhalten:
    651
    Danke vergeben:
    46
    Hi Holger,
    ja das war ich...

    Das Problem ist nun grundsätzlich behoben. Grund war die Session ID die zum Teil an die URL gehangen wurde. Gleichzeitig nutzen wir zur Identifizierung der Favoriten diese URL als ID (als md5 Hash). Durch das Anhängen der Session ID wurden unterschiedliche Hashes erzeugt, wodurch die Einträge nicht mehr gefunden wurden. Durch den Fix wird nun die Session ID aus dem Link rausgefiltert, sodass die ID immer ohne Session ID geprüft wird und dadurch immer die Favoriten angezeigt werden sollten...

    MfG,
    Timo
     
  17. barbara

    barbara G-WARD 2014-2020

    Registriert seit:
    14. August 2011
    Beiträge:
    35.352
    Danke erhalten:
    11.198
    Danke vergeben:
    1.601
    Hallo Timo,

    kommt das Fix im nächsten SP?
     
  18. Timo (Gambio)

    Timo (Gambio) Administrator

    Registriert seit:
    23. Juni 2011
    Beiträge:
    1.688
    Danke erhalten:
    651
    Danke vergeben:
    46
    Hallo Barbara,
    ja, der Fix kommt mit dem nächsten SP...

    Grüße,
    Timo
     
  19. barbara

    barbara G-WARD 2014-2020

    Registriert seit:
    14. August 2011
    Beiträge:
    35.352
    Danke erhalten:
    11.198
    Danke vergeben:
    1.601
    Das Warten lohnt sich immer mehr :)
     
  20. HolgerNils (xycons.de)

    HolgerNils (xycons.de) G-WARD 2013/2014

    Registriert seit:
    29. Oktober 2011
    Beiträge:
    1.972
    Danke erhalten:
    456
    Danke vergeben:
    369
    Kleine Gedankenstütze:
    Fehlt im SP 10g ;-(