"oxlongdesc" in der Kategorieübersicht anzeigen

Hallo Zusammen,

noch recht neu bei Oxid. Ich würde gerne bei der Kategorieübersicht auch die lange Beschreibung mit anzeigen.

Das wäre in Tabelle oxv_oxcategories > OXLONGDESC

Im Template oxid\out\basic pl\page\list\list.tpl habe ich es ganz einfach mal
mit


[{ $category->oxcategories__oxlongdesc->value }]

ausprobiert, siehe:


 [{if $oView->hasVisibleSubCats()}]
            [{ oxmultilang ident="LIST_SELECTOTHERCATS1" }]<b>[{$actCategory->oxcategories__oxtitle->value}]</b> [{ oxmultilang ident="LIST_SELECTOTHERCATS2" }]
            <hr>
            <ul class="list">
            [{foreach from=$oView->getSubCatList() item=category name=MoreSubCat}]
                [{if $category->getContentCats() }]
                    [{foreach from=$category->getContentCats() item=ocont name=MoreCms}]
                    <li><a id="test_MoreSubCms_[{$smarty.foreach.MoreSubCat.iteration}]_[{$smarty.foreach.MoreCms.iteration}]" href="[{$ocont->getLink()}]">[{ $ocont->oxcontents__oxtitle->value }]</a></li>
                    [{/foreach}]
                [{/if}]
                [{if $category->getIsVisible()}]
                    [{assign var="iconUrl" value=$category->getIconUrl()}]
                    [{if $iconUrl}]
                        <a id="test_MoreSubCatIco_[{$smarty.foreach.MoreSubCat.iteration}]" href="[{ $category->getLink() }]">
                            <img src="[{$category->getIconUrl() }]" alt="[{ $category->oxcategories__oxtitle->value }]">
                            [{ $category->oxcategories__oxtitle->value }]
                            [{ $category->oxcategories__oxlongdesc->value }]


                        </a>
                    [{else}]
                        <li><a id="test_MoreSubCat_[{$smarty.foreach.MoreSubCat.iteration}]" href="[{ $category->getLink() }]">[{ $category->oxcategories__oxtitle->value }][{ if $category->getNrOfArticles() > 0 }] ([{ $category->getNrOfArticles() }])[{/if}]</a></li>
                    [{/if}]
                [{/if}]
            [{/foreach}]
            </ul>
        [{/if}]


Der Titel (oxtitle) wir angezeigt, allerdings nicht oxlongdesc…

Weiß jemand vielleicht wieso?

Vielen Dank
Simon

schau bitte mal wo du die langbeschreibung hinhaben willst? warum innerhalb eines <a> ? poste es doch sinnvollerweise in das passende <div>

irgendwo hab ich mal nen codeschnipsel gepostet für langbeschreibungen “abkürzen”. da hatte ich als beispiel eben lange beschreibungen in kategorien. gibts meines erachtens als tutorial im wiki. schau da mal rein.

edit: grad nochmal geschaut: welche langbeschreibung willst du eigentlich anzeigen? die der aktiven kategorie oder die aller subkategorien???

[QUOTE=boldsimon;67279]Hallo Zusammen,

noch recht neu bei Oxid. Ich würde gerne bei der Kategorieübersicht auch die lange Beschreibung mit anzeigen.

Das wäre in Tabelle oxv_oxcategories > OXLONGDESC

Im Template oxid\out\basic pl\page\list\list.tpl habe ich es ganz einfach mal
mit
Der Titel (oxtitle) wir angezeigt, allerdings nicht oxlongdesc…
[/QUOTE]

Ich denke hier wird am Thema vorbeigeredet. Die Funktion existiert ja schon im Layout.
Es gab/gibt allerdings einen Bug, der verhindert, das der Langtext auch angezeigt wird.
Afaik hat es mit den Artikeln in der Warengruppe zu tun. Bei Warengruppen ohne aktive Artikel wird der Text z. B. nicht angezeigt.

Hallo,

Danke fürs Feedback. ist ein bißchen anders. Siehe Screenshot

da steht jeweils nur der Titel, neben den Categorie-Bildern, nicht die Long-Description.

Problem ist ja, die Funktion getSubCatList() im Template

[{foreach from=$oView->getSubCatList() item=category name=MoreSubCat}]

gibt ein Liste von Kategorieobjekten zurück, die zwar Title aber keine Long-Description haben…

Dem möchte ich gern auf den Grund gehen.

Dem Template steht vermutlich die View Klasse “views\alist.php” gegenüber

Zeile 850 ff.

class aList extends oxUBase 
 -> class oxUBase extends oxView
    -> class oxView extends oxSuperCfg

    /**
     * Template variable getter. Returns list of subategories.
     *
     * @return array
     */
    public function getSubCatList()
    {
    
        if ( $this->_aSubCatList === null ) {
            $this->_aSubCatList = array();
            if ( $oClickCat = $this->getActCategory() ) {
                $this->_aSubCatList = $oClickCat->getSubCats();
            }
        }
        return $this->_aSubCatList;
    }

