[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
REDAXO Forum • Wie gehe ich mit dem Cheatsheet und den Variablen um?
Seite 1 von 1

Wie gehe ich mit dem Cheatsheet und den Variablen um?

Verfasst: 8. Nov 2010, 00:33
von pinguSTAR
Hi,

ich habe gerade das Cheatsheet gefunden und steh aber leider ziemlich aufm Schlauch. Ich hab so ein paar sachen verstanden. aber bei den meisten dingen Weiß ich einfach nicht wie und warum ich etwas mache.

zum beispiel will ich hier alle Kategorien der 2. Ebene Ausgeben:

Code: Alles auswählen

<?php

$REX['WS']['SOH']['NVL1']['size'] = 20;
$REX['WS']['SOH']['NVL1']['font'] = 'AgencyFB.ttf';
$REX['WS']['SOH']['NVL1']['color'] = array(209, 209, 209);
$REX['WS']['SOH']['NVL1']['mouseover'] = array(51, 51, 51);

// Navigationen
$navi_main  = '';

foreach (OOCategory::getChildrenById(0, true) as $lev1)
{
   $url = $lev1->getUrl();
   
   $soh_array = $REX['WS']['SOH']['NVL1'];
   if ($lev1->getId() == $path1 || $lev1->getId() == $aid)
   {
      $soh_array['color'] = $soh_array['mouseover'];
   }
   
//   $soh_array['text'] = strtoupper($lev1->getName());
   $soh_array['text'] = $lev1->getName();
   $soh_array['link'] = $url;
   
   $navi_main .= '<li>';
   $navi_main .= a561_sleightofhand($soh_array);
   $navi_main .= '</li>';
   
}



if ($navi_main != '')
{   
   $navi_main = '<ul>'.$navi_main.'</ul>';
}

echo $navi_main;
?>
ich weiß, das ich hier:

Code: Alles auswählen

OOCategory::getChildrenById(0, true) as $lev1
etwas ändern muss, aber nur was? ich hab aus (0,true) schon (1,true) gemacht, das hat aber nicht funktioniert.

oder,

was ich auch nicht hinbekommen habe, die 2. ebene des aktuellen artikels anzuzeigen.

mit diesen paar zeilen, lasse ich den aktuellen namen des artikel ausgeben:

Code: Alles auswählen

<?php 
$article = OOArticle::getArticleById(REX_ARTICLE_ID);

if (OOAddon::isAvailable('sleightofhand')) {

		echo a561_sleightofhand(array(
			'text' => $article->getName(),
			'prefix' => '<h1>',
			'suffix' => "</h1>",
			'font' => 'AgencyFB.ttf',
			'color' => array(209,209,209),
			'size' => '25',
			'spacing' => '1.5'
		));
	}

?>
aber wie muss ich es umändern, damit es mir nur der name der 2. ebene anzeigt.

Kenne mich mit Variablen leider garnicht aus. Würde aber gerne den umgang damit lernen. Vorallem in verbindung mit dem Cheatsheet.

Bin über jeden tip dankbar!
Danke schonmal und grüße
Jan

Verfasst: 8. Nov 2010, 14:51
von zehbaeh
Mir scheint Du verwechselst Ebenen mit Ids.

Um Kategorien in "Ebenen" zu erhalten musst Du sowas wie:

Code: Alles auswählen

<?php
/**
 * Get OOCategory instances by z-order.
 * z-orders: root/top plane = 0, bottom plane = -1
 *
 * @param int $zOrder  FALSE returns all planes
 * @param bool $ignoreOfflines
 * @param int $clang
 * @return array  array of (OOCategory)
                  or array of (z => array of (OOCategory)) if zOrder is FALSE
 */
function getCategoriesByZOrder
    (
        $zOrder         = FALSE,
        $ignoreOfflines = TRUE,
        $clang          = FALSE
    )
{
    $zMax   = is_integer($zOrder) && 0 <= $zOrder ? $zOrder : PHP_INT_MAX;
    $z      = 0;
    $planes = array(
        $z => OOCategory::getRootCategories($ignoreOfflines, $clang
    ));
    while (!empty($planes[$z]) && $z < $zMax) {
        foreach ($planes[$z++] as $category) {
            $categories = $category->getChildren($ignoreOfflines, $clang);
            if (!empty($categories)) {
                $planes[$z] = isset($planes[$z])
                            ? array_merge($planes[$z], $categories)
                            : $categories;
            }
        }
    }
    switch (TRUE) {
        case FALSE === $zOrder:
            return $planes;
            
        case 0 > $zOrder:
            $zOrder += $z;
            // fall through by intent
            
        default:
            return isset($planes[$zOrder]) 
                 ? $planes[$zOrder] 
                 : array();
    }
}
benutzen.

Verfasst: 10. Nov 2010, 08:43
von pinguSTAR
danke schonmal!

ich bräuchte das ganze nun noch für das soh addon ;)

