Webseiten neu strukturieren

Anmerkungen, Fragen und Hinweise zur Konfiguration dürfen in diesem Forum gepostet werden. // Notes, questions, and hints on the configuration can be posted here.
Ralf2011

Webseiten neu strukturieren

Beitrag von Ralf2011 » 10.07.2012, 20:03:13

Mein Vorhaben:
Ich möchte meine bestehenden Webseiten so strukturieren da ich es für mich übersichtlich finde. Ist es denn ohne weiteres möglich im APF die Pfade so anzupassen? Eigentlich ja oder? Desweiteren arbeite ich bei Templates lieber mit .tpl Dateien anstatt mit .html, das spielt doch sicher keine Rolle?

Ordnerstruktur (Ist nur ein Auszug.)

Code: Alles auswählen

-Htdocs/
-- Core
--- Framework (APF)
-- Out
--- Img
--- Src
---- Css
---- js
--- tpl
---- layout
---- emails
---- widgets
-- Views
-- Admin
-- Index.php
Lg

Benutzeravatar
dr.e.
Administrator
Beiträge: 4555
Registriert: 04.11.2007, 16:13:53

Re: Webseiten neu strukturieren

Beitrag von dr.e. » 10.07.2012, 22:54:11

Hallo Ralf,

Herzlich Willkommen im APF-Forum! :)
Ich möchte meine bestehenden Webseiten so strukturieren da ich es für mich übersichtlich finde. Ist es denn ohne weiteres möglich im APF die Pfade so anzupassen?
Zunächst geht das APF davon aus, dass alle Template- und Code-Dateien unterhalb eines zentralen Ordner sind. Daraus kannst du mehrere Installationen bedienen und unterhalb des Hauptordners beliebig strukturieren. Was die Strukturierung der CSS, JS und Bild-Daten angeht bist du absolut frei. Grund für die - zunächst starr wirkende - Struktur ist, dass das APF der Konvention folgt alle Komponenten (Klassen, Templates, Services) per Namespace und Komponenten- bzw. Template-Namen adressieren zu können. Ich denke jedoch, dass du dein Projekt mit diese Struktur ebenfalls abbilden kannst. Hier mein Vorschlag:

Code: Alles auswählen

-Htdocs/
-- APF
--- core
--- tools
--- modules
--- extensions
--- projects
---- project-one
----- tpl
------ layout
------ emails
------ widgets
----- Views (?)
-- Out
--- Img
--- Src
---- Css
---- js
-- Admin
-- index.php
Eigentlich ja oder?
Was deinen Vorschlag bzw. deine präferierte Arbeitsweise angeht, so bietet dir das APF trotzdem die Möglichkeit, Templates in einem anderen Pfad zu laden. Hierzu könntest du dir einen eigenen Tag schreiben, der die Templates nicht absolut aus dem "APF-Pfad" sondern aus deinem Views- oder Layout-Ordner lädt. Diese bedeutet allerdings etwas mehr Aufwand, der sich meiner Ansicht nach nicht sofort auszahlt.
Desweiteren arbeite ich bei Templates lieber mit .tpl Dateien anstatt mit .html, das spielt doch sicher keine Rolle?
Das APF geht davon aus, dass die Template-Dateien die Endung .html erhalten. Dies ist in den Standard-Tags so verankert. Da du jedoch immer die Wahl hast, eigene Tags basierend auf dem Page-Controller zu schreiben, kannst du auch die core_taglib_importdesign-Klasse erweitern und die Dateien dann .tpl nennen. Aber auch hier sehe ich zunächst etwas meht Aufwand, der sich nicht sofort auszahlt.

Ich hoffe, ich konnte dir weiter helfen. Wenn du weitere Fragen zur Struktur von APF-Projekten und die Möglichkeiten desselben hast, immer her damit! Grundsätzlich ist das APF auf einem sehr flexiblen Sockel gebaut (Stichwort: Page-Controller), der sehr viele Möglichkeiten bietet. Es ist jedoch immer eine Abwägung zwischen Nutzung von vorhandenen Mechanismen und schneller Umsetzung und Anpassung/Erweiterung des APF und langsamere Umsetzung. Im reellen Leben kannst du das mit einem Auto vergleichen: entweder du bestellst dir bei *Marke deiner Wahl* ein Auto und fährst direkt los - vielleicht mit dem ein oder anderen Feature, das du selbst so nicht gebaut hättest oder du kaufst dir Einzelteile und schraubst erst mal 2 Jahre. :)
Viele Grüße,
Christian

