PHP Kurs anhand Contenido Contenido

Beleuchtfix
Beiträge: 1082
Registriert: Di 22. Jul 2003, 10:14
Wohnort: Hessen
Kontaktdaten:

PHP Kurs anhand Contenido Contenido

Beitrag von Beleuchtfix » Do 18. Nov 2004, 16:15

Eines der Sätze, die ich am häufigsten hier im Forum lese ist: Bin noch nicht sehr Erfahren in PHP oder bin PHP Newbie gleichzeitg verbunden nach einer Anfrage, wie man am besten irgend ein Modul erstellt bzw. anpasst.

Erschwerend kommt hinzu, dass Programmierer selten Schriftsteller sind und Kommentare im Code abosult rudimentär sind. Was für Timo oder Emergence noch auf einen Blick erkenntlich ist, bringt die meisten zur Verzweiflung.

Wie wäre es, hier einen Mini-Php Kurs zu machen (keine Hello World) anhand eines bestehenden Contenido-Moduls? Man könnte z.B. die Sevicenavigation nehmen (relativ kurz), das Original mit Zeilennummern posten und dann systematisch die einzelnen Funktionen kommentieren.

Natürlich kann auch jedes andere Modul gewählt werden (Text (1) (HTML) verstehe sogar ich gut :lol: )

Gruß Florian

timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo » Do 18. Nov 2004, 16:26

Naja, das Problem ist, daß viele Module "Fließtextstyle" sind - d.h. dort werden kaum Funktionen oder gar Objekte verwendet.

Mein Ziel ist es, irgendwann eine schöne API für Contenido zu haben, wo eben nicht jeder Programmierer nochmals SQL-Statements schreiben muß (was derzeit auch ein Verständnis der Datenbankstruktur erfordert), sondern im Prinzip einem Objekt nur noch sagt:

"Hallo Objekt, hole mir alle Kategoriepunkte unter Kategoriepunkt X, und dafür alle Artikel" oder ähnlich. Dadurch wird auch die meiste Dokumentation überflüssig, denn einfache Funktions- und Objektaufrufe sind einfacher als der derzeitige Stand von Modulen.

Bevor man also ein Modul schreibt, sollte man sich erstmal in der Datenbank informieren, wo die benötigten Daten stehen (auch hilft es, z.b. über den DBDesigner ein Reverse Engineering der Datenbankstruktur zu machen). Wenn man das Verstanden hat, versteht man auch ein wenig mehr von den Modulen.

Ich hoffe, ich hab ein wenig Weitergeholfen ;)

Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Beitrag von Halchteranerin » Do 18. Nov 2004, 17:17

timo hat geschrieben:Bevor man also ein Modul schreibt, sollte man sich erstmal in der Datenbank informieren, wo die benötigten Daten stehen (auch hilft es, z.b. über den DBDesigner ein Reverse Engineering der Datenbankstruktur zu machen).
Das hat ja Snoopy, glaube ich, sogar schon gemacht, aber man sollte wenigstens ein bisschen Ahnung von Datenbanken haben, um zu wissen, wo man was nachschaut. :wink:

SkyBlader
Beiträge: 303
Registriert: Do 18. Mär 2004, 16:23
Wohnort: Ratingen / NRW
Kontaktdaten:

Beitrag von SkyBlader » Do 18. Nov 2004, 18:08

@timo

es ist aber eigentlich egal, ob die api irgendwannsteht oder nicht.

Erfarhung in PHP braucht mann, eine gewisse Erfahrung in MySQL/DB auch, und ob man nun SQL Statemants schreibt oder die Objekte verwendet, ist im endefekkt doch wurscht ... einarbeiten muß man sich so oder so.

gruß

Stefan
Contenido 4.4.4/4.4.5 - Contenido 4.5.x

Module:sn_multinav für 4.5.x

timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo » Do 18. Nov 2004, 18:15

SkyBlader hat geschrieben:@timo

es ist aber eigentlich egal, ob die api irgendwannsteht oder nicht.

