Sitemap für zusätzliche Navigationen

Alles rund um Module und Plugins in CONTENIDO 4.9.
Antworten
mik
Beiträge: 11
Registriert: Mo 26. Aug 2013, 11:44
Kontaktdaten:

Sitemap für zusätzliche Navigationen

Beitrag von mik » Di 17. Dez 2013, 17:04

Hallöle,

wieder eine Frage (...ich muss aber auch immer für alles eine Xtrawurst sein :mrgreen: )

Bei der Webseite an der ich gerade bin, gibt es 6 Navigationspunkte, welche horizontal angelegt sind.
Die Navigationspunkte haben alle eine andere Farbe.

Hier war mein Weg, die Hauptnavigation einfach mehrmals anzulegen (Anpassung der Module usw.). Konnte so nun über CSS die Farben für die Navipunkte extra definieren - läuft einwandfrei...Ist zwar im Backend nicht so optimal, da halt nun 6 Navigationsbäume zu finden sind - aber damit kann man, oder auch ich, leben.

Jetzt habe ich aber das Problem mit der Sitemap. Diese konnte ich so einstellen, dass z.B. die catID der Navigation 1 gelesen wird. Aber die restlichen 5 Navis werden von der Sitemap nicht gelesen.

Wo kann ich da was ändern?

Viele Grüße
M!K

homtata
Beiträge: 1050
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Re: Sitemap für zusätzliche Navigationen

Beitrag von homtata » Mi 18. Dez 2013, 16:14

Du müsstest das Sitemap-Modul mehrfach neu anlegen und die entsprechende Startkategorie jeweils anpassen.

Ich wäre aber anders vorgegangen, um das mit der Mehrfarbigkeit hinzukriegen. Ich hätte alles in einem Navigationsbaum belassen und das Navigationsmodul so angepasst, dass z.B. jeder Navigationsbaum seine id als Klasse mit in den Quellcode schreibt, z.B. im ul-tag oder li-tag, egal. Und dann hätte ich das CSS entsprechend angepasst. Ich habe Module, wo etwas wie z.B.

Code: Alles auswählen

<li class="cat13">Kategoriename</li>
für die idcat=13 ausgegeben wird.

LG

mik
Beiträge: 11
Registriert: Mo 26. Aug 2013, 11:44
Kontaktdaten:

Re: Sitemap für zusätzliche Navigationen

Beitrag von mik » Do 19. Dez 2013, 10:03

Hallo homtata,

vielen Dank für die Anwort - werde es vorerst mal mit den neuen Sitemap-Modulen versuchen. D.h. also ich erstelle bei 6 Navigationsbäumen auch 6 Sitemaps und passe so dann die entsprechenden IDs in den einzelenen Sitemap-Modulen an?! ok.

Zu Deinem Vorgang mit dem einzelnen Navigationsbaum:
So wollte ich es machen - da ich mich aber in Sachen PHP nicht wirklich auskenne bzw. gar nicht und nur vorhandene Codeschnipsel erahnen und mit vielen Versuchen umstellen kann (aber bei "0" anfangen kann ich nicht), wenn diese für mich lesbar sind, hatte ich es auf diese Art gemacht... :? ...sollten die nächsten Schritte einfacher werden als ich gedacht habe, dann... ja.. dann überarbeite ich es wohlmöglich noch einmal. :|

Wo und welchen Code kann ich denn eintragen, dass das Modul nicht immer die selbe <li> für weitere Punkte nimmt? Hier stoße ich an meine Grenzen.

Hier ist sind mal die Codes für den Standard-Navigationsbaum:

Modul "navigation_main" AUSGABE

Code: Alles auswählen

<?php

.......

// assert framework initialization
defined('CON_FRAMEWORK') || die('Illegal call: Missing framework initialization - request aborted.');

// get client settings
$rootIdcat = getEffectiveSetting('navigation_main', 'idcat', 1);
$depth = getEffectiveSetting('navigation_main', 'depth', 3);

// get category tree
$categoryHelper = cCategoryHelper::getInstance();
$categoryHelper->setAuth(cRegistry::getAuth());
$tree = $categoryHelper->getSubCategories($rootIdcat, $depth);

// get path (breadcrumb) of current category
$filter = create_function('cApiCategoryLanguage $item', 'return $item->get(\'idcat\');');
$path = array_map($filter, $categoryHelper->getCategoryPath(cRegistry::getCategoryId(), 1));

// use template to display navigation
$smarty = cSmartyFrontend::getInstance();
$smarty->assign('ulId', 'navigation');
$smarty->assign('tree', $tree);
$smarty->assign('path', $path);
$smarty->display('get.tpl');

?>

Modul "navigation_main" HTML

Code: Alles auswählen

{if 0 lt $ulId|strlen}<!-- navigation_main/template/get.tpl -->{/if}

