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

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
Benutzeravatar
pinguSTAR
Beiträge: 107
Registriert: 11. Nov 2009, 14:01
Wohnort: Gundelfingen
Kontaktdaten: Website

Wie gehe ich mit dem Cheatsheet und den Variablen um?

8. Nov 2010, 00:33

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
Mess with the best, die like the rest!

zehbaeh
Beiträge: 556
Registriert: 17. Okt 2006, 11:52
Wohnort: Solingen

8. Nov 2010, 14:51

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.

Benutzeravatar
pinguSTAR
Beiträge: 107
Registriert: 11. Nov 2009, 14:01
Wohnort: Gundelfingen
Kontaktdaten: Website

10. Nov 2010, 08:43

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
Mess with the best, die like the rest!

Benutzeravatar
Thomas.Blum
Entwickler
Beiträge: 5063
Registriert: 24. Aug 2004, 22:11
Wohnort: Dresden
Kontaktdaten: Website

10. Nov 2010, 09:23

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

Benutzeravatar
pinguSTAR
Beiträge: 107
Registriert: 11. Nov 2009, 14:01
Wohnort: Gundelfingen
Kontaktdaten: Website

10. Nov 2010, 10:23

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
Mess with the best, die like the rest!

Benutzeravatar
Thomas.Blum
Entwickler
Beiträge: 5063
Registriert: 24. Aug 2004, 22:11
Wohnort: Dresden
Kontaktdaten: Website

10. Nov 2010, 10:36

Hej,

setze einfach $path1 rein.

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

vg Thomas

Benutzeravatar
pinguSTAR
Beiträge: 107
Registriert: 11. Nov 2009, 14:01
Wohnort: Gundelfingen
Kontaktdaten: Website

10. Nov 2010, 10:47

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.
Mess with the best, die like the rest!

Benutzeravatar
Thomas.Blum
Entwickler
Beiträge: 5063
Registriert: 24. Aug 2004, 22:11
Wohnort: Dresden
Kontaktdaten: Website

10. Nov 2010, 14:57

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

Benutzeravatar
pinguSTAR
Beiträge: 107
Registriert: 11. Nov 2009, 14:01
Wohnort: Gundelfingen
Kontaktdaten: Website

10. Nov 2010, 16:11

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);
?>
Mess with the best, die like the rest!

Benutzeravatar
Thomas.Blum
Entwickler
Beiträge: 5063
Registriert: 24. Aug 2004, 22:11
Wohnort: Dresden
Kontaktdaten: Website

10. Nov 2010, 17:23

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

Benutzeravatar
pinguSTAR
Beiträge: 107
Registriert: 11. Nov 2009, 14:01
Wohnort: Gundelfingen
Kontaktdaten: Website

10. Nov 2010, 19:19

yesss this works!!

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

tausend dank!

grüße
jan
Mess with the best, die like the rest!

Zurück zu „Allgemeines [R4]“