Erfarhung in PHP braucht mann, eine gewisse Erfahrung in MySQL/DB auch, und ob man nun SQL Statemants schreibt oder die Objekte verwendet, ist im endefekkt doch wurscht ... einarbeiten muß man sich so oder so.
Klar. Aber wenn du man irgendwann eine Objektbasierte API verwendet, könnte man auch ein "Tool" entwickeln, welches über einen GUI einen Prozess in PHP-Code verwandelt, den der "unbedarfte" Prozessausdenker (ich nenne ihn mal einfach so) umsetzen kann (ähnlich diesem Apple-Script-Teil, welches mit Mac OS X jetzt ausgeliefert wird). Außerdem sind Aufrufe an Objekten wesentlich einfacher zu verstehen als die ganzen SQL-Statements.

Beleuchtfix
Beiträge: 1082
Registriert: Di 22. Jul 2003, 10:14
Wohnort: Hessen
Kontaktdaten:

Beitrag von Beleuchtfix » Do 18. Nov 2004, 18:43

timo hat geschrieben:Klar. Aber wenn du man irgendwann....
Ich wollte keine Streit darüber entfachen, wer wann wie arbeiten soll. Meine Frage ist, ob zum jetzigen Zeitpunkt eine Lernkurs anhand von Contenido sinnvoll ist und wer sich vorstellen kann, da mitzuhelfen. Vielleicht denkt ihr aber auch, wenn das jeder weiß, dann kommen noch mehr Probleme auf uns zu (nach meiner Auffassung auch eine legitime Denkweise).

Ich glaube, Bedarf ist genügend da.

Gruß
Florian

SkyBlader
Beiträge: 303
Registriert: Do 18. Mär 2004, 16:23
Wohnort: Ratingen / NRW
Kontaktdaten:

Beitrag von SkyBlader » Do 18. Nov 2004, 21:19

also bei mir pers ist einfach die zeit das problem

1. bundeswehr
2. projekt
3. meine eigenen module
4. frau
5. hochzeits/zukunfsplanung

und der tag hat nunmal nur 24h ....

klar ist Bedarf da ... aber es ist ja nichts, wo es irgendwo schon was gibt

PHP Kann man lernen, und wenn man sich bei nem kurz anmeldet
MySQL ist kein geheimnis

und der rest ist einach das ganze zu verknüpfen und sich halt mal mit Contenido auseinander gesetzt zu haben. ( und forum posts lesen + contenido_faq ) wo es genügend infos über die DB Strukturen gibt.

So machen is ja einige die php/mysql beherschen auch ...

Und was ist an einem PHP Kurs anhand contenido anderst als ein normaler php/mysql kurs + forum / erfahrung sammeln ?

rein online shcwr zu realisieren, und für die standard dinge gibt es schon eine menge im netz.

Aber wenn du paar findest die es machen, warum nicht. Seh halt einfach das problem eher darin, das die die richtig fitt in contenido/php/mysql sind eher wengier die Zeit dazu haben einen "speziellen" kurs zu erstellen. Und der müsste ja auch wieder diferenziert werden ( je nach vorkenntnisse in php/mysql ).

Ist also im Prinzip schon fast ein Projekt für sich alleine.

Wünsch dir dennoch alles gute.

@timo btw die api klassen sind dennoch genial, mein letzen post nich falsch verstehen *g*

gruß

stefan
Contenido 4.4.4/4.4.5 - Contenido 4.5.x

Module:sn_multinav für 4.5.x

Beleuchtfix
Beiträge: 1082
Registriert: Di 22. Jul 2003, 10:14
Wohnort: Hessen
Kontaktdaten:

Beitrag von Beleuchtfix » Do 18. Nov 2004, 21:29

@SkyBlader Dann mal viel Erfolg für die Projekte, besonders 4+5 sind immens :wink: wichtig.

Gruß
Florian

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer » Fr 19. Nov 2004, 09:33

ich verstehe das problem nicht ganz. in contenido ist php immer noch normales php und mysql bleibt mysql. mit anderen worten: einführungen in beides sind nicht eben mangelware! wenn allerdings die leute zu faul sind, sich ein bisschen einzuarbeiten, dann wird auch ein kurs hier in diesem forum nicht weiterhelfen.

es ginge oft darum, nur eine zeile code zu verstehen und zu ändern. aber die antwort lautet einfach in neun von zehn fällen: bin drum nicht so fit in php. das könnte man einfach ändern. googeln hilft. wer allerdings zu faul ist, wird's auch hier im forum nicht lernen wollen. und die anderen finden etwas, das ihnen weiter hilft. es gibt massig angebote im netz.