Ralf2011

Re: Webseiten neu strukturieren

Beitrag von Ralf2011 » 11.07.2012, 13:41:47

Geholfen hast du auf jeden Fall.

Würde aber gern bei meiner Struktur bleiben da ich es nicht fein finde wenn die template datein in dem framework ordner sind. Wie müsste man denn das umschreiben damit es eventuell die PFade schnell und einfach anpassen kann?

Könnte man nicht ne Art Config-Datei haben wo alle wichtigen Pfade und SQL festgelegt werden?

jprangenberg
Beiträge: 410
Registriert: 16.08.2010, 22:14:54

Re: Webseiten neu strukturieren

Beitrag von jprangenberg » 12.07.2012, 07:57:02

Ralf2011 hat geschrieben:Geholfen hast du auf jeden Fall.

Würde aber gern bei meiner Struktur bleiben da ich es nicht fein finde wenn die template datein in dem framework ordner sind. Wie müsste man denn das umschreiben damit es eventuell die PFade schnell und einfach anpassen kann?
Der "core" Ordner ist das richtige APF. Der Rest sind "nur" Helper. Außerdem liegen deine Templates in dem "pages" Ordner.

Benutzeravatar
dr.e.
Administrator
Beiträge: 4555
Registriert: 04.11.2007, 16:13:53

Re: Webseiten neu strukturieren

Beitrag von dr.e. » 13.07.2012, 13:52:54

Hallo Ralf,

wie xeOn schon richtig schreibt würden deine Dateien dann nicht in den Ordnern des APF (core, tools, modules, extensions) abgelegt werden. Das würde auch ich nicht wollen, denn dann würde ein Update weder einfach noch könntest du eine klare Struktur für dein Projekt aufsetzen.
Wie müsste man denn das umschreiben damit es eventuell die PFade schnell und einfach anpassen kann?
Sofern du deine Struktur so strikt beibehalten möchtest ist die Frage, was alles nicht im apps-Ordner liegen darf. In deinem obigen Post hast du von Templates gesprochen. Diese könnten einfach durch Erweiterung des <core:importdesign />-Tags passieren, denn dort wird das Template unter dem apps-Ordner erwartet. Wenn es um Controller geht, würde eine Erweiterung der Klasse Document notwendig sein, was sich durch alle Tags zieht und ein großer Aufwand ist.
Könnte man nicht ne Art Config-Datei haben wo alle wichtigen Pfade und SQL festgelegt werden?
Grundsätzlich ist das natürlich immer möglich, das APF definiert in seinen Grundfesten jedoch ein Paradigma das besagt, dass alle Dateien eines Projektes im apps-Ordner jedoch nicht in den core, tools, modules, extensions abgelegt sein müssen. Grund hierfür ist die Wiederverwendung von Komponenten in unterschiedlichen Projekten und die Möglichkeit aus einer Installation n Projekte bedienen zu können. Lege ich die Pfade jeweils einzeln fest, wäre es aufwendiger eine gemeinsam genutzte Code-Basis auf dem Server zu deployen.
Würde aber gern bei meiner Struktur bleiben da ich es nicht fein finde wenn die template datein in dem framework ordner sind.
Ich bin mir nicht ganz im klaren, welche Anforderungen du an ein Framework stellst oder welche Kriterien und Überlegungen hinter deiner Struktur stecken. Aus meiner Erfahrung kenne ich jedoch bisher keinen Grund, in einem Projekt Code und Templates so krass zu separieren. Ein View einer Kommentar-Funktion gehört meiner Ansicht nach immer zu seinem Controller und umgekehrt. Sofern es um variable Bestandteile wie z.B. mehrsprachige Texte geht, können diese sehr elegant ausgelagtert werden und es besteht keine Notwendigkeit mehr Templates von Code zu trennen. Das APF geht hier - aus Sicht der PHP-Szene - einen etwas anderen Weg was Templates angeht. Dieser macht es beispielsweise unnötig auf Smarty & Co. zu setzen um eine Abstraktion zu erreichen, sondern bietet diese selbst mit dem Template- und Tag-Konzept an.

