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.
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.
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
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.
Sorry falsches wort - snippet Datei vom Slider als usermod abgelegt, bzw. in meinem fall halt umgeschrieben in der datei
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.
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!!!
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!!!
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.
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...
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...
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!
Guten Abend, ich verstehe immer noch nicht das Problem. Alles was sich in /templates/Honeygrid/boxes/ befindet ist updatesicher über die LayoutContentView Klasse überladbar.
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.