gruss,
andreas
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo » Fr 19. Nov 2004, 10:47

Beleuchtfix hat geschrieben:
timo hat geschrieben:Klar. Aber wenn du man irgendwann....
Ich wollte keine Streit darüber entfachen, wer wann wie arbeiten soll. Meine Frage ist, ob zum jetzigen Zeitpunkt eine Lernkurs anhand von Contenido sinnvoll ist und wer sich vorstellen kann, da mitzuhelfen.
Das war auch nicht meine Absicht ;) Ich wollte nur meine Wunschvorstellung zeigen, wo ich mit Contenido irgendwann hinmöchte ;)

emergence
Beiträge: 10641
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Fr 19. Nov 2004, 11:18

da es eigentlich mein vorschlag war das ganze via forum abzuwickeln, find ich die diskussion doch ganz intressant... ;-)

ich denke mir warum denn nicht... nehmen wir doch einfach mal das service navigation modul her...

ich nehm hier einfach mal den orginal output code (etwas formatiert)

Code: Alles auswählen

<?php 

include_once ($cfg["path"]["contenido"].$cfg["path"]["includes"]."functions.con.php");

$catStart = "CMS_VALUE[0]";

if ($catStart != "") {
	$catIds = conDeeperCategoriesArray($catStart);

	echo '<table cellpadding="0" cellspacing="0" border="0"><tr>';
	echo '<td><img src="images/wuerfel.gif"></td>';

	if (is_array($catIds)) {

		foreach ($catIds as $key => $val) {
			// Ersten Eintrag ueberspringen, weil das der Menupunkt selbst ist
			// und nicht angezeigt werden soll.
			if ($key != 0) {

				$sql = "SELECT 
				           CAT.idcat AS idcat, 
				           name 
				        FROM 
				           ".$cfg["tab"]["cat"]." AS CAT,
				           ".$cfg["tab"]["cat_lang"]." AS CATLANG 
				        WHERE 
				           CAT.idcat = ".$val."
				           AND CAT.idcat = CATLANG.idcat
				           AND CATLANG.idlang = '$lang'
				           AND CATLANG.visible = '1'";

				$db->query($sql);

				while ($db->next_record()) {
					echo '<td height="21" class=".navigation" style="border: 0px; border-top:1px; border-color: #F7C473; border-style: dashed; background-color: #FFFFFF; padding-left:7px; padding-right:7px;">
					          <a class="klein" href="front_content.php?idcat='.$db->f("idcat").'">'.$db->f("name").'</a></td>';
				} // end while
			} // if
		} // end foreach
	} // end if (is_array)

	echo '</tr></table>';

}
?>
ich geh dann einfach mal zeile für zeile durch wenns recht ist...
das ganze eventuell mit warum und wieso es so gemacht wurde (da kann ich dann zeitweise auch nur schätzen... ;-) )
*** make your own tools (wishlist :: thx)

emergence
Beiträge: 10641
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Fr 19. Nov 2004, 11:27

grundsätzliches zum input und output bereich

seit der 4.4.x serie ist es so das der input bereich sich automatisch schon im php modus befindet...

der output bereich nicht

d.h.

es reicht im
input:

Code: Alles auswählen

echo "hello world";
bereich.

im output

Code: Alles auswählen

