Webdesign in Siegen

"flexible" Includes

Fragen zum Thema PHP können hier gestellt werden

Moderator: Basti

"flexible" Includes

Beitragvon Basti am 05.04.2007, 13:00

Hi,

wie vielleicht ein paar noch wissen arbeite ich derzeit an einem Modulsystem.
Das System selbst und mein erstes Modul ist im Prinzip auch schon fertig und läuft, allerdings stehe ich noch vor einem Problem, was die Ausgabeseiten der Module angeht.

Ich möchte das ganze so gestalten, dass z.B. die Newsausgabe nicht nur "alleine" lauffähig ist, sondern auch einfach in die bestehenden Seiten des Benutzers eingebunden werden kann.

Das Problem ist dann nur im Moment, dass sich die Pfade der "includierten" Seite ja ändern müssen, ansonsten klappt es nicht.
Ich habe mir überlegt, dass es wohl am besten ist, wenn man irgendwie einen absoluten Pfad angibt (also in etwa so: "http://www.seite.de/cms/includes/functions.inc.php" etc.), was soweit ich es gesehen habe die einfachste Lösung ist.
Mein Problem ist jetzt nur im Moment, wie ich das möglichst benutzerfreundlich umsetze.
Natürlich könnte der Benutzer vor jedem include den Root-Pfad zu meinem System angeben, aber das ist ja bei mehreren Modulen schon ziemlich unflexibel und umständlich.
Von anderen Script kenne ich es, dass der Root-Pfad nur einmal bei der Installation angegeben wird und dann alle Dateien von jedem Ort auf dem Server eingebunden werden können.
Leider habe ich keine Idee, wie sie dann an den Root-Pfad kommen, das müssten Sie dann ja auch irgendwo "herholen".

Hat vielleicht jemand von euch noch weitere Ideen oder sogar schon Erfahrungen gemacht was dieses Thema betrifft?
Benutzeravatar
Basti
Moderator
 
Beiträge: 1974
Registriert: 15.06.2006, 17:33
Wohnort: Rheinbreitbach

Beitragvon Manuel am 05.04.2007, 13:04

Ich hoffe ich verstehe dich da jetzt richtig...was spricht denn gegen eine Konfigurationsdatei? Dort füllst du bei der Installation einfach alle Variablen, die benötigt werden. So auch die Variable $root, die du bei der Installation einfach auf einen Wert setzt. Danach kannst du diese Datei immer inkludieren und hast so die Möglichkeit, den Pfad lediglich an einer Stelle angeben zu müssen. Alternative ist eine Konfigurationstabelle in einer Datenbank, falls die Konfigurationen oft geändert werden sollten. Ich denke das ist bei dir dann aber nicht der Fall.

Lg,
Manuel ;-]
Benutzeravatar
Manuel
Site Admin
 
Beiträge: 9114
Registriert: 10.12.2004, 19:29
Wohnort: Asbach

Beitragvon Basti am 05.04.2007, 13:28

Ja, ich weiß schon was du meinst, so etwas hätte ich ja auch gerne.

Aber um die Datei in der der Root-Pfad steht einzubinden bräuchte ich ja schon den Root-Pfad, weshalb das nicht so leicht geht. Bei MySQL wäre das gleiche Problem, da ich eine Datei habe, in der alle Daten zum Connecten stehen.
Benutzeravatar
Basti
Moderator
 
Beiträge: 1974
Registriert: 15.06.2006, 17:33
Wohnort: Rheinbreitbach

Beitragvon Manuel am 05.04.2007, 14:21

Nun ja, aber kannst du da nicht mit relativen Pfadangaben arbeiten? Ich meine wenn du einen Unterordner für die News hast, dann kannst du davon ausgehen, dass diese Datei in dem Pfad darüber liegt.