Ich persönlich treffe eine Entscheidung an solchen Punkten gerne nach dem Pareto-Prinzip. Sofern ein Tool meine Anforderungen zu 80% erfüllt nutze ich es und passe mich in den restlichen 20% einfach an das Tool an um nicht den Nutzen ad absurdum zu führen.

Vielleicht kannst du deine Beweggründe etwas näher erläutern?
Viele Grüße,
Christian

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: Webseiten neu strukturieren

Beitrag von Megger » 13.07.2012, 14:04:24

Du könntest halt auch innerhalb des apps Ordners einen Ordner nur für dich anlegen und dort deine Struktur beibehalten, dies hat einfach den Vorteil, dass du nichts am APF ändern musst und trotzdem deine Ordnerstruktur beibehalten kannst
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Ralf2011

Re: Webseiten neu strukturieren

Beitrag von Ralf2011 » 15.07.2012, 08:59:36

Ok also hab mich jetzt entschloßen doch das Temlate in den apps ordner abzulegen, spielt ja keine Rolle wo :)

Jetzt hab ich folgende Struktur angelegt.

Code: Alles auswählen

apps
- out
-- tpl
-- layout
das ist doch jetzt aber möglich?

Desweitern habe ichbei dem Webrex CMS gesehen das es dort eine Config-Datei gibt mit der SQL Anbindung, das ist ja genau das was ich auch haben möchte da ich für meine Seite auch sowas wie "Facebook-Url", "Base-Url", "img-Pfad" usw anlegen möchte :)

Dann gleich noch eine Frage :)

Beispiel: Ich möchte eine Tourüberischt (jahre), tourüberischt (aktuelles jahr), Tourbilder, TourBerichte ausgeben

Brauch ich da für alles einen Controller? Oder kann ich dann auch einen Controller (tour_controller) machen und dort das via GET-Parameter bestimmen was ausgeben wird? (pics = tourbilder, tour=tourübersicht (aktuelles jahr) usw..?

Lg

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: Webseiten neu strukturieren

Beitrag von dave » 15.07.2012, 10:04:31

Ralf2011 hat geschrieben:Ok also hab mich jetzt entschloßen doch das Temlate in den apps ordner abzulegen, spielt ja keine Rolle wo :)

Jetzt hab ich folgende Struktur angelegt.

Code: Alles auswählen

apps
- out
-- tpl
-- layout
das ist doch jetzt aber möglich?
Definitiv!
Ralf2011 hat geschrieben: Desweitern habe ichbei dem Webrex CMS gesehen das es dort eine Config-Datei gibt mit der SQL Anbindung, das ist ja genau das was ich auch haben möchte da ich für meine Seite auch sowas wie "Facebook-Url", "Base-Url", "img-Pfad" usw anlegen möchte :)
Das ist nicht nur beim Webrex so. Du benötigst dringend eine Konfiguration für die Datenbankanbindung. Siehe auch die Doku: http://adventure-php-framework.org/Seit ... ionManager
Ich empfehle dir, einen eigenen Manager zu schreiben, der deine benötigten Methoden enthält. Dem Manager kannst du die Datenbank-Konfiguration dann mitgeben. Am besten ist sogar die Verwendung des GORM, damit erziehlst du sehr schnell beste Ergebnisse. Nur die Einarbeitung in den GORM dauert etwas. Dafür gibt es allerdings auch eine gute Vorlage, das Usermanagement.
Ralf2011 hat geschrieben: Dann gleich noch eine Frage :)

Beispiel: Ich möchte eine Tourüberischt (jahre), tourüberischt (aktuelles jahr), Tourbilder, TourBerichte ausgeben

