[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
REDAXO Forum • ynamite's Navigation Factory :)
Seite 1 von 2

ynamite's Navigation Factory :)

Verfasst: 4. Aug 2010, 15:34
von ynamite
Hallo Leute

Wollte hier kurz meine Navigations-Skripts präsentieren.

Vor allem würde mich interessieren wie euch diese gefallen (und natürlich ob sie richtig funktionieren) und ob die Verwendung leichter von der Hand geht als andere ähnliche Funktionen/Addons/Klassen. Was fehlt eurer Meinung nach noch?

Der Grund wieso ich mir diese Skripts gebastelt habe, war einfach das ich mit der rex_navigation::factory irgendwie nie so richtig zufrieden war/bin (muss aber zugeben das ich mich nicht so sehr damit auseinandergesetzt habe, also ist die Aussage ein bisschen gewagt), vor allem dann nicht wenn man am eigentlichen Code etwas rumschrauben/ändern möchte.

Die Idee ist nicht eine Funktion zu bauen die alle möglichen Navigation darstellen kann, aber einfach ein im Masse sehr flexibles Skript. ist natürlich immer subjektiv, aber ich setze die Skripts bei 90% unserer Websites unverändert ein.

Eigentlich handelt es sich hierbei um 3 verschiedene Skripts:

yNav
Funktion/Template um Redaxo Navigation auszugeben
http://www.redaxo.de/168-0-templatedeta ... ate_id=150

yLangNav
Funktion/Template um Redaxo Sprach-Navigation auszugeben
http://www.redaxo.de/168-0-templatedeta ... ate_id=151

yBreadCrumb
Funktion/Template um Redaxo Breadcrumb-Navigation auszugeben
http://www.redaxo.de/168-0-templatedeta ... ate_id=152

so, hoffe ihr könnt die funktionen irgendwie gebrauchen, steht euch natürlich frei änderungen vorzunehmen etc.

falls es jedoch nennenswerte weiterentwicklungen gibt, wäre ich natürlich um feedback froh ;) viel spass!

liebe grüsse
y

Verfasst: 5. Aug 2010, 20:11
von ynamite
Sind denn alle in den ferien? :D

Hallöchen?

Verfasst: 5. Aug 2010, 20:47
von Cheffchen
Hallo,
nö :O).

habe es vorhin mal Probiert wurde aber nichts Angezeigt.
Werde es Morgen noch mal in ruhe Versuchen.

Cheffchen

Verfasst: 5. Aug 2010, 20:56
von ynamite
Hey

Danke fürs ausprobieren. Hab den Code oben nochmals aktualisiert, am besten nochmal kopieren.

Versuchs einfach mal so:

Code: Alles auswählen

$navs = createNav($this,array('addSubNav'=>1));
echo $navs['nav'];

Verfasst: 5. Aug 2010, 22:34
von Koala
Diese if-isset-Monsterabfrage in der function createNav kann man deutlich übersichtlicher und wartbarer schreiben. Nutze ein Array um die Defaultwerte der Option zu hinterlegen:

Code: Alles auswählen

// Array mit allen option-Defaultwerte
$options_vorgabe = array (
'parentId' => 0, // 0: Von welcher Kategorie (ID) aus die Navigation erstellen, zum Beispiel wenn man nur Subnavigation will 
'addSubNav' => false, // 0: Subnavigation hinzufügen? 
'renderFontfile' => 'univers.ttf'  // 1: schrift 
);

foreach ($options_vorgabe as $opt => $value) {
  if (!isset ($option[$opt]) ) {
    $option[$opt] = $value;
  }
}

Verfasst: 5. Aug 2010, 23:11
von ynamite
Koala hat geschrieben:Diese if-isset-Monsterabfrage in der function createNav kann man deutlich übersichtlicher und wartbarer schreiben.
stimmt! wird angepasst. danke! ;)

edit: mir ist sogar noch eine bessere variante in den sinn gekommen, ist eingebaut.

update

Verfasst: 12. Aug 2010, 17:51
von ynamite
hallo

habe das mit den optionen nun vereinfach und die funktionen/templates nun auch im Redaxo download bereich eingefugt. folgend die links zu den überarbeiteten versionen:

yNav
http://www.redaxo.de/168-0-templatedeta ... ate_id=150

yLangNav
http://www.redaxo.de/168-0-templatedeta ... ate_id=151

yBreadCrumb
http://www.redaxo.de/168-0-templatedeta ... ate_id=152