<ul class="menu">

    {foreach from=$tree item=wrapper}
        {assign var="idcat" value=$wrapper.idcat}
        {assign var="url" value=$wrapper.item->getLink()}
        {assign var="name" value=$wrapper.item->get('name')}
        {if $idcat|in_array:$path}
            {assign var="aClass" value='active'}
        {else}
            {assign var="aClass" value=''}
        {/if}
        <li>
            <a class="{$aClass}" href="{$url}" title="{$name}">{$name}</a>
        {if $idcat|in_array:$path}
            {include file="navigation_main/template/get.tpl"
                tree=$wrapper.subcats path=$path ulId=""}
        {/if}
        </li>
     {/foreach}
</ul>

{if 0 lt $ulId|strlen}<!-- /navigation_main/template/get.tpl -->{/if}

Viele Grüße
M!K

homtata
Beiträge: 1050
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Re: Sitemap für zusätzliche Navigationen

Beitrag von homtata » Do 19. Dez 2013, 10:24

Hallo M!K,

entscheidend ist in dem Fall die Anpassung der HTML-Datei. Dort wird schonmal pro Kategorie die idcat in eine Variable gleichen Namens übergeben, nämlich in

Code: Alles auswählen

            {assign var="idcat" value=$wrapper.idcat}
so dass man diese später auch verwenden kann.

Typischerweise könntest du also die Ausgabe wie folgt anpassen und (wie in diesem Beispiel) dem li-Tag die idcat mitgeben. Reine Zahlen als Klassenname empfehlen sich nicht, daher einfach noch ein Präfix vornedran:

Code: Alles auswählen

    {if 0 lt $ulId|strlen}<!-- navigation_main/template/get.tpl -->{/if}

    <ul class="menu">

        {foreach from=$tree item=wrapper}
            {assign var="idcat" value=$wrapper.idcat}
            {assign var="url" value=$wrapper.item->getLink()}
            {assign var="name" value=$wrapper.item->get('name')}
            {if $idcat|in_array:$path}
                {assign var="aClass" value='active'}
            {else}
                {assign var="aClass" value=''}
            {/if}
            <li class="cat{$idcat}">
                <a class="{$aClass}" href="{$url}" title="{$name}">{$name}</a>
            {if $idcat|in_array:$path}
                {include file="navigation_main/template/get.tpl"
                    tree=$wrapper.subcats path=$path ulId=""}
            {/if}
            </li>
         {/foreach}
    </ul>

    {if 0 lt $ulId|strlen}<!-- /navigation_main/template/get.tpl -->{/if}
So solltest du dann über css z.B." ul li.cat13 ul" oder ähnlich ansprechen können...

Du kannst natürlich auch die Variable ulId="" ändern in ulId="cat{$idcat}", dann wird für den folgenden Durchlauf die bisherige idcat vergeben. Die stimmt zwar nicht wirklich mit der echten idcat an der Stelle überein, ist aber dennoch einzigartig und lässt sich dadurch ansprechen. Klingt etwas konfus, aber Hauptsache, jede ul oder li kriegt eine eindeutige Bezeichnung.

LG

mik
Beiträge: 11
Registriert: Mo 26. Aug 2013, 11:44
Kontaktdaten:

Re: Sitemap für zusätzliche Navigationen

Beitrag von mik » Do 19. Dez 2013, 13:01

okeeee, werde ich versuchen und gebe Rückmeldung - vielen Dank!


Thema Sitemap (was ich aktuell versuchen möchte, da ich ziemlich viel schon an die 6 Navibäume ausgerichtet habe).
Habe mal ein zweites Sitemap-Modul angelegt: "content_sitemap_html_02"

Wenn ich aber beide Sitemap-Module in der Vorlage anlege: "content_sitemap_html" und darunter ""content_sitemap_html_02", wird mir bei dem Editor die Seite weiss angezeigt. Ist im Prinzip ja irgendwie auch logisch, da die "selben" Module sich in der Vorlage befinden.
Ich kann aber leider nicht sehen, was im zweiten Sitemap-Modul geändert werden muss, dass beide auch funktionieren.
Wenn nur 1 Sitemap-Modul in der Vorlage eingerichtet ist, kann ich über den Editor "Kategorieeingabe(idcat Nummerisch):" die idcat, in meinem Fall "75" eingeben. Dachte aber, dass ich eventuell auch in das Textfeld alle weiteren Navibäume eingeben kann und diese so trenne: "75, 78, 80" usw.. Dann kommt aber die Meldung "Bitte geben Sie die nummerischen Werte ein." ... ja klar, aber so gesehen wäre es ja sinnvoll, dort die weiteren gewünschten idcat eintragen zu können.

