Verständnisfrage
KD-one
- php
0 Tom0 KD-one
0 Sven Rautenberg0 KD-one
Hallo alle,
Nachdem ich bei meinem letzten Versuch von Sven Rautenberg eine kräftige Kopfwäsche *g* bekommen habe, ein neuer Versuch.
Ich hab mal ein weiteres Script z.T. nach seinen Tips umgebaut und möchte euch nun fragen, ob ich da wieder Denkfehler drinnen hab.
---------------------------------------------------------------------
<?php
switch($_GET['menu'])
{
case 0:
case 1:
$add = '?menu=1';
break;
case 2:
$add = '?menu=2';
break;
default:
$add = '';
}
$breadcrumb = array(
//Gaestebuch
"guestbook" => " <a class='dyn' href='index.php"$add"'>STARTSEITE</a> » GÄSTEBUCH",
//Allgenein
"frontpage" => " <a class='dyn' href='index.php"$add"'>STARTSEITE</a> » ALLGEMEIN » Frontpage konfigurieren",
[...]
);
if (isset($_GET['content']) && isset($breadcrumb[$_GET['content']]))
{
echo $breadcrumb[$_GET['content']];
}
?>
---------------------------------------------------------------------
Bitte nicht stteinigen da blutiger Anfänger. *g*
Mit diesem Script soll eine sogenannte Breadcrumb-Navigation eingefügt werden.
Apropos:
Eine Grundsatzfrage:
Immer wieder stoße ich im Zusammenhang mit Arrays auf diese Zeichenfolge "=>", finde aber nirgens eine Erklärung dazu.
Kann mich da bitte mal jemand dazu aufklären, was das denn zu bedeuten hat? Unter "Operatoren" wird es nirgens aufgeführt, es sei denn , die umgekehrte Zeichenfolge, was ja "größer oder gleich" bedeutet.
Gruß
Kurt
Hello,
Immer wieder stoße ich im Zusammenhang mit Arrays auf diese Zeichenfolge "=>", finde aber nirgens eine Erklärung dazu.
Hier handelt es sich um einen Descriptor. Der verbindet zwei atomistische Elemente aus einem "Array" zu einem Name:Wert-Paar. Das Listenelement (hier gelichbedeutend mit Array-Elemet) hat mehrere Datenfeldern, i.d.R. vier:
....
Zeiger
| ^
v |
Zeiger auf Vorgänger
Name der Variablen
Wert der Variablen
Zeiger auf Nachfolger
| ^
v |
Zeiger auf Vorgänger
Name der Variablen
Wert der Variablen
Zeiger auf Nachfolger
| ^
v |
Zeiger auf Vorgänger
Name der Variablen
Wert der Variablen <==> Zeiger auf Vorgänger
Zeiger auf Nachfolger Name der Variablen
| ^ Wert der Variablen
v | Zeiger auf Nachfolger
Zeiger | ^
... v |
Zeiger auf Vorgänger
Name der Variablen
Wert der Variablen
Zeiger auf Nachfolger
| ^
v |
...
und so weiter...
Was da wirklich drinsteht in den verketteten Baumstrukturen, die sich bei PHP "Array" nennen, geht uns als Anwendungsprogrammierer nichts an. Soweit ich das hier darstelle, tu ich es nur zum Verständnis, dass es sich eben um atomistisch über den Speicher verteilte Datenpackete handelt.
Name => Wert
Wobei in Wert auch schon wieder ein weiteres "Array" beginnen kann
Liebe Grüße aus http://www.braunschweig.de
Tom
Hallo Tom,
ok, jetzt habe ich das zumindest mal realisiert. Es ist also im Prinzip nötige Syntax, wenn ich den Wert eines Schlüssels erhalten will. Was da dann noch so alles möglich ist, ahne ich, will mich aber vorerst nicht darin vertiefen, sonst blick ich gar nicht mehr durch. *g*
Danke.
Gruß
Kurt
Moin!
Ich hab mal ein weiteres Script z.T. nach seinen Tips umgebaut und möchte euch nun fragen, ob ich da wieder Denkfehler drinnen hab.
Du hast den grundsätzlichen Denkfehler drin, dass du mehrere Aufgaben zur gleichen Datenbasis von unterschiedlichen Skripten erledigen lassen willst.
Namentlich: Du hast _eine_ Dokumentenstruktur. Warum willst du dafür zwei oder mehr Skripte schreiben, die jeweils eine Teilaufgabe (Ausgabe der Navigation, Ausgabe der Brodkrumennavigation) erledigen und jeweils individuell ihre Datenbasis definieren?
Besser: Ein Skript nehmen, welches _einmal_ die Datenbasis definiert (ob diese nun aus einer Datenbank kommt, oder einer XML-Datei, oder einem definierten Array, ist dabei ganz egal) und damit arbeitet, um unterschiedliche Ergebnisse herzustellen.
Du solltest eine Datenstruktur finden, die deine Dokumentenstruktur entsprechend optimal wiederspiegelt. Dazu gehören (entsprechend deiner Anforderungen) offenbar: Baumstrukturierung, über- und untergeordnete Dokumente, Information über das zu includierende Textdokument, Informationen über die auszugebende Navigationszeile (Textlink), Information über die auszugebende Brotkrumenzeile (Textlink - wobei die sinnvollerweise textlich identisch zur Navigationszeile ist, sonst verwirrt das den Benutzer - uppercase stellt man besser im Skript her, als Dinge zweimal einzugeben).
Wenn du weißt, dass ein angefordertes Dokument zwei weitere als übergeordnete Dokumente hat, dann kannst du sowohl die Navigation dafür ausgeben (da kommt die Baumstruktur komplett raus - ggf. ergänzt um einen als "ausgewählt" hervorgehobenen Link des aktuellen Dokuments), als auch die Brotkrumen ausgeben (mit Links zu den jeweils direkt übergeordneten Dokumenten).
- Sven Rautenberg
Hallo Sven,
Grundsätzlich hast du ja recht.
Da ich hiermit eigentlich meine ersten Schritte mit PHP mache, mal abgesehen von den vereinzelten Includes bisher,, habe ich es mir einfach nicht zugetraut, ein autarkes Template zu erstellen. Deshalb habe ich halt begonnen, für jeden Fall ein eigenes Script zu schreiben, welches dann in die index.php per include eingebunden wird.
Nachdem ich diesen Teil soweit erledigt habe, daß ich zumindest in groben Zügen die Zusammenhänge erkannt habe, könnte ich nun den nächsten Schritt wagen und, basierend auf den inzwischen bestehenden Scripten, ein Template zu bauen, welches dann nicht mehr auf externe PHP-Ressourcen zurückgreift.
Ich denke, es ist besser für mich, dabei Schritt für Schritt vorzugehen, bevor ich ein Ziel wähle, welches so umfangreich ist, daß ich den Weg verliere.
Nachdem die Scripte nun großteils fertig sind, kann ich auch daran denken, sie zusammenzufassen und mehrfache Teile so zu definieren, daß sie nicht mehr redundant sind, was sicherlich eine deutliche Verkleinerung der Scripte in Ihrer Gesamtheit zur Folge hat.
Das ist allerdings ein Schritt, den ich nicht hätte gehen können, hätte ich mich nicht vorher mit Einzelaspekten beschäftigt.
Meine Vorgehensweise ist hier sicherlich etwas umständlich, aber ich befürchte, daß ich ansonst den Überblick verliere und dann frustriert aufgebe.
Gruß
Kurt
Moin!
Grundsätzlich hast du ja recht.
...
Meine Vorgehensweise ist hier sicherlich etwas umständlich, aber ich befürchte, daß ich ansonst den Überblick verliere und dann frustriert aufgebe.
Das glaube ich nicht.
Du lernst auch mehr, wenn du den richtigen Weg kennst. Den zeige ich dir. Denn nur wenn du den Ausblick auf "so macht man es gut (und richtig)" kennst, kannst du sinnvoll selbst entscheiden, wieviel du davon schon machen willst. Denn grundsätzlich scheinst du die Vorgehensweise ja verstanden zu haben - du traust dich nur nicht, einen großen Schritt zu machen.
Wobei: Von Templates an sich habe ich ja noch nirgendwo gesprochen. Wenn du sowas machen willst (was wesentlich näher an meinem mod_rewrite-Vorschlag dran ist), dann hast du sowieso noch mal einiges zu lernen.
Was ich als wichtigsten Punkt empfinde (der hilft dir dann auch später bei den Templates weiter): Zentrales Denken lernen. Dinge müssen nicht an mehreren Stellen gleichartig definiert und abgelegt werden, wenn man sie auch an einer einzigen Stelle definieren und ablegen kann.
Wenn du gerne zwei Skripte für zwei Aufgaben hättest: Ok, kann man begründen und nachvollziehen. Dann solltest du zwei Skripte schreiben, welche ihrerseits genau eine Datendatei includieren, in welcher ein entsprechend den zwei Aufgaben passendes Array definiert wird. Du lagerst also im Prinzip die Definition von $seitenliste in eine externe Datei aus - und änderst ggf. noch die Definition von $seitenliste so, dass du eine schöne Struktur hast, die für beide Aufgaben genutzt werden kann.
Sicher: Aus deinem eher linearen Denken in der Struktur plötzlich ein mehrdimensionales Denken zu machen und dafür dann auch die passenden Befehle in PHP zu finden, ist sicherlich nicht so leicht. Ich darf dir verraten, dass ich die Aufgabenstellung "Navigation" in ziemlich exakt der gleichen Problematik, wie du sie hast, mit einem recht simplen, linearen Array gelöst habe (welches aus einer XML-Datei gespeist wird, in der ich die Verschachtelung NICHT durch entsprechende Verschachtelung von Elementen gelöst habe, sondern - sicherlich ganz böse, aber das CMS ist nicht danach - im Prinzip als lineare Liste - die Einrücktiefe ist als Attribut abgelegt). Das bedeutet für dich: Die Kenntnisse zur Lösung deines Problems hast du eigentlich schon, du mußt es nur noch in PHP packen.
- Sven Rautenberg
Hallo Sven,
Meine Vorgehensweise ist hier sicherlich etwas umständlich, aber ich befürchte, daß ich ansonst den Überblick verliere und dann frustriert aufgebe.
Das glaube ich nicht.
Ooch, du weisst nicht, wieviel Schweiss ich bei meinem ersten Script vergossen habe. Anhand deiner Analyse habe ich dann sehr viel dazugelernt, was Datenhaltung betrifft.
Nachdem ich nun zwei arrays mit ähnlichen, aber dennoch unterschiedlichen Daten habe, ist mir nun, auch nach dem Durchlesen deines Postings, klar geworden, daß ich eines der beiden so umstrukturieren muss, daß es letztendlich für 3(4) Anwendungen verwendbar ist. Es soll ja letztendlich so werden, daß ich nur mehr in einem File Änderungen vornehmen muss, wenn ich die Site erweitern will. Das bedeutet strikte Trennung der HTML-Struktur von den Inhalten, denn diese sollen ja in verschiedene Strukturen eingebettet werden(JS-Menü, Noscript-Menü, Listenmenü und breadcrumb-Navigation).
Dazu kommt ja auch noch, daß der Seitenhead, je nach Anforderung dynamisch geändert wird(einbinden diverser Javascripte, einbinden der passenden <title>-Zeile, in weiterer Folge sollen auch noch seitenspezifische Metatags dazukommen). Auch der body-Tag wird bei verschiedenen Seiten umgeschrieben und geändert ausgegeben(onload-Events).
Ich habe mir mal ein Template angeschaut, welches eine ähnliche Struktur aufgewiesen hat, habe es aber überhaupt nicht begriffen. Deshalb auch meine Politik der kleinen Schritte. :-)
Meine Index php besteht zur Zeit nur aus einem HTML-Gerüst mit der Layouttabelle, in der mit einem Haufen includes die einzelnen Scripte an passender Stelle eingebunden werden.
Da ich, wie gesagt, von PHP keine Ahnung hatte, ausser, daß man damit Dateien includen kann (*g*), stellt diese Aufgabenstellung natürlich eine große Herausforderung für mich dar.
Meine erste PHP-Site bestand tatsächlich aus lauter einzelnen HTML-Seiten, in die bloss per include immer wiederkehrende Inhalte eingebunden wurden. *g*
Ich stehe also wirklich bei 0, naja, inzwischen eventuell bei 0,1... ;-)
Du lernst auch mehr, wenn du den richtigen Weg kennst. Den zeige ich dir. Denn nur wenn du den Ausblick auf "so macht man es gut (und richtig)" kennst, kannst du sinnvoll selbst entscheiden, wieviel du davon schon machen willst. Denn grundsätzlich scheinst du die Vorgehensweise ja verstanden zu haben - du traust dich nur nicht, einen großen Schritt zu machen.
Stimmt, dieser Schritt von Anfang an wäre mir zu groß gewesen. Irgendwann hätte ich mich in meiner Unwissenheit verstrickt und hätte aufgegeben.
Wobei: Von Templates an sich habe ich ja noch nirgendwo gesprochen. Wenn du sowas machen willst (was wesentlich näher an meinem mod_rewrite-Vorschlag dran ist), dann hast du sowieso noch mal einiges zu lernen.
Hier scheint es ein Definitionsproblem zu geben, tatsächlich meinte ich damit, eine Seite zu erstellen, welche, je nach Anforderung, nur noch auf externe Ressourcen(in Form von Textfiles), zugreift, um die angeforderte Seite zu erstellen. Also eine Seite für alles.
Von Datenbanken und Zugriffen darauf, oder gar XML, nehme ich vorläufig noch Abstand, das wäre mir auf einmal zuviel des Guten.
Was ich als wichtigsten Punkt empfinde (der hilft dir dann auch später bei den Templates weiter): Zentrales Denken lernen. Dinge müssen nicht an mehreren Stellen gleichartig definiert und abgelegt werden, wenn man sie auch an einer einzigen Stelle definieren und ablegen kann.
Du meinst, eine Datendatei, welche z.B. am Seitenanfang einfach in die Index.php eingebunden wird und auf die alle Scripte dann zugreifen?
Wenn du gerne zwei Skripte für zwei Aufgaben hättest: Ok, kann man begründen und nachvollziehen. Dann solltest du zwei Skripte schreiben, welche ihrerseits genau eine Datendatei includieren, in welcher ein entsprechend den zwei Aufgaben passendes Array definiert wird. Du lagerst also im Prinzip die Definition von $seitenliste in eine externe Datei aus - und änderst ggf. noch die Definition von $seitenliste so, dass du eine schöne Struktur hast, die für beide Aufgaben genutzt werden kann.
So dachte ich mir das.
Das bedeutet für dich: Die Kenntnisse zur Lösung deines Problems hast du eigentlich schon, du mußt es nur noch in PHP packen.
Ja, darin liegt das größte Problem und auch die größte Herausforderung.
Aber mit eurer Hilfe schaffe ich das auch. :-)
Danke für deine Hilfe und Geduld.
Gruß
Kurt