bin auf feedback gespannt! viel spass damit ;)

gruss
y

Verfasst: 12. Aug 2010, 22:13
von Koala
Schreibe bitte anstelle von $options[parentId] dies: $options['parentId'] (und das bei allen $options-Array Zugriffen).
Es hagelt sonst ne Menge Fehlermeldungen.

Verfasst: 13. Aug 2010, 11:22
von ynamite
hallo koala

danke für den tipp! ist erledigt! ;)

war mir nicht bewusst das bei dieser schreibweise fehlermeldungen ausgespuckt werden, ich dachte dies sei völlig legitim.

gruss
y :wink:

Frage

Verfasst: 29. Aug 2010, 15:54
von steffus
Schön, aber wie genau binde ich das in Redaxo ein?
Habe ein Template erstellt und dort die function hinein kopiert.
Dann habe ich in dem navi div folgendes hinein kopiert:

Code: Alles auswählen

<div class="navi">
<php
$options = array('showLangCodeOnly'=>1, 'separatorTag'=>'span');
echo createLangNav($options);
?>      </div>
geht aber nicht, wie funktioniert das denn?

Re: Frage

Verfasst: 30. Aug 2010, 11:38
von ynamite
steffus hat geschrieben:Schön, aber wie genau binde ich das in Redaxo ein?
Habe ein Template erstellt und dort die function hinein kopiert.
Dann habe ich in dem navi div folgendes hinein kopiert:

geht aber nicht, wie funktioniert das denn?
Hallo Steffus

Was genau passiert denn? Kriegst du eine Fehlermeldung oder passier gar nichts? Bindest du denn das Template wo die Funktion drin ist auch im Haupt-Template ein?

Gruss
y

Verfasst: 30. Aug 2010, 14:12
von steffus
er zeigt mir dann komische zeichen an, ober besser gesagt schreibt er mir die function in ein div. also, was habe ich gemacht. template erstellt, die funktion dort hinein kopiert. im default template dann wie folgt eingebunden:

Code: Alles auswählen

<div class="head-bottom-center">

REX_TEMPLATE[4]
<php
$options = array('showLangCodeOnly'=>1, 'separatorTag'=>'span');
echo createLangNav($options);
?>
    </div>
wobei REX_TEMPLATE[4] sich die function verbirgt.

Verfasst: 30. Aug 2010, 16:20
von ynamite
steffus hat geschrieben:er zeigt mir dann komische zeichen an, ober besser gesagt schreibt er mir die function in ein div
Du musst die Funktion im REX_TEMPLATE[4] noch in PHP-Tags setzen:

Code: Alles auswählen


<?php

function createLangNav ...

?>

Falls du nicht sicher bist wie das gemeint ist, kopier die gesamte Funktion nochmals von hier http://www.redaxo.de/168-0-templatedeta ... ate_id=151 und ersetze deinen Code im Template 4.

Müsste so klappen, habs eben getestet.

Gruss
y

Verfasst: 31. Aug 2010, 15:28
von steffus
no keine chance, nun zeigt er mir das an:

1, 'separatorTag'=>'span'); echo createLangNav($options); ?>

bin mir sicher das ich nun das template richtig kopiert habe. und es so im div eingebunden habe:

Code: Alles auswählen

<div class="navi">
        REX_TEMPLATE[4] 
<php 
$options = array('showLangCodeOnly'=>1, 'separatorTag'=>'span'); 
echo createLangNav($options); 
?> 
      </div>

Verfasst: 31. Aug 2010, 15:38
von ynamite
steffus hat geschrieben:no keine chance, nun zeigt er mir das an:

1, 'separatorTag'=>'span'); echo createLangNav($options); ?>

bin mir sicher das ich nun das template richtig kopiert habe. und es so im div eingebunden habe:

Code: Alles auswählen

<div class="navi">
        REX_TEMPLATE[4] 
<php 
$options = array('showLangCodeOnly'=>1, 'separatorTag'=>'span'); 
echo createLangNav($options); 
?> 
      </div>
Komisch, kann mir gerade nicht erklären wieso das nicht funktionieren soll ... Habs wie gesagt mit dem genau gleichen Template, aus dem downloadbereich, getestet. kannst du mir eventuell einen eingeschränkten benutzer im redaxo einrichten und mir eine PM mit den Zugangsdaten schicken? dann schau ichs mir mal direkt an, weil bei mir funzts einwandfrei.