Brauch ich da für alles einen Controller? Oder kann ich dann auch einen Controller (tour_controller) machen und dort das via GET-Parameter bestimmen was ausgeben wird? (pics = tourbilder, tour=tourübersicht (aktuelles jahr) usw..?
Viele Wege führen nach Rom. Du kannst es so machen, wie du es schon beschrieben hast.

Benutzeravatar
dr.e.
Administrator
Beiträge: 4555
Registriert: 04.11.2007, 16:13:53

Re: Webseiten neu strukturieren

Beitrag von dr.e. » 15.07.2012, 10:11:57

Hallo Ralf,
Ok also hab mich jetzt entschloßen doch das Temlate in den apps ordner abzulegen, spielt ja keine Rolle wo :)
Freut mich! :)
das ist doch jetzt aber möglich?
Absolut. Unterhalb des apps-Ordners (oder wie auch immer du ihn nennen möchtest, denn das detektiert das APF selbst) kannst du deine Projekt-Struktur beliebig definieren. Wichtig dabei ist lediglich, dass du den Zugriff auf den Ordner config verweigerst, da dort text/plain-Dateien für die Konfigurationen liegen. Idealerweise erlaubst du den HTTP-Zugriff ohnehin nur auf diejenigen Ordner, die CSS- oder JS-Dateien halten.
Brauch ich da für alles einen Controller? Oder kann ich dann auch einen Controller (tour_controller) machen und dort das via GET-Parameter bestimmen was ausgeben wird? (pics = tourbilder, tour=tourübersicht (aktuelles jahr) usw..?
Das APF unterstützt beide Wege, möchte aber den Entwickler dazu anhalten, die Views möglichst granular zu schneiden (Wiederverwendbarkeit). Die oben aufgezeigten Use Cases (Torübersicht, Bilder, Berichte) könnten nun auf einer Seite mit jeweils einem Link zu einer Detail-Seite dargestellt werden oder in einer Übersicht, die anschließend auf einer Detail-Seite für eine Kategorie/Selektion zeigt. Hier kann und möchte ich dir keine Vorgaben machen, denn die Umsetzung richtet sich letztendlich nach deinem Screen-Design und den zugehörigen User-Flows.
Was ich aber versichern kann ist, dass das APF beide Varianten - ein Controller für alles oder mehrere Controller - unterstützt.

Vergleichbare Frameworks bieten oft nur einen Weg an, sprich ein/e Action/Controller bietet mehrere Actions in mehreren Methoden an, auf die per statischem Routing verwiesen wird. Ein Routing in dieser Form bietet das APF nicht an, denn der Ansatz des APF ist HMVC und nicht MVC. Dadurch ergeben sich für das Schneiden von Views und Applikatinen gang neue Möglichkeiten.

Du kannst also in einem Controller sowohl mehrere "Action-Methoden" über URL-Parameter steuern (z.B. per Weiche in der transformContent() und Delegation an eine entsprechende "Sub-Methode") als auch mehrere Views mit je einem Controller anlegen, die die jeweils adressierten "Actions" ausführen.

Sofern du eine Empfehlung für die Umsetzung benötigst, schlage ich vor du postest mal ein Screen-Design, dann können wir uns daran orientieren.

Solltest du Hilfe zur Umsetzung einer Ein-Controller-Lösung benötigen sag Bescheid.
Viele Grüße,
Christian

Benutzeravatar
dr.e.
Administrator
Beiträge: 4555
Registriert: 04.11.2007, 16:13:53

Re: Webseiten neu strukturieren

Beitrag von dr.e. » 15.07.2012, 10:12:34

Mist, dave war schneller! :lol:
Viele Grüße,
Christian

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: Webseiten neu strukturieren

Beitrag von dave » 15.07.2012, 12:32:46

dr.e. hat geschrieben:Mist, dave war schneller! :lol:
Aber bei weitem nicht so ausführlich! Und doppelt hält bekanntlich besser. Aber schön, dass ich immerhin keinen Unsinn geschrieben habe.

Benutzeravatar
dr.e.
Administrator
Beiträge: 4555
Registriert: 04.11.2007, 16:13:53

Re: Webseiten neu strukturieren

Beitrag von dr.e. » 15.07.2012, 13:22:08

Unsinn hätte ich von dir auch nicht erwartet...
Viele Grüße,
Christian

Ralf2011

Re: Webseiten neu strukturieren

Beitrag von Ralf2011 » 15.07.2012, 14:03:39

So angenommen ich möchte eine config.php erstellen

und möchte eine Varialbe $base_url = "http://www.meinedomain.de/"; festlegen und dann in dem Template einbinden. Muss ich da ein TagLibs erstellen? Oder gibt es ne Möglichkeit das anders zuherbergen? WEil sonst müsste man ja wenn man mehre feste Variablen hat immer sowas machen, oder versteh ic hdas nur falsch?

Also so das ich im hauptverzeichnis nur die index.php, config.php und .htaccess habe... :)