$oClickCat kommt vermutlich aus der Core Funktion “core\oxcategory.php”

Zeile 271 ff.

 class oxCategory extends oxI18n implements oxIUrl // Mehrsprachig (oxI18n)
	class oxI18n extends oxBase // Hier gibts den Datenbankzugriff
		class oxBase extends oxSuperCfg
 
     /**
      * returns the sub category array
      *
      * @return array
      */
     public function getSubCats()
     {
         return $this->_aSubCats;
         
     }

_aSubCats wird von setSubCat() in

In
Zeile 462 ff.

class oxCategoryList extends oxList
	class oxList extends oxSuperCfg implements ArrayAccess, Iterator, Countable

    /**
     * Category list postprocessing routine, responsible building an sorting of hierarchical category tree
     *
     * @return null
     */
    protected function _ppBuildTree()
    {
        $aTree = array();
        foreach ($this->_aArray as $oCat) {
            $sParentId = $oCat->oxcategories__oxparentid->value;
            if ( $sParentId != 'oxrootid') {
                if (isset($this->_aArray[$sParentId])) {
                    $this->_aArray[$sParentId]->setSubCat($oCat, $oCat->getId(), true);
                }
            } else {
                $aTree[$oCat->getId()] = $oCat;
            }
        }

        $this->assign($aTree);
    }

$this->_aArray wird gesetzt in

Zeile 270 ff.


    /**
     * set full category object in tree
     *
     * @param string $sId category id
     *
     * @return null
     */
    protected function _ppLoadFullCategory( $sId )
    {
        if ( isset($this->_aArray[$sId])) {
            $oNewCat = oxNew('oxcategory');
            if ( $oNewCat->load($sId)) {
                // replace aArray object with fully loaded category
                $this->_aArray[$sId] = $oNewCat;
            }
        } else {
            $this->_sActCat = null;
        }
    }


Also werden Infos geholt mit $oNewCat->load($sId)

Kommt aus oxBase

Zeile 565 ff.


    /**
     * Loads object data from DB (object data ID is passed to method). Returns
     * true on success.
     * could throw oxObjectException F ?
     *
     * @param string $sOXID Object ID
     *
     * @return bool
     */
    public function load( $sOXID)
    {
        /*
        if( !isset($oxID)){
            $oEx = oxNew('oxObjectException','core');
            $oEx->setMessage('EXCEPTION_OBJECT_OXIDNOTSET');
            $oEx->setObject($this);
            throw $oEx;
        }*/

        //getting at least one field before lazy loading the object
        $this->_addField('oxid', 0);
        $sSelect = $this->buildSelectString( array( $this->getViewName().".oxid" => $sOXID));

        return $this->_isLoaded = $this->assignRecord( $sSelect );
    }
    

mit buildSelectString()
Zeile 601 ff.

   /**
     * Builds and returns SQL query string.
     *
     * @param mixed $aWhere SQL select WHERE conditions array (default false)
     *
     * @return string
     */
    public function buildSelectString( $aWhere = null)
    {
        $oDB = oxDb::getDb(true);
        $myUtils = oxUtils::getInstance();

        $sGet = $this->getSelectFields();
        $sSelect = "select $sGet from " . $this->getViewName() . " where 1 ";

        if ( $aWhere) {
            reset($aWhere);
            while (list($name, $value) = each($aWhere)) {
                $sSelect .=  " and " . $name.' = '.$oDB->quote($value);
            }
        }

        // add active shop

        return $sSelect;
    }

mit getSelectFields()
Zeile 668

    /**
     * Function builds the field list used in select.
     *
     * @return string
     */
    public function getSelectFields()
    {
        $aSelectFields = array();

        $sViewName = $this->getViewName();

        foreach ( $this->_aFieldNames as $sKey => $sField ) {
            $aSelectFields[] = $sViewName . '.' . $sKey;
        }

        $sSelectFields = join( ", ", $aSelectFields );
        return $sSelectFields;
    }


$this->_aFieldNames wird gesetzt über _addField()
usw… landet man dann irgendwann in DB->
MetaColumns(), darüber werden die Felder initalisiert.
Die müßten eigentlich komplett für jede Tabelle sein…

Beantwortet leider nicht die Frage, wieso

[{ $category->oxcategories__oxlongdesc->value }] 

nicht funktioniert, müßte eigentlich, oder?

Mit Bitte um Hilfe. Ich verzweifel noch… :slight_smile:

Danke

so, bzgl. long-description, da ist definitiv ein Fehler drin,
denn Kurzbeschreibung funktioniert problemlos.

dann werd ich wohl damit mal auskommen müssen. :slight_smile:

stichwort: lazyloading könnte evtl auch hilfreich sein. kann ja sein, dass an der stelle von dem kategorie objekt nicht alles geladen wird. probiers doch mal aus :slight_smile:

Jupp,

genau so ist es. Am einfachsten das Musterdenker-Modul für das lazy loading von category-objekten verwenden. Mit der 4.5.1 getestet. Läuft sauber! Cache leeren danach nicht vergessen.

Gruß Joscha