edit: werde auch nichts kaputt machen ;)
aber falls dir das zu heikel ist, kannst du mir wenigstens beide Templates vollständig posten bzw. pm'n? oder einen link zur seite schicken? nimmt mich selber wunder wieso's nicht gehen soll.

Verfasst: 31. Aug 2010, 16:31
von ynamite
hab deinen Fehler soeben gefunden, dir fehlt im Template wo du die Navigation ausgiebst ein "?" (Fragezeichen)

müsste so aussehen (3. Zeile):

Code: Alles auswählen

<div class="navi">
        REX_TEMPLATE[4]
<?php
$options = array('showLangCodeOnly'=>1, 'separatorTag'=>'span');
echo createLangNav($options);
?>
      </div>

Verfasst: 1. Sep 2010, 23:42
von steffus
Ok versuche es mal hier zu posten.

hier das navi id= 4

Code: Alles auswählen

<?php

function createLangNav($options_user='')
	{
	if(!is_array($options_user))
		$options_user=array();

	$options = array(
		'showLangCodeOnly'		=>		false,					// {boolean}			Soll nur die Abgekürzte Version angezeigt werden, zBsp. 'De', 'Fr' usw.
		'showDescription'		=>		false,					// {boolean}			Soll für die Sprachnavigation eine Beschreibung ausgegeben werden? zBsp: Sprache
		'description'			=>		'Sprache',				// {string}				String der als die Beschreibung ausgegeben wird
		'addSeparator'			=>		false,					// {boolean}			Soll zwischen jedem Navigationselement ein Trennzeichen angezeigt werden? (Nur falls 'displayAsList'=> false
		'separatorChar'			=>		'|',					// {string}				Trennzeichen
		'separatorTag'			=>		'span',					// {string}				Tag welches das Trennzeichen umschliesst
		'separatorTagClass'		=>		'',						// {string}				Klasse für das Trennzeichen-Tag

		'renderImages'			=>		false,					// {boolean}			Soll Navigation mit dem Schriftersetzungs-Addon SleightOfHand von Dave Holloway ausgegebn werden?
		'renderFontfile'		=>		'univers.ttf',			// {string}				Name der zu verwendenden Schrift-Datei (schaue Dokumentation SleightOfHand)
		'renderFontsize'		=>		12,						// {int}				Schriftgrösse (nicht pixelgenau!)
		'renderFontspacing'		=>		1,						// {int}				Zeilenabstand
		'renderFontcolor'		=>		array(42,41,46),		// {array(R,G,B)}		RGB-Farbwert der Schrift
		'renderFontactivecolor'	=>		array(255,255,255)		// {array(R,G,B)}		RGB-Farbwert der Schrift bei einem mouseover-Event
		);

	// Extending defaults array with user options
	foreach ($options_user as $key => $val) 
		if(isset($options[$key]))$options[$key] = $val;
	
	$invalidGets = array('clang','article_id');
	foreach($_GET as $key=>$val)
		{
		if(!in_array($key,$invalidGets))
			$string .= ($string=="") ? $key."=".$val : "&".$key."=".$val;
		}	

	global $REX;
	foreach($REX['CLANG'] as $key=>$lang)
		{
		if($options['showDescription'] && $out!="") $out .= '<span class="langtitle">'.$options['description'].'</span> ';
		if($options['addSeparator'] && $out!="")
			{
			$out .= ' <'.$options['separatorTag'];
			if($options['separatorTagClass'])
				$out .= ' class="'.$options['separatorTagClass'].'"';
			$out .= '>'.$options['separatorChar'].'</'.$options['separatorTag'].'> ';
			}
		$text = ($options['showLangCodeOnly']) ? substr($lang,0,2) : $lang ;
		if($options['renderImages'] && OOAddon::isAvailable('sleightofhand'))
			{
			if($REX['CUR_CLANG']==$key)
				$out .= a561_sleightofhand(array(
								'text' => $text,
								'link' => rex_getUrl($curArtId,$key),
								'font' => $options['renderFontfile'],
								'color' => $options['renderFontactivecolor'],
								'size' => $options['renderFontsize'],
								'spacing' => $options['renderFontspacing']
							));
			else
				$out .= a561_sleightofhand(array(
								'text' => $text,
								'link' => rex_getUrl($curArtId,$key),
								'font' => $options['renderFontfile'],
								'color' => $options['renderFontcolor'],
								'mouseover' => $options['renderFontactivecolor'],
								'size' => $options['renderFontsize'],
								'spacing' => $options['renderFontspacing']
							));				
			}
		else
			{
			$out .= '<a href="'.rex_getUrl($curArtId,$key). '?' .$string. '" title="'.$lang.'" id="lang'.$key.'"';
			if($REX['CUR_CLANG']==$key) $out .= ' class="active"';
			$out .= '>'.$text.'</a>';
			}
		}
	return $out;
	}