aber anstatt eines fertigen codes, gerne auch ein kurze erklärung wie ich mit den redaxo variablen umgehen und wie man sie sinnvoll einsetzt.

danke und grüße
jan

Verfasst: 10. Nov 2010, 09:23
von Thomas.Blum
Hej,

du möchtest die Kinder der aktuellen Kategorie?

Code: Alles auswählen

foreach (OOCategory::getChildrenById(REX_CATEGORY_ID, true) as $lev1)
{ 
  ...
}

Code: Alles auswählen

getChildrenById(REX_CATEGORY_ID, true)
der 1. Paramter, hier REX_CATEGORY_ID, ist die Id der Kategorie von der du die Kinder haben willst

der 2. Paramter (true oder false) gibt an, ob offline Kategorien ignoriert werden sollen oder nicht

vg Thomas

Verfasst: 10. Nov 2010, 10:23
von pinguSTAR
tausen dank :)

funktioniert soweit.

perfekt wäre nun noch, wenn die Kinder der ersten Kategorie dort stehen bleiben.

da es nur 2 ebenen gibt ist dann die navi leer sobald ich eine kategorie der 2ten eben auswähle. in der navi sollten aber die anderen kategorien der 2 ebene angezeigt werden.

danke und grüße
jan

Verfasst: 10. Nov 2010, 10:36
von Thomas.Blum
Hej,

setze einfach $path1 rein.

Aus deinem Skript oben, scheint $path1 die Id der Rootebene zu sein.

vg Thomas

Verfasst: 10. Nov 2010, 10:47
von pinguSTAR
leider immernoch nicht.

Code: Alles auswählen

foreach (OOCategory::getChildrenById(REX_CATEGORY_ID,$path1,false) as $lev1)
und

Code: Alles auswählen

foreach (OOCategory::getChildrenById($path1,false) as $lev1)
funktioniert beides nicht.

Verfasst: 10. Nov 2010, 14:57
von Thomas.Blum
Hej,


ist denn $path1 überhaupt gesetzt?

Falsch, es sei denn du willst alle die offline sind

Code: Alles auswählen

foreach (OOCategory::getChildrenById($path1,false) as $lev1) 
So wäre es richtig, wenn du alle online Kategorien haben möchtest

Code: Alles auswählen

foreach (OOCategory::getChildrenById($path1, true) as $lev1) 
vg Thomas

Verfasst: 10. Nov 2010, 16:11
von pinguSTAR
das mit offline online, ist erstmal egal :D

also so:

Code: Alles auswählen

foreach (OOCategory::getChildrenById($path1,false) as $lev1)
geht es leider nicht. da wird die root ebene angezeigt. woran sehe ich ob $path1 gesetzt ist?

mit diesem navi template funktioniert es. ich habe aber leider dann nicht das soh addon mit drin :(

Code: Alles auswählen

<?php
$cat = OOCategory::getCategoryById($this->getValue('category_id')); 
$tree = $cat->getParentTree(); 
$id = $tree[0]->getId(); 
$subnav = rex_navigation::factory();
$subnav->setClasses(array('sub1', 'sub2'));
echo $subnav->get($id,2,FALSE,TRUE);
?>

Verfasst: 10. Nov 2010, 17:23
von Thomas.Blum
Hej,

ganz iben in deinem Skript steht

Code: Alles auswählen

if ($lev1->getId() == $path1 || $lev1->getId() == $aid)
{
      $soh_array['color'] = $soh_array['mouseover'];
} 
das bedeutet das du irgendwo $path1 und $aid gesetzt hast. Wo das solltest du schon selbst wissen.

Ansonsten notieren das einmal ganz oben in deinem Naviskript:

Code: Alles auswählen

$path = explode("|",$this->getValue("path").$this->getValue('article_id')."|");

$path1 = ''; $path2 = ''; $path3 = ''; 
if (isset($path[1]) && $path[1] != '') $path1 = $path[1];
if (isset($path[2]) && $path[2] != '') $path2 = $path[2];
if (isset($path[3]) && $path[3] != '') $path3 = $path[3];

vg Thomas

Verfasst: 10. Nov 2010, 19:19
von pinguSTAR
yesss this works!!

ich hab den code selbst aus dem forum. deshalb so unbeholfen!!

tausend dank!

grüße
jan