Alternativer Vorschlag: Wieso das Rad neu erfinden? Schau doch mal bei anderen freien Gästebüchern oder Newssystemen wie es dort gelöst wurde.
Benutzeravatar
Manuel
Site Admin
 
Beiträge: 9114
Registriert: 10.12.2004, 19:29
Wohnort: Asbach

Beitragvon Dac-XP am 05.04.2007, 14:46

Also ich habe bei meinem System eine Datei mit dem verzeichniss des CMS drinn stehen. der Endanwender braucht nur eine Datei dort zu includen, wo er dann die News/Gästebuch/wasweisich haben möchte.
Benutzeravatar
Dac-XP
Mitglied
 
Beiträge: 1921
Registriert: 23.06.2005, 19:47
Wohnort: Mönchengladbach / NRW

Beitragvon Basti am 05.04.2007, 16:05

@Dac: Ja, ich denke so etwas ähnliches werde ich wohl für den Anfang auch nehmen, aber wahrscheinlich lasse ich den Benutzer vor dem include einfach eine Variable $root oder so definieren, das ist denke ich auch ok.

@Manuel: Hm... vielleicht sollte ich mal ein kleines simples Beispiel machen. Relative Pfadangaben geben wohl nicht.
Ich habe auch schon in anderen Scripten geschaut, aber das ist teilweise doch ein wenig kompliziert ^^

Also, hier nun ein einfaches Beispiel:

als erstes eine news.php (liegt in einem Ordner "/cms/modules/news/news.php")
Code: Alles auswählen
<?php
# Funktionen einbinden
require_once('../includes/functions.inc.php');

// zur Datenbank connecten
// News ausgeben
?>


So, diese Datei bindet der Benutzer jetzt beispielsweise im Ordner "/homepage/" (vom Root-Pfad des Servers aus) ein. Also z.B. so:
Code: Alles auswählen
<?php

// Homepage

// News
include('../cms/modules/news/news.php');

// Noch was von der Homepage

?>


Das Ergebnis wäre jetzt, dass die news.php die Datei 'functions.inc.php' nicht finden kann, weil die Pfadangabe nicht mehr "korrekt" ist.
Deshalb muss ich irgendwie an den Root-Pfad kommen. Wenn ich den über einen include in der news.php abrufen würde, wäre das aber auch wieder für die Katz, weil der include Pfad dann auch wieder falsch wäre.

Eine Möglichkeit wäre jetzt:
Code: Alles auswählen
<?php

// Homepage

// News
$root = '../cms/'; oder auch
$root = 'http://www.name.de/cms/';
include('../cms/modules/news/news.php');

// Noch was von der Homepage

?>


und die news.php dann so:
Code: Alles auswählen
<?php
# Funktionen einbinden
require_once($root.'/includes/functions.inc.php');

// zur Datenbank connecten
// News ausgeben
?>


Aber da würde mich eben jetzt interessieren, wie man das schöner machen kann. Ich kenne Scripte, bei denen das ohne eine Angabe beim Einbinden funktioniert, aber leider konnte ich ihren "Trick" noch nicht rausfinden ^^
Benutzeravatar
Basti
Moderator
 
Beiträge: 1974
Registriert: 15.06.2006, 17:33
Wohnort: Rheinbreitbach

Beitragvon ComPoti am 07.04.2007, 20:37

Also ich habe im Root-Verzeichnis eine Config-Datei (config.inc.php)

Darin werden dann die wichtigsten Verzeichnisse definiert.
Es geht los mit mit dem Root-Verzeichnis

Code: Alles auswählen
define( 'FULL_PATH', dirname(__FILE__) . '/' );


Danach eben weitere Verzeichnisse, je nach Bedarf

Code: Alles auswählen
define('ROOT_DIR', FULL_PATH );

define('INC_DIR', ROOT_DIR . 'included/');
define('PIC_DIR', ROOT_DIR . 'images/');
define('LANG_DIR', ROOT_DIR . 'language/');
define('CORE_DIR', ROOT_DIR . 'core/');
define('CACHE_DIR', ROOT_DIR . 'cache/');