Benutzeravatar
dr.e.
Administrator
Beiträge: 4555
Registriert: 04.11.2007, 16:13:53

Re: Webseiten neu strukturieren

Beitrag von dr.e. » 15.07.2012, 15:06:14

Hallo Ralf,
So angenommen ich möchte eine config.php erstellen
Hast du dir schon http://adventure-php-framework.org/Seit ... figuration angesehen? Das APF liefert mit dem ConfigurationManager eine Komponente, mit der du in jedem Controller und jedem Tag/jeder Taglib Konfigurationen lesen kannst.
und möchte eine Varialbe $base_url = "http://www.meinedomain.de/"; festlegen und dann in dem Template einbinden. Muss ich da ein TagLibs erstellen? Oder gibt es ne Möglichkeit das anders zuherbergen? WEil sonst müsste man ja wenn man mehre feste Variablen hat immer sowas machen, oder versteh ic hdas nur falsch?
Hierbei sind zwei Dinge wichtig zu verstehen: das Templating des APF setzt bewusst nicht auf eine Syntax wie Smarty & Co. bietet dir jedoch mit Tags und Controllern die Möglichkeit dynamische Inhalte sehr einfach in Templates einzusetzen.

Wenn du die Basis-URL deiner Webseite global definieren möchtest, kannst du das natürlich mit einer config.php tun und dann den Wert im Controller oder Tag nutzen. Dies funktioniert beispielsweise so:

config.php:

Code: Alles auswählen

$base_url = "http://www.meinedomain.de/"; 
template.html:

Code: Alles auswählen

<html>
<head>
   ...
   <base href="<html:placeholder name="URI" />" />
   ...
MyWebsiteConroller.php:

Code: Alles auswählen

class MyWebsiteConroller extends base_controller {
   public function transformContent() {
      global $base_url;
      $this->setPlaceHolder('URI', $base_url);
      ...
   }

} 
Die Anwendung ein einem Tag verhält sich identisch.

Die aus meiner Sicht elegantere Methode ist, die Werte in einer Konfiguration zu definieren (siehe Link weiter oben) und diese entsprechend auszulesen und dann im Controller oder Tag ins Template zu schreiben.
Also so das ich im hauptverzeichnis nur die index.php, config.php und .htaccess habe... :)
Da das APF Bootstraping unterstützt ist das absolut kein Problem.
Viele Grüße,
Christian

Ralf2011

Re: Webseiten neu strukturieren

Beitrag von Ralf2011 » 15.07.2012, 17:33:27

So also ich arbeite lieber mit config.php

Hab das jetzt so

layout.html

Code: Alles auswählen

<@controller namespace="out::views::documentcontroller" file="content_v1_controller" class="content_v1_controller" @>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html> 
content_v1_controller.php

Code: Alles auswählen

class content_v1_controller extends base_controller 
{
   public function transformContent() {
      // URL-Parameter beziehen
      $page = RequestHandler::getValue('Seite', 'Startseite');
      global $base_url;
      
      try {
         $this->setPlaceHolder('URI', $base_url);
        
      } catch (Exception $e) {
         $this->setContent($e->getMessage());
         return;
      }
   }
} 
config.php

Code: Alles auswählen

$base_url = "http://www.meineurl.de/";

error_reporting(E_ALL);
ini_set('display_errors', 1); 
index.php

Code: Alles auswählen

// Page-Controller einbinden (APF-Core-Library) 
require_once 'config.php'; 
include_once('./apps/core/pagecontroller/pagecontroller.php'); 
// Front-Controller einbinden 
import('core::frontcontroller', 'Frontcontroller'); 
// Front-Controller erzeugen und konfigurieren 
$fC = &Singleton::getInstance('Frontcontroller'); 
// Request-Abarbeitung starten und Ergebnis zum Client senden 
echo $fC->start('out::tpl::layout', 'layout'); 
Meinungen dazu :) Also laufen tut es auf jeden Fall

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast