Darstellung von Kategorien nicht möglich als Overwrite

  • Hallo liebe VirtueMart Community,


    ich hab folgendes Problem ich hab ein Joomla System mit der Version 3.7.4 und der aktuellen VirtuelMart Version.
    Ich möchte die Kategorien darstellen dazu hab ich aus der categories.php den Code kopiert in mein DIV dennoch wird dieser nicht darstellt. Der Komplette Code der das Darstellt sieht wie folgt aus:


    <?php
    /**
    *
    * Shows the products/categories of a category
    *
    * @package VirtueMart
    * @subpackage
    * @author Max Milbers
    * @link ${PHING.VM.MAINTAINERURL}
    * @copyright Copyright (c) 2004 - 2014 VirtueMart Team. All rights reserved.
    * @license The GNU General Public License v3.0 - GNU Project - Free Software Foundation GNU/GPL, see LICENSE.php
    * VirtueMart is free software. This version may have been modified pursuant
    * to the GNU General Public License, and as distributed it includes or
    * is derivative of works licensed under the GNU General Public License or
    * other free or open source software licenses.
    * @version $Id: default.php 6104 2012-06-13 14:15:29Z alatak $
    */


    // Check to ensure this file is included in Joomla!
    defined('_JEXEC') or die('Restricted access');


    $categories = $viewData['categories'];


    if ($categories) {


    $categories_per_row = !empty($viewData['categories_per_row'])? $viewData['categories_per_row']:VmConfig::get ( 'categories_per_row', 3 );
    if(empty($categories_per_row)) $categories_per_row = 3;


    // Category and Columns Counter
    $iCol = 1;
    $iCategory = 1;


    // Calculating Categories Per Row
    $category_cellwidth = ' width'.floor ( 100 / $categories_per_row );


    // Separator
    $verticalseparator = " vertical-separator";
    ?>


    <div class="category-view">


    <?php


    // Start the Output
    foreach ( $categories as $category ) {


    // Show the horizontal seperator
    if ($iCol == 1 && $iCategory > $categories_per_row) { ?>
    <div class="horizontal-separator"></div>
    <?php }


    // this is an indicator wether a row needs to be opened or not
    if ($iCol == 1) { ?>
    <div class="row">
    <?php }


    // Show the vertical separator
    if ($iCategory == $categories_per_row or $iCategory % $categories_per_row == 0) {
    $show_vertical_separator = ' ';
    } else {
    $show_vertical_separator = $verticalseparator;
    }


    // Category Link
    $caturl = JRoute::_ ( 'index.php?option=com_virtuemart&view=category&virtuemart_category_id=' . $category->virtuemart_category_id , FALSE);


    // Show Category ?>
    <div class="category floatleft<?php echo $category_cellwidth . $show_vertical_separator ?>">
    <div class="spacer">
    <h2>
    <a href="<?php echo $caturl ?>" title="<?php echo vmText::_($category->category_name) ?>">
    <?php echo vmText::_($category->category_name) ?>
    <br />
    <?php // if ($category->ids) {
    echo $category->images[0]->displayMediaThumb("",false);
    //} ?>
    </a>
    </h2>

    </div>
    </div>
    <?php
    $iCategory ++;


    // Do we need to close the current row now?
    if ($iCol == $categories_per_row) { ?>
    <div class="clear"></div>
    </div>
    <?php
    $iCol = 1;
    } else {
    $iCol ++;
    }
    }
    // Do we need a final closing row tag?
    if ($iCol != 1) { ?>
    <div class="clear"></div>
    </div>
    <?php
    }
    ?></div><?php
    } ?>


    Ich hab das wie folgt versucht umzuschreiben:


    <div>
    $categories = $viewData['categories'];



    // Start the Output
    foreach ( $categories as $category ) {


    // Show the horizontal seperator
    if ($iCol == 1 && $iCategory > $categories_per_row) { ?>
    <div class="horizontal-separator"></div>
    <?php }


    // this is an indicator wether a row needs to be opened or not
    if ($iCol == 1) { ?>
    <div class="row">
    <?php }


    // Show the vertical separator
    if ($iCategory == $categories_per_row or $iCategory % $categories_per_row == 0) {
    $show_vertical_separator = ' ';
    } else {
    $show_vertical_separator = $verticalseparator;
    }


    // Category Link
    $caturl = JRoute::_ ( 'index.php?option=com_virtuemart&view=category&virtuemart_category_id=' . $category->virtuemart_category_id , FALSE);


    // Show Category ?>
    <div class="category floatleft<?php echo $category_cellwidth . $show_vertical_separator ?>">
    <div class="spacer">
    <h2>
    <a href="<?php echo $caturl ?>" title="<?php echo vmText::_($category->category_name) ?>">
    <?php echo vmText::_($category->category_name) ?>
    <br />
    <?php // if ($category->ids) {
    echo $category->images[0]->displayMediaThumb("",false);
    //} ?>
    </a>
    </h2>
    </div>
    </div>
    <?php
    $iCategory ++;


    // Do we need to close the current row now?
    if ($iCol == $categories_per_row) { ?>
    <div class="clear"></div>
    </div>
    <?php
    $iCol = 1;
    } else {
    $iCol ++;
    }
    }


    </div>




    Die DIV`s haben Höhe und Breite etc.


    Ich würde mich über jede Antwort freuen!

    Bilder

    • Bildschirmfoto 2017-09-11 um 09.44.01.png
    • Bildschirmfoto 2017-09-11 um 09.43.41.png
  • Servus,


    ich kann Deinem Code leider auf die Schnelle nicht folgen, vielleicht wäre es besser, Du schreibst in klaren Worten, was Du überhaupt erreichen möchtest.
    Erst einmal ohne Code, oder nur mit den wichtigen Ausschnitten.


    Grüße
    Stefan


    Und noch etwas zum Lesen Wie bekomme ich schnellstens hilfreichen Antworten



  • Danke für deine Rasche Antwort.


    Okay was möchte ich erreichen:


    Ich hab eine Speisekarte
    Willkommen bei Göller


    Die Kategorien "ALLE,VORSPEISEN,FLEISCH" sind aktuell hardgecodet sprich sie werden nicht dynamisch erzeugt. Ich möchte aber das falls ich im Backend eine weitere Kategorie eintrage diese dazukommt in der Speisekarte. Ich hab jetzt versucht den Code über ein Overwrite zu erzeugen sprich aus der PHP die bereits die Kategorien erzeugt das bei mir in die Speisekarte einzufügen.


    Ich hoffe das mehr verständlich gegenüber den ersten Post.


    Mit freundlichen Grüßen


    Alexander Ruder

  • Nun ist das verständlicher, ja.


    Die Antwort ist im Grunde einfach, entweder Du machst es statisch, dann musst Du die neue Kategorie per Hand einbauen, oder Du machst die gesamte Anzeige dynamisch, dann geht es automatisch.


    Die dynamische Anzeige ist normalerweise das einzig langfristig Sinnvolle, wenn hin und wieder Veränderungen durch technisch weniger versierte Anwender vorgenommen werden.


    In Deinem Fall sieht es so aus, als ob Du die Hauptkategorien Vorspeisen, Fleisch usw. hast, und jeweils die Unterkategorien auf der gleichen Seite angezeigt werden sollen.
    Das categories-Sublayout sieht das so nicht vor, man müsste die jeweiligen Unterkategorien auch laden. Wie das geht, kann ich Dir ohne länger im Code zu suchen, auch auf die Schnelle nicht sagen.


    Eine anderer Ansatz wäre, das VM Category Module mehrfach mit den unterschiedlichen Hauptkategorien aufzurufen, so dass man diese Hauptkategorienamen mit den Unterkategorien in Blöcken untereinander hat. Dann kann man die Struktur untersuchen und die Ansicht, die auf Deiner Startseite ist, mit jQuery und oder CSS erreichen.


    In solche Dinge muss man den Kopf aber leider länger hineinstecken, so dass ich Dir hier nicht wirklich eine Komplettlösung liefern kann.


    Grüße
    Stefan

  • Danke Stefan für den Rat!


    Also die erste Option das es statisch wird ist leider ausgeschlossen da die Seiten eben an einen Nutzer geht der weniger Technisch versiert ist.


    Was meinst du für Unterkategorien? Also die Hauptkategorien sind ja "ALLE, VORSPEISEN" das sind auch die einzigen Kategorieren die ich der Seite entnehmen kann. Falls es Unterkategorien gibt die man laden müsste um die Hauptkategorien anzuzeigen wäre das kein Problem dann man sie per CSS ausblenden könnte.


    Den dritten Punkt versteh ich leider nicht wirklich ich lade das Modul in das jeweilige DIV und kopiere das einfach oder wie?


    Grüße


    Alex

  • Ok, nun kommen wir der Sache näher, also es gibt nur zwei Kategorien, später wenige mehr, und darunter ist eine Liste mit Produkten, keine Unterkategorien.


    An dieser Stelle möchte ich raten, bei so wenigen Kategorien (unter 12 bis n), das Alle gleich rauszuwerfen. -> Special Effect ohne Sinn.
    An die Menü-Position das VM Kategorie Modul, das die Hauptkategorien anzeigt. Das muss per CSS evtl. horizontal ausgerichtet werden.
    Dann kann man mit Klick auf das Menü die jeweiligen Produkte darunter aufrufen. Allerdings nur mit Reload der Seite.


    Das ist ein machbares einfaches Szenario. Alles andere wir kompliziert.


    Grüße
    Stefan