Aber man sieht ja jetzt, dass ich hier auf Hilfe angewiesen bin. Sobald man mir das aber erklärt bzw. in einem Beispiel demonstrieren könnte, sollte es von alleine laufen. Bin nun mal ein "reiner" Webdesigner für Gestaltung und der Umsetzung in HMTL/CSS + kleine JS und PHP-Dinge. Für die beiden letzteren (JS, PHP) kann ich auch nur vorhandene Scripte übernehmen, leicht anpassen und umstricken - aber mehr leider nicht. => Aber ich lerne ja immer gerne dazu! :roll:


Hier ist der "selbe" Code von meiner "content_sitemap_html_02" AUSGABE

Code: Alles auswählen

<?php

....

// get globals
$client = cRegistry::getClientId();
$lang = cRegistry::getLanguageId();
$idart = cRegistry::getArticleId();

// get content of current article
$art = new cApiArticleLanguage();
$art->loadByArticleAndLanguageId($idart, $lang);
$content = $art->getContent('CMS_TEXT', 1);
$level = $art->getContent('CMS_TEXT', 2);
$article = $art->getContent('CMS_TEXT', 3);

// get smarty template instance
$tpl = cSmartyFrontend::getInstance();
$tpl->assign('isBackendEditMode', cRegistry::isBackendEditMode());

// assign module translations
$tpl->assign('trans', array(
    'headline' => mi18n("HEADLINE"),
    'categoryLabel' => mi18n("CATEGORY_LABEL"),
    'levelLabel' => mi18n("LEVEL_LABEL"),
    'articleLabel' => mi18n("ARTICLE_LABEL"),
    'articleHintLabel' => mi18n("ARTICLE_HINT_LABEL"),
    'categoryHintLabel' => mi18n("GATEGORY_HINT_LABEL"),
    'levelHintLabel' => mi18n("LEVEL_HINT_LABEL")
));

// assign CMS input fields
$tpl->assign('category', "CMS_TEXT[1]");
$tpl->assign('level', "CMS_TEXT[2]");
$tpl->assign('article', "CMS_TEXT[3]");
$tpl->assign('first', false);

// check if content is numeric
if (false === is_numeric($content) || false === is_numeric($level)) {
    $tpl->assign('error', mi18n("NOT_NUMERIC_VALUE"));
} else if ($article != 0 && $article != 1) {
    $tpl->assign('error', mi18n("NOT_ZERO_OR_ONE"));
} else {
    // get category tree
    $categoryHelper = cCategoryHelper::getInstance();
    $categoryHelper->setAuth(cRegistry::getAuth());
    $tree = $categoryHelper->getSubCategories($content, $level);
    if (1 == $article) {
        $tree = addArticlesToTree($tree);
    }
    $tpl->assign('tree', $tree);
}

$tpl->display('get.tpl');

/**
 * Adds articles to categories in given array $tree as returned by
 * cCategoryHelper->getSubCategories().
 *
 * @param array $tree
 * @return array
 */
function addArticlesToTree(array $tree) {

    foreach ($tree as $key => $wrapper) {
        $tree[$key]['articles'] = getArticlesFromCategory($wrapper['idcat']);
        $tree[$key]['subcats'] = addArticlesToTree($tree[$key]['subcats']);
    }

    return $tree;

}

/**
 * Add all online and searchable articles of theses categories to the sitemap.
 *
 * @param int $categoryId
 */
function getArticlesFromCategory($categoryId) {

    $cfg = cRegistry::getConfig();
    $db = cRegistry::getDb();

    // get articles from DB
    // needed fields: idart, lastmodified, sitemapprio, changefreq
    $sql = '-- getArticlesFromCategory()
        SELECT
            al.idart
            , UNIX_TIMESTAMP(al.lastmodified) AS lastmod
            , al.changefreq
            , al.sitemapprio
            , al.title
        FROM
            `' . $cfg['tab']['art_lang'] . '` AS al
            , `' . $cfg['tab']['cat_art'] . '` AS ca
        WHERE
            al.idart = ca.idart
            AND al.idlang = ' . cSecurity::toInteger(cRegistry::getLanguageId()) . '
            AND ca.idcat IN (' . $categoryId . ')
            AND al.online = 1
            AND al.searchable = 1
        ;';

    $ret = $db->query($sql);

    $array = array();
    if (false !== $ret) {
        while ($db->next_record()) {
            $article = new cApiArticleLanguage();
            $article->loadByPrimaryKey($db->f('idart'));
            $array[] = $article;
        }
    }

    return $array;

}

?>

Wäre echt klasse, wenn ich da den Code mit der "gewissen" passenden Änderung gezeigt bekomme.

Danke sehr!!

Viele Grüße
M!K

lovee19us
Beiträge: 7
Registriert: Do 18. Jun 2015, 10:01
Kontaktdaten:

Re: Sitemap für zusätzliche Navigationen

Beitrag von lovee19us » Do 18. Jun 2015, 14:11

Ich habe die selber problem. :roll:
Bitte jemand helfen kann.

Danke

Antworten