usw....


Dann halt in die Seite mit dem Aufruf (nur ein Beispiel)

Code: Alles auswählen
require ('config.inc.php');
include (INC_DIR. 'includete_beispieldatei.inc.php');


einbinden.

Ich hoffe mal das hilft irgendwie. Oder bin ich jetzt leider ganz am Thema vorbei? :roll: :D

Viele Grüße,
Michael
Benutzeravatar
ComPoti
Mitglied
 
Beiträge: 7
Registriert: 10.09.2006, 11:46
Wohnort: Taufkirchen / Vils

Beitragvon Basti am 07.04.2007, 20:46

Doch, das sieht gut aus, sowas ähnliches habe ich auch bei anderen Scripten gesehen.

Nur bei dir ist dann ja auch noch vor dem eigentlichen Include eine andere Datei zu includen, also sowas ähnliches wie Dac-XP sagte.

Aber ne andere Frage: Ich kenne dieses define() noch nicht. Wo finde ich Infos dazu und was kann ich damit alles so machen?

Danke für deine Antwort ;)
Benutzeravatar
Basti
Moderator
 
Beiträge: 1974
Registriert: 15.06.2006, 17:33
Wohnort: Rheinbreitbach

Beitragvon Dac-XP am 08.04.2007, 10:33

http://de3.php.net/manual/de/function.define.php

Ich benutze das auch in meinem System. Man definiert eine Konstante, die dann
1.) Immer konstant ist (Vorteil einer Konstante)
2.) überall gültig ist (was man von nicht-globalen Variablen nicht behaupten kann)
Benutzeravatar
Dac-XP
Mitglied
 
Beiträge: 1921
Registriert: 23.06.2005, 19:47
Wohnort: Mönchengladbach / NRW

Beitragvon Basti am 08.04.2007, 11:24

Danke für den Link. Klingt ganz interessant.

Aber diese Konstanten gelten nicht dokumentübergreifend, oder? Also so ähnlich wie Sessions etc.

Naja, ich mal sehen, wie ich das noch in mein Script integriere. Ist dann wohl das nächste Update ;)
Benutzeravatar
Basti
Moderator
 
Beiträge: 1974
Registriert: 15.06.2006, 17:33
Wohnort: Rheinbreitbach

Beitragvon Dac-XP am 08.04.2007, 11:31

Nee, mit dem "überall gültig" meine ich, wenn mann irgendeine PHP-Datei mit include oder require einbindet, kann man nicht ohne Weiteres auf dessen Variablen zugreifen (esseidenn man definiert sie als global). Mit define() kann man die Konstanten zumindestens nutzen.
Benutzeravatar
Dac-XP
Mitglied
 
Beiträge: 1921
Registriert: 23.06.2005, 19:47
Wohnort: Mönchengladbach / NRW

Beitragvon ComPoti am 08.04.2007, 11:43

Ist halt eine ganz einfache und effektive Möglichkeit, ich nutze diese meist in Verbindung mit dem Smarty-Template-System. Aber ich denke das funktioniert auf anderen "normalen" Seiten auch ohne weiteres

Viele Grüße,
Michael
Benutzeravatar
ComPoti
Mitglied
 
Beiträge: 7
Registriert: 10.09.2006, 11:46
Wohnort: Taufkirchen / Vils

Beitragvon Basti am 08.04.2007, 11:55

OK, vielen Dank für eure Antworten. Ich werde mich dann in nächster Zeit ein bisschen genauer mit Konstanten auseinandersetzen, damit ich rausfinde, wo sie sich für mich "lohnen". ;)
Benutzeravatar
Basti
Moderator
 
Beiträge: 1974
Registriert: 15.06.2006, 17:33
Wohnort: Rheinbreitbach


Zurück zu PHP

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast