Trade Republic - Provisionsfrei Aktien handeln
Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Content-Box immer alle Unterpunkte anzeigen lassen

    NeKo

    • Neu im Forum
    • Beiträge: 14
    Content-Box immer alle Unterpunkte anzeigen lassen
    am: 15. Dezember 2017, 14:01:13
    Guten Tag liebe Community,

    ich habe eine Kopie der "Information"-Box angelegt und diese "Nav" genannt. Unterpunkte von Seiten werden nur angezeigt, wenn man sich auf dem Elternelement befindet, nun möchte ich, dass die Kinder/Unterpunkte immer angezeigt werden, unabhängig von der aktuellen Seite.

    Ich habe dazu zwar Infos im Forum gefunden, aber alle recht veraltet und teilweise gibt es die Zeilen nicht mehr in der Form, in der man sie anpassen muss laut diesen Threads etc. Deswegen dachte ich, mache ich lieber einen neuen Thread auf.

    Bin schon soweit, mein Vorhaben auf die nav.php eingegrenzt zu haben. Ich bin sicher, dass ich hier nur irgendwo etwas anpassen muss, habe schon stundenlang rumprobiert, aber nichts brachte Erfolg. Ich hoffe auf euren Input.

    nav.php:
    Code: PHP  [Auswählen]
    <?php
    /* -----------------------------------------------------------------------------------------
       $Id:$  

       modified eCommerce Shopsoftware
       http://www.modified-shop.org

       Copyright (c) 2009 - 2013 [www.modified-shop.org]
       -----------------------------------------------------------------------------------------
       based on:
       (c) 2000-2001 The Exchange Project  (earlier name of osCommerce)
       (c) 2002-2003 osCommerce(information.php,v 1.6 2003/02/10); www.oscommerce.com
       (c) 2003     nextcommerce (content.php,v 1.2 2003/08/21); www.nextcommerce.org
       (c) 2003 XT-Commerce
       
       Released under the GNU General Public License
       ---------------------------------------------------------------------------------------*/


    // include smarty
    include(DIR_FS_BOXES_INC . 'smarty_default.php');

    // set cache id
    $cache_id = md5($_SESSION['language'].$_SESSION['customers_status']['customers_status_id'].(isset($coPath) ? $coPath : '0'));

    if (!$box_smarty->is_cached(CURRENT_TEMPLATE.'/boxes/box_nav.html', $cache_id) || !$cache) {

      // include needed functions
      require_once (DIR_FS_CATALOG.'templates/'.CURRENT_TEMPLATE.'/source/inc/xtc_show_content.inc.php');
      require_once (DIR_FS_CATALOG.'templates/'.CURRENT_TEMPLATE.'/source/inc/close_ul_tags.inc.php');
     
      $content_array = array();
      $content_string = '';

            $content_query = xtDBquery("SELECT content_id,
                                         categories_id,
                                         parent_id,
                                         content_title,
                                         content_group
                                    FROM "
    .TABLE_CONTENT_MANAGER."
                                   WHERE languages_id='"
    .(int) $_SESSION['languages_id']."'
                                     AND file_flag='9'
                                         "
    .CONTENT_CONDITIONS."
                                     AND content_status='1'
                                     AND content_active='1'
                                     AND trim(content_title) != ''
                                     AND parent_id='0'
                                ORDER BY sort_order"
    );

      if (xtc_db_num_rows($content_query, true) > 0) {
                    unset ($prev_cid);
                    unset ($first_content_element);
        while ($content_data = xtc_db_fetch_array($content_query, true)) {
          $content_array[$content_data['content_id']] = array(
              'name' => $content_data['content_title'],
              'parent' => $content_data['parent_id'],
              'level' => 0,
              'coID' => $content_data['content_group'],
              'path' => $content_data['content_id'],
              'next_id' => false
            );

                      if (isset ($prev_cid)) {
                            $content_array[$prev_cid]['next_id'] = $content_data['content_id'];
                      }

                      $prev_cid = $content_data['content_id'];

                      if (!isset ($first_nav_element)) {
                            $first_nav_element = $content_data['content_id'];
                      }
              }

        if (isset($coPath)) {
          $new_path = '';
          $coid = explode('_', $coPath);
          reset($coid);
          while (list ($key, $value) = each($coid)) {
            unset ($prev_cid);
            unset ($first_cid);
            $content_query = xtDBquery("SELECT content_id,
                                               parent_id,
                                               content_title,
                                               content_group
                                          FROM "
    .TABLE_CONTENT_MANAGER."
                                         WHERE languages_id='"
    .(int) $_SESSION['languages_id']."'
                                           AND file_flag='9'
                                               "
    .CONTENT_CONDITIONS."
                                           AND content_status='1'
                                           AND content_active='1'
                                           AND trim(content_title) != ''
                                           AND parent_id='"
    .$value."'
                                      ORDER BY sort_order"
    );

                    if (xtc_db_num_rows($content_query, true) > 0) {
              $new_path .= $value;
              while ($content = xtc_db_fetch_array($content_query, true)) {
                $content_array[$content['content_id']] = array(
                    'name' => $content['content_title'],
                    'parent' => $content['parent_id'],
                    'level' => $key +1,
                    'coID' => $content['content_group'],
                    'path' => $new_path.'_'.$content['content_id'],
                    'next_id' => false
                  );
                if (isset ($prev_cid)) {
                  $content_array[$prev_cid]['next_id'] = $content['content_id'];
                }
                $prev_cid = $content['content_id'];
                if (!isset ($first_cid)) {
                  $first_cid = $content['content_id'];
                }
                $last_cid = $content['content_id'];
              }

              $content_array[$last_cid]['next_id'] = isset($content_array[$value]['next_id']) ? $content_array[$value]['next_id'] : 0;
              $content_array[$value]['next_id'] = $first_cid;
              $new_path .= '_';
            } else {
              break;
            }
          }
        }
     
        if(!empty($first_nav_element)) {
         xtc_show_content($first_nav_element);
        }
     
        $box_smarty->assign('BOX_CONTENT', $content_string);
      }
    }

    if (!$cache) {
      $box_nav = $box_smarty->fetch(CURRENT_TEMPLATE.'/boxes/box_nav.html');
    } else {
      $box_nav = $box_smarty->fetch(CURRENT_TEMPLATE.'/boxes/box_nav.html', $cache_id);
    }

    $smarty->assign('box_NAV', $box_nav);
    ?>

    Und hier nochmal als Download.

    Freundliche Grüße

    Linkback: https://www.modified-shop.org/forum/index.php?topic=38393.0
    Trade Republic - Provisionsfrei Aktien handeln

    Whiteflash

    • Fördermitglied
    • Beiträge: 186
    • Geschlecht:
    Re: Content-Box immer alle Unterpunkte anzeigen lassen
    Antwort #1 am: 15. Dezember 2017, 23:04:54
    Hi NeKo!

    Ich hatte doch so was auch schon mal gemacht - ich glaube, der Schlüssel liegt in der Var $content_string - diese wird - soweit ich mich erinnern kann - in der Funktion xtc_show_content() generiert, bzw. erweitert. Die Funktion ruft sich immer wieder rekursiv auf, solange sie im Ergegnis-Array ($content_array[?]) des SQL-Ergebnisses einen weiteren Eintrag findet.
    Du solltest von der Funktion eine geänderte Kopie anlegen (bzw. die Funktion mal ansehen, vielleicht erlaubt sie auch die Übergaben von Identifikatoren), die den Elementen des Menüs andere css-Klassen oder id's gibt, damit du per css-Definition dann die ständige Anzeige aller Elemente erzwingen kannst.

    Vielleicht hilft dir das weiter....

    NeKo

    • Neu im Forum
    • Beiträge: 14
    Re: Content-Box immer alle Unterpunkte anzeigen lassen
    Antwort #2 am: 18. Dezember 2017, 12:07:17
    Hallo Whiteflash, hmm, soweit war ich auch schon. Das Problem ist, dass das HTML gar nicht geschrieben wird, wenn das Element nicht aktiv ist. Sonst könnte ich da ja einfach was drumrumbauen mit CSS.

    Deswegen ist meine aktuelle Annahme, dass bereits der $content_string die inaktiven Elemente nicht beinhaltet und ich den in der nav.php anders befüllen muss, als es aktuell getan wird. So Zeile 73-122 werden die Kinder in das Array aus der DB eingefügt, aber scheinbar nur die aktiven, deswegen glaube ich, dass man in der Abfrage etwas ändern muss. Aber ich bin echt in PHP nicht wirklich firm.
    Mir fehlt auch einfach der Durchblick, ich finde z.B. nirgendwo was zu Variablen wie $coPath oder $value, was diese beinhalten, sodass ich das Ganze besser verstehen kann.

    Code: PHP  [Auswählen]
    AND parent_id='".$value."'
    aus dem Query zu nehmen sorgt auch für einen Kollaps, war meine erste Idee.

    Deswegen hoffe ich inständig, dass mir jemand helfen kann. :)

    Modulfux

    • Experte
    • Beiträge: 3.590
    • Geschlecht:
    Re: Content-Box immer alle Unterpunkte anzeigen lassen
    Antwort #3 am: 18. Dezember 2017, 13:00:28
    Code: PHP  [Auswählen]
    $coPath
    findest du in der includes/modules/set_ids_by_url_parameters.php

    Die Variable ist aber nur gesetzt, wenn du bereits auf einer Contentseite bist. Somit greift der der Teil
    Code: PHP  [Auswählen]
    if (isset($coPath)) {
    erst, wenn du wiederum auf einer Contentseite bist. Demzufolge ist auch dann erst
    Code: PHP  [Auswählen]
    $value
    gesetzt.

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    Re: Content-Box immer alle Unterpunkte anzeigen lassen
    Antwort #4 am: 18. Dezember 2017, 19:30:25
    Hallo NeKo,

    denke du suchst das,

    [ Für Gäste sind keine Dateianhänge sichtbar ]

    hier der Code dazu für die '/templates/tpl_modified/source/boxes/information.php'

    Code: PHP  [Auswählen]
    <?php
    /* -----------------------------------------------------------------------------------------
       $Id:$  

       modified eCommerce Shopsoftware
       http://www.modified-shop.org

       Copyright (c) 2009 - 2013 [www.modified-shop.org]
       -----------------------------------------------------------------------------------------
       based on:
       (c) 2000-2001 The Exchange Project  (earlier name of osCommerce)
       (c) 2002-2003 osCommerce(information.php,v 1.6 2003/02/10); www.oscommerce.com
       (c) 2003     nextcommerce (content.php,v 1.2 2003/08/21); www.nextcommerce.org
       (c) 2003 XT-Commerce
       
       Released under the GNU General Public License
       ---------------------------------------------------------------------------------------*/


    // include smarty
    include(DIR_FS_BOXES_INC . 'smarty_default.php');

    // set cache id
    $cache_id = md5($_SESSION['language'].$_SESSION['customers_status']['customers_status_id'].(isset($coPath) ? $coPath : '0'));

    if (!$box_smarty->is_cached(CURRENT_TEMPLATE.'/boxes/box_information.html', $cache_id) || !$cache) {

      // include needed functions
      require_once (DIR_FS_CATALOG.'templates/'.CURRENT_TEMPLATE.'/source/inc/xtc_show_content.inc.php');
      require_once (DIR_FS_CATALOG.'templates/'.CURRENT_TEMPLATE.'/source/inc/close_ul_tags.inc.php');
     
      $content_array = array();
      $content_string = '';

            $content_query = xtDBquery("SELECT content_id,
                                         categories_id,
                                         parent_id,
                                         content_title,
                                         content_group
                                    FROM "
    .TABLE_CONTENT_MANAGER."
                                   WHERE languages_id='"
    .(int) $_SESSION['languages_id']."'
                                     AND file_flag='0'
                                         "
    .CONTENT_CONDITIONS."
                                     AND content_status='1'
                                     AND content_active='1'
                                     AND trim(content_title) != ''
                                     /* AND parent_id='0' auskommentiert hpzeller */
                                ORDER BY sort_order"
    );

      if (xtc_db_num_rows($content_query, true) > 0) {
        // neu hpzeller
        $sub_content = array();
                    unset ($prev_cid);
                    unset ($first_content_element);
        while ($content_data = xtc_db_fetch_array($content_query, true)) {
          // neu hpzeller
          if ($content_data['parent_id'] == 0) {
           
            $content_array[$content_data['content_id']] = array(
                'name' => $content_data['content_title'],
                'parent' => $content_data['parent_id'],
                'level' => 0,
                'coID' => $content_data['content_group'],
                'path' => $content_data['content_id'],
                'next_id' => false
              );
             
            if (isset ($prev_cid)) {
              $content_array[$prev_cid]['next_id'] = $content_data['content_id'];
            }
     
            $prev_cid = $content_data['content_id'];
     
            if (!isset ($first_information_element)) {
              $first_information_element = $content_data['content_id'];
            }
          // neu hpzeller
          } else {
            if (!in_array($content_data['parent_id'], $sub_content)) $sub_content[] = $content_data['parent_id'];
          }
              }

    //    if (isset($coPath)) {
        // neu hpzeller
        if (!empty($sub_content)) {    
          $new_path = '';
    //      $coid = explode('_', $coPath);
          // neu hpzeller
          $coid = $sub_content;
          reset($coid);
          while (list ($key, $value) = each($coid)) {
            unset ($prev_cid);
            unset ($first_cid);
            $content_query = xtDBquery("SELECT content_id,
                                               parent_id,
                                               content_title,
                                               content_group
                                          FROM "
    .TABLE_CONTENT_MANAGER."
                                         WHERE languages_id='"
    .(int) $_SESSION['languages_id']."'
                                           AND file_flag='0'
                                               "
    .CONTENT_CONDITIONS."
                                           AND content_status='1'
                                           AND content_active='1'
                                           AND trim(content_title) != ''
                                           AND parent_id='"
    .$value."'
                                      ORDER BY sort_order"
    );

            if (xtc_db_num_rows($content_query, true) > 0) {
              $new_path .= $value;
              while ($content = xtc_db_fetch_array($content_query, true)) {
                $content_array[$content['content_id']] = array(
                    'name' => $content['content_title'],
                    'parent' => $content['parent_id'],
                    'level' => $key +1,
                    'coID' => $content['content_group'],
                    'path' => $new_path.'_'.$content['content_id'],
                    'next_id' => false
                );
                // neu hpzeller
                $content_array[$content['content_id']]['level'] = $content_array[$content['parent_id']] ['level'] +1;
                           
                if (isset ($prev_cid)) {
                  $content_array[$prev_cid]['next_id'] = $content['content_id'];
                }
                $prev_cid = $content['content_id'];
                if (!isset ($first_cid)) {
                  $first_cid = $content['content_id'];
                }
                $last_cid = $content['content_id'];
              }

              $content_array[$last_cid]['next_id'] = isset($content_array[$value]['next_id']) ? $content_array[$value]['next_id'] : 0;
              $content_array[$value]['next_id'] = $first_cid;
              $new_path .= '_';
            } else {
              break;
            }
          }
        }
     
        if(!empty($first_information_element)) {
         xtc_show_content($first_information_element);
        }
     
        $box_smarty->assign('BOX_CONTENT', $content_string);
      }
    }

    if (!$cache) {
      $box_information = $box_smarty->fetch(CURRENT_TEMPLATE.'/boxes/box_information.html');
    } else {
      $box_information = $box_smarty->fetch(CURRENT_TEMPLATE.'/boxes/box_information.html', $cache_id);
    }

    $smarty->assign('box_INFORMATION', $box_information);
    ?>

    Gruss
    Hanspeter

    NeKo

    • Neu im Forum
    • Beiträge: 14
    Re: Content-Box immer alle Unterpunkte anzeigen lassen
    Antwort #5 am: 19. Dezember 2017, 11:22:51
    Wow, es klappt! Tausend Dank!  :worship:
    7 Antworten
    3046 Aufrufe
    22. Mai 2014, 11:42:07 von matce84
    5 Antworten
    2404 Aufrufe
    17. September 2021, 00:18:54 von Donco
    5 Antworten
    14119 Aufrufe
    09. September 2011, 23:00:37 von SohnDesMogh
    2 Antworten
    3544 Aufrufe
    09. September 2011, 09:56:34 von Ello
               
    anything