Slider in HoneyGrid nicht mehr Updatessicher

Thema wurde von Steffen (indiv-style.de), 1. Juni 2016 erstellt.

  1. Steffen (indiv-style.de)

    Steffen (indiv-style.de) G-WARD 2013/14/15/16

    Registriert seit:
    30. Juni 2011
    Beiträge:
    5.143
    Danke erhalten:
    1.466
    Danke vergeben:
    452
    Beruf:
    Systemadmin, Webentwickler bei Indiv-Style
    Ort:
    PhpStorm
    Im Honeygrid-Templates wird der Slider mittels der Box slider.php erstellt. Wieso??? Im EyeCandy bekommt der Slider alles aus der LayoutContentView, was m.E. nach besser war, denn da konnte man diese überladen und für eigene Seiten eigene Slider definieren. Ich kann schon die slider.php mit meinem Code erweitern aber NICHT updatessicher. Also entweder in eine Überladbare Klasse oder setzt bitte in die Slider.php mindestens einen Extender.
     
  2. Steffen (indiv-style.de)

    Steffen (indiv-style.de) G-WARD 2013/14/15/16

    Registriert seit:
    30. Juni 2011
    Beiträge:
    5.143
    Danke erhalten:
    1.466
    Danke vergeben:
    452
    Beruf:
    Systemadmin, Webentwickler bei Indiv-Style
    Ort:
    PhpStorm
    Lösungsvorschlag!

    die angehängte slider.php in /templates/HoneyGrid/source/boxes/ kopieren und die vorhandene ersetzen.
    die angehängte SliderBoxContentView.inc.php /system/classes/slider/kopieren.

    Somit wäre die Methode Slider_Box_Content überladbar und erweiterbar.
     

    Anhänge:

  3. Torben Wark

    Torben Wark Gambio GmbH

    Registriert seit:
    15. Juli 2014
    Beiträge:
    2.581
    Danke erhalten:
    1.178
    Danke vergeben:
    399
    Moin Steffen,

    ich hab das mal notiert und deinen Lösungsvorschlag bei uns mit ins Ticketsystem gepackt: https://tracker.gambio-server.net/issues/46734 Wir schauen uns das mal an, ich denke wir werden das zu einer nächsten Version wieder überladbar haben ;)
     
  4. Dennis (MotivMonster.de)

    Dennis (MotivMonster.de) G-WARD 2013/14/15/16

    Registriert seit:
    22. September 2011
    Beiträge:
    30.948
    Danke erhalten:
    6.089
    Danke vergeben:
    1.078
    Beruf:
    Mann für alles :)
    Ort:
    Weilburg
    Dat wäre gut, dann muss ich den Slider nicht jedesmal das asset umbauen :)
     
  5. Steffen (indiv-style.de)

    Steffen (indiv-style.de) G-WARD 2013/14/15/16

    Registriert seit:
    30. Juni 2011
    Beiträge:
    5.143
    Danke erhalten:
    1.466
    Danke vergeben:
    452
    Beruf:
    Systemadmin, Webentwickler bei Indiv-Style
    Ort:
    PhpStorm
    Welches asset???? :confused:
     
  6. Moritz (Gambio)

    Moritz (Gambio) Administrator

    Registriert seit:
    26. April 2011
    Beiträge:
    5.786
    Danke erhalten:
    2.692
    Danke vergeben:
    903
    Hallo Steffen,

    was kannst du denn aktuell allein durch ein Overload der
    ImageSliderContentView: prepare_data() nicht erreichen?

    Die slider.php vom EyeCandy ist mit der aus dem Honeygrid identisch.
     
  7. Dennis (MotivMonster.de)

    Dennis (MotivMonster.de) G-WARD 2013/14/15/16

    Registriert seit:
    22. September 2011
    Beiträge:
    30.948
    Danke erhalten:
    6.089
    Danke vergeben:
    1.078
    Beruf:
    Mann für alles :)
    Ort:
    Weilburg
    Sorry falsches wort - snippet Datei vom Slider als usermod abgelegt, bzw. in meinem fall halt umgeschrieben in der datei
     
  8. Steffen (indiv-style.de)

    Steffen (indiv-style.de) G-WARD 2013/14/15/16

    Registriert seit:
    30. Juni 2011
    Beiträge:
    5.143
    Danke erhalten:
    1.466
    Danke vergeben:
    452
    Beruf:
    Systemadmin, Webentwickler bei Indiv-Style
    Ort:
    PhpStorm
    #8 Steffen (indiv-style.de), 3. Juni 2016
    Zuletzt bearbeitet: 3. Juni 2016
    Guten Morgen Moritz,

    berechtigte Frage!!! Ich erklär mal kurz was bisher gemacht wurde!
    Also, Thema Blog. Ich habe die Möglichkeit im Adminbereich bei der Erstellung der Blogkategorien oder Blogbeiträge, ein bestehendes Sliderset zuzuordnen. Also genau so wie bei Artikeln oder Artikelkategorien. Bisher hab ich in der Klasse LayoutContentView die Methode prepare_data() überladen/erweitert, indem ich dort die Objekte für den Slider erstellt habe.

    Beispiel:

    if(!empty($_GET['blog_cat']) && !empty($_GET['blog_item'])){
    # look for slider_id for content
    $coo_blogitem_slider_handler = MainFactory::create_object('BlogitemSliderHandler');
    $t_slider_set_id = $coo_blogitem_slider_handler->get_blog_item_slider_id($_GET['blog_item']);
    }

    das funktioniert in 2.7 nicht mehr! Ich habe aber auch noch nicht ergründet, weshalb das nicht mehr geht und ab welcher Version das nicht mehr geht! Allerdings ist mir dann eben die slider.php aufgefallen wo diese Objekte eben jetzt erstellt werden.

    Ansich hast du recht, man könnte auch in ImageSliderContentView: prepare_data() noch diese Objekte erstellen und "updatessicher" die Methode erweitern. Allerdings ist das sehr unschön. Deshalb hab ich die Slider.php wie oben im Anhang modifiziert.

    Ansich könnte man sich es sparen, für jede Art Content/Artikel/Kategorien, eine eigene +++itemSliderHandler Klasse zu erstellen. Mit einer Handler-Klasse und der richtigen Übergabe aller benötigten Parameter, wäre es auch so möglich. Sicher ist das ein kleiner Umbau aber es ist übersichtlicher und macht die Software wieder um ein kleines Stück schlanker.
     
  9. Steffen (indiv-style.de)

    Steffen (indiv-style.de) G-WARD 2013/14/15/16

    Registriert seit:
    30. Juni 2011
    Beiträge:
    5.143
    Danke erhalten:
    1.466
    Danke vergeben:
    452
    Beruf:
    Systemadmin, Webentwickler bei Indiv-Style
    Ort:
    PhpStorm
    Ich muss das Thema nochmals aufgreifen.

    @Moritz, die Überladung der ImageSliderContentView bringt mir nichts, weil diese in der slider.php nur aufgerufen wird wenn $t_slider_set_id != 0 ist. Beim Aufruf der blog.php ist diese def 0, weil ich für den Blog eigene GET-Parameter habe!!! Deshalb wäre obengenannte Änderung eigentlich ideal!!!
     
  10. Steffen (indiv-style.de)

    Steffen (indiv-style.de) G-WARD 2013/14/15/16

    Registriert seit:
    30. Juni 2011
    Beiträge:
    5.143
    Danke erhalten:
    1.466
    Danke vergeben:
    452
    Beruf:
    Systemadmin, Webentwickler bei Indiv-Style
    Ort:
    PhpStorm
    Ich möchte das Thema nochmals aufgreifen und eine Lösung vorschlagen!

    im Templates gibt es die slider.php in der die Slider-IDs der Content, Artikel und Kategorien geladen werden und danach an die ImageSliderContentView übergeben werden. Das ist unschön, da ich hier nicht die Möglichkeit habe eigene GET-Parameter zu übergeben um diese an die ImageSliderContentView zu übertragen zu können. Also wäre mein Vorschlag folgender:

    Die "Neue" slider.php sieht wie folgt aus:

    PHP:
    <?php

    /* --------------------------------------------------------------
      slider.php 2014-03-26 gm
      Gambio GmbH
      http://www.gambio.de
      Copyright (c) 2014 Gambio GmbH
      Released under the GNU General Public License (Version 2)
      [http://www.gnu.org/licenses/gpl-2.0.html]
      --------------------------------------------------------------
    */

    $t_slider_set_id 0;

    $coo_sliders MainFactory::create_object('SliderBoxContentView');
    $t_slider_set_id $coo_sliders->box_content;
    // slider available?
    if ($t_slider_set_id != 0) {
        
    $coo_slider_content_view MainFactory::create_object('ImageSliderContentView');

        
    $coo_slider_content_view->set_('slider_set_id'$t_slider_set_id);
        
    $coo_slider_content_view->set_('language_id', (int) $_SESSION['languages_id']);
        
    $t_html $coo_slider_content_view->get_html();
        
    $this->set_content_data('IMGSLIDER'$t_html);
    }
    Unterschied hier ist das ich mit der neuen Class SliderBoxContentView die ID ermittel und diese als Overload updatessicher erweiterbar ist!

    SliderBoxContentView sieht so aus:

    PHP:
    <?php

    /* --------------------------------------------------------------
      SpecialsBoxContentView.inc.php 2014-07-17 gambio
      Gambio GmbH
      http://www.gambio.de
      Copyright (c) 2014 Gambio GmbH
      Released under the GNU General Public License (Version 2)
      [http://www.gnu.org/licenses/gpl-2.0.html]
      --------------------------------------------------------------


      based on:
      (c) 2000-2001 The Exchange Project  (earlier name of osCommerce)
      (c) 2002-2003 osCommerce(specials.php,v 1.30 2003/02/10); www.oscommerce.com
      (c) 2003     nextcommerce (specials.php,v 1.10 2003/08/17); www.nextcommerce.org
      (c) 2003 XT-Commerce - community made shopping http://www.xt-commerce.com ($Id: specials.php 1292 2005-10-07 16:10:55Z mz $)

      Released under the GNU General Public License
      ---------------------------------------------------------------------------------------
    *
    * #########################################################################################################
    * Project: developers
    * #########################################################################################################
    *
    * SliderBoxContentView.inc.php
    *
    * 01.06.2016 www.indiv-style.de
    *
    * Copyright by H&S eCom
    * @author little Pit(S.B.)
    *
    * #########################################################################################################
    */

    class SliderBoxContentView extends ContentView {

        public function 
    __construct() {
            
    parent::__construct();
            
    $this->Slider_Box_Content();
        }

        public function 
    Slider_Box_Content() {
            
    // on index.php? (home or category)
            
    if (strpos(strtolower(gm_get_env_info("PHP_SELF")), FILENAME_DEFAULT) !== false && isset($_GET['manufacturers_id']) == false) {
                if (empty(
    $_GET['cPath']) == true && isset($_GET['filter_fv_id']) == false && isset($_GET['filter_price_min']) == false && isset($_GET['filter_price_max']) == false) {
                    
    # use default slider for home

                    
    $t_slider_set_id = (int) gm_get_conf('GM_SLIDER_INDEX_ID');
                } else {
                    
    # look for slider_id for category
                    
    $coo_cat_slider_handler MainFactory::create_object('CategorySliderHandler');
                    
    $t_slider_set_id $coo_cat_slider_handler->get_category_slider_id($_GET['cPath']);
                }
            }
          
            
    // slider for productinfo
            
    if (strpos(strtolower(gm_get_env_info("PHP_SELF")), FILENAME_PRODUCT_INFO) !== false && isset($_GET['manufacturers_id']) == false) {
                if (
    $_GET['products_id'] != 0) {
                    
    # look for slider_id for product
                    
    $coo_product_slider_handler MainFactory::create_object('ProductSliderHandler');
                    
    $t_slider_set_id $coo_product_slider_handler->get_product_slider_id($_GET['products_id']);
                }
            }

            
    // slider for content
            
    if (strpos(strtolower(gm_get_env_info("PHP_SELF")), FILENAME_CONTENT) !== false && isset($_GET['manufacturers_id']) == false) {
                if (!empty(
    $_GET['coID'])) {
                    
    # look for slider_id for content
                    
    $coo_content_slider_handler MainFactory::create_object('ContentSliderHandler');
                    
    $t_slider_set_id $coo_content_slider_handler->get_content_slider_id($_GET['coID']);
                }
            }
            
    $this->box_content $t_slider_set_id;
        }

    }
    Möchte ich nun z.B. für ein eigenes Modul und dessen Seiten den Slider nutzen erstelle ich in GXUserComponents/overloads/ den Ordner SliderBoxContentView und erstelle darin eine Meine_SliderBoxContentView.inc.php mit folgenden Inhalt(Beispiel Blog 4.0):

    Code:
    class Meine_ SliderBoxContentView extends Meine_ SliderBoxContentView_parent{
       
           public function Slider_Box_Content() {
                      // slider for blog
            if (strpos(strtolower(gm_get_env_info("PHP_SELF")), 'blog.php') !== false && isset($_GET['blog_cat']) == true && isset($_GET['manufacturers_id']) == false) {
                if (!empty($_GET['blog_cat']) && empty($_GET['blog_item'])) {
                    # look for slider_id for content
                    $coo_blogcat_slider_handler = MainFactory::create_object('BlogcatSliderHandler');
                    $t_slider_set_id = $coo_blogcat_slider_handler->get_blog_cat_slider_id($_GET['blog_cat']);
                } elseif (!empty($_GET['blog_cat']) && !empty($_GET['blog_item'])) {
                    # look for slider_id for content
                    $coo_blogitem_slider_handler = MainFactory::create_object('BlogitemSliderHandler');
                    $t_slider_set_id = $coo_blogitem_slider_handler->get_blog_item_slider_id($_GET['blog_item']);
                }
            }
             parent::Slider_Box_Content();
           }
    }

    Mehr wird da nicht benötigt und es ist von jedem beliebig zu erweitern, für alle möglichen Module!!!
     
  11. Steffen (indiv-style.de)

    Steffen (indiv-style.de) G-WARD 2013/14/15/16

    Registriert seit:
    30. Juni 2011
    Beiträge:
    5.143
    Danke erhalten:
    1.466
    Danke vergeben:
    452
    Beruf:
    Systemadmin, Webentwickler bei Indiv-Style
    Ort:
    PhpStorm
    Ich hätte beim Slider noch gerne eine kleine Erweiterung! Und zwar hatte ich schon mehrere Kundenanfragen, ob es nicht möglich wäre, eine Art Defaultslider zu definieren. Das heist, einen Slider welcher im Admin erstellt wird und als default markiert ist, automatisch auf allen Seiten wo kein anderer Slider definiert ist anzuzeigen.

    Man benötigt dafür nur eine Möglichkeit im Admin das zu tun und so vieleicht als GM_DEFAULT_SLIDER Konstante abzulegen. In der slider.php oder was schön wäre, in der o.g. Version, müsste man nur noch die Abfrage gestalten:
    Code:
    if($t_slider_set_id == '' && GM_DEFAULT_SLIDER != ''){
                $t_slider_set_id = (int) gm_get_conf('GM_DEFAULT_SLIDER');
            }
    und schon ist auf allen Seiten ein Default-Slider vorhanden.
     
  12. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Das könntest Du doch in Deiner "Meine_ SliderBoxContentView" (Post davor) doch selbst lösen...

    Den Default_Slider definieren un dessen ID dann selbst als Konstante definieren...
     
  13. Steffen (indiv-style.de)

    Steffen (indiv-style.de) G-WARD 2013/14/15/16

    Registriert seit:
    30. Juni 2011
    Beiträge:
    5.143
    Danke erhalten:
    1.466
    Danke vergeben:
    452
    Beruf:
    Systemadmin, Webentwickler bei Indiv-Style
    Ort:
    PhpStorm
    Das mach ich ja auch, ich dachte eher an ein kleines Feature, welches jedem im Standart zur Verfügung steht. Ist kein Muss sondern nur ein kleiner Vorschlag... ;) ;) ;)
     
  14. Moritz (Gambio)

    Moritz (Gambio) Administrator

    Registriert seit:
    26. April 2011
    Beiträge:
    5.786
    Danke erhalten:
    2.692
    Danke vergeben:
    903
    Mit der Version 3.3.1.0 beta2 wird eine SliderContentControl-Klasse eingeführt, die die Überladbarkeit ermöglicht. Ich freue mich auf Feedback, sobald die Version online ist!
     
  15. Steffen (indiv-style.de)

    Steffen (indiv-style.de) G-WARD 2013/14/15/16

    Registriert seit:
    30. Juni 2011
    Beiträge:
    5.143
    Danke erhalten:
    1.466
    Danke vergeben:
    452
    Beruf:
    Systemadmin, Webentwickler bei Indiv-Style
    Ort:
    PhpStorm
    Cool!!!!!!!!! Danke!!! :) :) :)
     
  16. Timo (Gambio)

    Timo (Gambio) Administrator

    Registriert seit:
    23. Juni 2011
    Beiträge:
    1.688
    Danke erhalten:
    651
    Danke vergeben:
    46
    Guten Abend,

    ich verstehe immer noch nicht das Problem. Alles was sich in /templates/Honeygrid/boxes/ befindet ist updatesicher über die LayoutContentView Klasse überladbar.
     
  17. Steffen (indiv-style.de)

    Steffen (indiv-style.de) G-WARD 2013/14/15/16

    Registriert seit:
    30. Juni 2011
    Beiträge:
    5.143
    Danke erhalten:
    1.466
    Danke vergeben:
    452
    Beruf:
    Systemadmin, Webentwickler bei Indiv-Style
    Ort:
    PhpStorm
    Moin Timo, das ist mir schon klar aber das Problem besteht nicht in der Überladbarkeit sondern in der Art und Weise wie man es macht!

    Beispiel:

    Beim Blog 4 hab ich für die Blog-Kategorien als GET die blogcat_id und für die Blogbeiträge selbst als GET die blogItem_id. Anhand dieser kann ich in der DB nachsehen ob und welchee Slider-ID diesen zugeordnet ist. Nun wenn du dir die slider.php ansiehst, stellst du fest, das diese GET dort nix bewirken, weil meine Blog-Kats bzw. Items eben keine products_id oder categories_id haben, was wiederum dazu führt, das eben das Objekt aus ImageSliderContentView nicht erstellt wird, weil die $t_slider_set_id immer 0 ist.

    Nun könnte man freilich in der LayoutContentView Klasse das Objekt selbst anhand der eigenen GET erstellen lassen oder eben eine eigene meinslider.php integrieren und updatessicher ablegen ABER das wiederspricht m.E: nach einer sauberen Struktur! Wenn ich die Slider erweitern will, sollte man dies in den dazugehörigen Slider-Klassen machen und nicht in der übergeordneten Layout-Klasse da ich damit dan 2x versuche ein Slider-Objekt zu erstellen, einmal in meiner Overload-Erweiterung und ein weiteres mal in der slider.php

    Das umgehe ich mit dem Controller! Der wird einfach um die Abfragen meiner GET erweitert und fertig. Es ist einfach sauberer vom Ablauf her.
     
  18. Steffen (indiv-style.de)

    Steffen (indiv-style.de) G-WARD 2013/14/15/16

    Registriert seit:
    30. Juni 2011
    Beiträge:
    5.143
    Danke erhalten:
    1.466
    Danke vergeben:
    452
    Beruf:
    Systemadmin, Webentwickler bei Indiv-Style
    Ort:
    PhpStorm
    SP 3.3.1.0 Beta 2.... Slider ist nun genau so wie ich es mir gewünscht habe!!!! DICKES DANKE!!!!!! :D:D:D