?>
hier nun der ausschnitt aus dem default, mehr habe ich nicht gemacht.


Code: Alles auswählen

<div id="head-navigation">
     REX_TEMPLATE[4]
        <php 
$options = array('showLangCodeOnly'=>1, 'separatorTag'=>'span'); 
echo createLangNav($options); 
?>   
wenn ich das nun mache, steht folgendes in meinem navi div:




1, 'separatorTag'=>'span'); echo createLangNav($options); ?>

Verfasst: 1. Sep 2010, 23:45
von ynamite
Abend Steffus

Bitte die vorherigen Beiträge lesen!

Hab dein Fehler gefunden, dir fehlt in deinem default Template beim ersten PHP Tag ein Fragezeichen, wie oben schon geschrieben.

Gruss
y

Verfasst: 1. Sep 2010, 23:51
von steffus
ja.. sehr gut.. noch eine frage.. nun zeigt er mir nur de oder en an.. aber kein richtiges navi... also das was ich in struktur angelegt habe.

dann solltest du, wenn du einfluss hast das im download bereich hier ändern
Beispiel Ausgabe:
<php
$options = array('showLangCodeOnly'=>1, 'separatorTag'=>'span');
echo createLangNav($options);
?>

Verfasst: 1. Sep 2010, 23:55
von ynamite
Dazu verwendest du die falsche Funktion. Die "yLangNav", wie der Name schon andeutet, generiert eine Sprachnavigation. Um die Struktur auszugeben verwenden bitte die "yNav" unter (4. Download):
http://www.redaxo.de/19-0-templates.htm ... t=&x=0&y=0

Viel Glück
y

bring es leider nicht zusammen

Verfasst: 21. Okt 2010, 15:31
von matze
Hi

hab gerade das template ynav ausprobiert.
ich finde die funktionen echt super und hut ab vor dem der das geschrieben hat.

leider hab ich das problem, dass es jeden menüpunkt mit der artikel id 1 verlinkt!
hab zwar schon einiges ausprobiert aber will einfach net funktionieren!!

hat jemand vielleicht eine lösung?
wäre euch echt dankbar.

lg Matthias

Re: bring es leider nicht zusammen

Verfasst: 21. Okt 2010, 15:37
von ynamite
matze hat geschrieben:Hi

hab gerade das template ynav ausprobiert.
ich finde die funktionen echt super und hut ab vor dem der das geschrieben hat.

leider hab ich das problem, dass es jeden menüpunkt mit der artikel id 1 verlinkt!
hab zwar schon einiges ausprobiert aber will einfach net funktionieren!!

hat jemand vielleicht eine lösung?
wäre euch echt dankbar.

lg Matthias
hallo matze

vielen dank für das kompliment ;) sobald ich mal ein bisschen mehr zeit habe und gerade lust habe werde ich die letzten bugs noch ausmerzen bzw. die funktionen etwas erweitern.

zu deinem problem, hmm, ich kann mir gerade nicht erklären wieso das passiert. hast du die möglichkeit mir per pm einen link auf die seite zu schicken damit ich mal reinschauen kann? redaxo zugang wäre auch toll, aber vorerst sollte ein link auf die seite reichen.

kannst du zusätzlich noch angeben wie und mit welchen optionen du die funktion aufrufst?

danke!

gruss
y

Re: bring es leider nicht zusammen

Verfasst: 21. Okt 2010, 15:45
von matze
hab dir gerade eine pn gesendet!

Verfasst: 21. Okt 2010, 15:53
von ynamite
hab den fehler gefunden, lag an der funktion selber.

bitte kopier das gesamte ynav skript nochmals von der template download seite und versuchs nochmal damit. sollte klappen.

gib doch kurz bescheid obs nun funktioniert.

gruss
y

Super

Verfasst: 21. Okt 2010, 15:57
von matze
Super
Danke, Danke, Danke

Funktioniert perfekt

Lg Matthias