<?php echo "hello world"; ?>
bereich werden die php tags benötigt... (dafür gibt es zwei schreibweisen:

Code: Alles auswählen

<? echo "hello world"; ?>
oder

Code: Alles auswählen

<?php echo "hello world"; ?>
ich würde an sich immer <?php ?> empfehlen...
es gäbe dann zwar noch asp style das ist aber wiederrum von der php konfiguration abhängig...
*** make your own tools (wishlist :: thx)

emergence
Beiträge: 10641
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Fr 19. Nov 2004, 11:37

im php bereich kann man an sich ganz normales php verwenden, schreiben...

hiezu sollte man wissen das einige variablen seitens contenido zur verfügung stehen...

bleiben wir mal bei den einfachen...
siehe
contenido/includes/config.php -> allgemeine contenido variablen
contenido/includes/cfg_sql.inc.php -> variablen für die db tabellen
ebenso sehr intressant in der
contenido/includes/functions.general.php
wird bei jeder seite die funktion reread clients aufgerufen...
diese stellt die
$cfgClient variable global zur verfügung... (für den jeweiligen aktiven client)

weitere variablen
sind via folgenden code ersichtlich

Code: Alles auswählen

<?php 
echo "<pre>";
print_r($_GLOBALS); 
echo "</pre>"; 
?>
info zu print_r
-> http://at.php.net/manual/de/function.print-r.php

zu den netten anderen variablen zb $_GLOBALS
-> http://www.php.net/manual/de/language.v ... efined.php
*** make your own tools (wishlist :: thx)

emergence
Beiträge: 10641
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Fr 19. Nov 2004, 11:49

beginnen wir mal allgemein mit dem include_once

Code: Alles auswählen

include_once ($cfg["path"]["contenido"].$cfg["path"]["includes"]."functions.con.php");
was macht nun include_once
siehe -> http://at.php.net/manual/de/function.include-once.php

andere teile sind vordefiniert seitens contenido
$cfg["path"]["contenido"] -> contenido/includes/config.php
$cfg["path"]["includes"] -> contenido/includes/config.php
der punkt macht nichts anderes als diese variablen zu einem string zusammen zu fassen.

man könnte das auch anders schreiben:

Code: Alles auswählen

$fullpath = $cfg["path"]["contenido"].$cfg["path"]["includes"]."functions.con.php";
include_once ($fullpath);
weiters wäre es möglich noch ne andere schreibweise zu verwenden...
in der contenido api gibt es die nette funktion cInclude
zu finden in contenido/includes/api/functions.api.general.php

dies funktion nimmt drei parameter davon ist der letzte optional
man könnte auf grund dieser funktion auch folgendes schreiben

Code: Alles auswählen

cInclude ("includes", "functions.con.php");
die funktion mach dann nichts anderes wie

Code: Alles auswählen

include_once ($cfg["path"]["contenido"].$cfg["path"]["includes"]."functions.con.php");
auszuführen...

kommen wir jetzt mal dazu warum dieses include eigentlich aufrufen wird.
include_once kontrolliert zuerst ob die functions.con.php nicht bereits schon geladen ist (mit genau diesem pfad!) falls nicht wird sie nachgeladen.
sobald das passiert ist stehen die alle funktionen die in dieser datei enthalten sind zur verfügung.

ich denk mir eigentlich: diese zeile wird nicht benötigt, da functions.con.php benahe immer geladen ist.
somit könnte man sagen sicherheitshalber kontrollieren wird das ganz einfach...
*** make your own tools (wishlist :: thx)

emergence
Beiträge: 10641
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Fr 19. Nov 2004, 12:01

kommen wir zum nächsten teil:

Code: Alles auswählen

$catStart = "CMS_VALUE[0]";
im outputbereich bevor der code ausgeführt wird, wird der php code zuerst nach platzhalter variablen durchsucht.

-> CMS_VALUE[0]

diese werden einfach mittels einer search and replace funktion durch den wert der im input bereich vordefiniert ist ersetzt.

d.h.
wenn im input bereich für dieses modul
CMS_VALUE[0] = test gesetzt wäre
würde der code der dann ausgeführt wird, so aussehen:

Code: Alles auswählen

$catStart = "test";
da komm ich zu einen ganz kleinen wichtigen hinweis
diese Platzhalter sollten immer von quotes umschlossen sein !

beispiel:

Code: Alles auswählen

$catStart = CMS_VALUE[0];
würde dann

Code: Alles auswählen

$catStart = test;
ergeben...
wäre nichts gesetzt sprich der wert ist leer oder beinhaltet ein leerzeichen wäre das ergebniss

Code: Alles auswählen

$catStart = ;
was schlussendlich zu einem php fehler führen würde!

nun gut wie auch immer
es wird nichts anderes gemacht als der vordefinierten wert in der variable
$catStart zu speichern...

in bedacht auch die nächste zeile die kontrolliert ob $catStart einen wert enthält wäre es vernünftiger die zeile wie folgt zu definieren:

Code: Alles auswählen

$catStart = trim("CMS_VALUE[0]");
trim macht nichts anderes wie leerzeichen am beginn und am ende zu entfernen
-> http://at.php.net/manual/de/function.trim.php
*** make your own tools (wishlist :: thx)

Gesperrt