Kleine Applikation

Hier dreht sich alles um die auf der Webseite veröffentlichten Tutorials. // This forum is all about the APF tutorials.
ByStones
Beiträge: 27
Registriert: 09.07.2010, 20:25:36

Kleine Applikation

Beitrag von ByStones » 16.07.2010, 16:48:56

Falls nicht, können wir gerne Schritt für Schritt den Aufbau einer kleinen Webseite diskutieren und daraus gleich ein Tutorial im Wiki machen. OK?
Ok, ich nehme dieses Angebot dankend an!

Ich hab mir auch schon was überlegt:
Eine Art URL-Verkürzungsdienst. Damit kann man von Usereingabenvalidierung bis Datenbanken alles einbauen.
So die Grundidee:
Man gibt seine URL ein und dazu Tags, also Schlagworte die zu der Homepage passen. (Max. 10 Tags pro Seite).
Für die URL wird dann eine Kürzel eingerichtet (6 Zeichen a-zA-Z0-9) und dann zusammen mit den Tags in der DB gespeichert.
Wenn jemand example.com/[Kürzel] aufruft dann soll in die Statistik geschrieben werden dass die URL aufgerufen wurde und
dann wird man weitergeleitet.
So weit so gut.

Was hab ich gemacht:
Ich hab das Layout erstellt.
Soll ich den HTML-Code hier posten ? wenn ja den kompletten oder eine abgespeckte Version, weil ich schon ein kleines Design gebastelt hab...

Datenbank hab ich auch gemacht:

Code: Alles auswählen

CREATE TABLE IF NOT EXISTS `tags_cloud` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `tag_name` varchar(15) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `urls` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `url` text NOT NULL,
  `short` varchar(11) NOT NULL,
  `clicks` bigint(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `url_tags` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `url_id` int(11) NOT NULL,
  `tag_id` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;
Grüße

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

Re: Kleine Applikation

Beitrag von dr.e. » 16.07.2010, 23:23:27

Hallo ByStones,

die Idee finde ich als Übung richtig gut. 8-) Poste mal den Code, dann kann ich dir gerne Hinweise zur Umsetzung geben.
Datenbank hab ich auch gemacht:
Klingt gut. Man könnte eine URL noch um eine Beschreibung erweitern.
Was hab ich gemacht:
Ohne deine Ausführungen gelesen zu haben, würde ich folgendes erwarten:
  • Login und Registrierung für den Dienst
  • Interface zur Eingabe und Verwaltung der Elemente pro User
  • Weiterleitungs-Logik
  • Suche nach Tags um Urls und deren Beschreibung zu finden (quasi ähnlich zu Social Bookmarks)
  • Anzeige der Klick-Auswertung
Die Weiterleitung würde ich mit einer RewriteRule auf eine FC-Action umsetzen, den Rest einfach mit einigen Templates und Controllern für die einzelnen Aufgaben. Die Datenbank kannst du der Einfachheit halber auch direkt in den Controllern adressieren, da braucht es keine große Business-Schicht.

Bin auf den Code gespannt.
Viele Grüße,
Christian

ByStones
Beiträge: 27
Registriert: 09.07.2010, 20:25:36

Re: Kleine Applikation

Beitrag von ByStones » 17.07.2010, 11:28:42

Login und Registrierung für den Dienst
Weiß nicht, man meldet sich doch nicht an, nur um seine URLs verkürzen zu lassen ?
Wenn es dann irgendwelche Zusatzfeatures gibt ok, aber die Grundfunktion soll auch ohne Registrieren gehen.
Man könnte eine URL noch um eine Beschreibung erweitern.
Die Beschreibung soll eigentlich durch die Tags (Schlagworte) ersetzt werden.
Dann kann man nach einem Schlagwort suchen ("spiel") und dann zeigt er alle Seiten an wo eben mit dem Schlagwort verknüpft sind.

An Code existiert noch nichts außer dem Startseiten-Layout...

Grüße

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

Re: Kleine Applikation

Beitrag von dr.e. » 17.07.2010, 11:40:51

Hallo ByStones,

dann warte ich gespannt auf ein erstes Ergebnis. Solltest du Fragen haben, dann immer her damit! :)
Viele Grüße,
Christian

ByStones
Beiträge: 27
Registriert: 09.07.2010, 20:25:36

Re: Kleine Applikation

Beitrag von ByStones » 17.07.2010, 12:35:31

Ich will grad ein Datenbankverbindung aufbauen...
Wo genau muss ich dir Konfigurationsdatei ablegen ?

Hab sie in apps -> config -> core -> database -> DEFAULT -> DEFAULT_connections.ini

Aber iwie will der net:
[configurationManager->getConfiguration()] Requested configuration with name "DEFAULT_connections.ini" cannot be loaded from namespace "core::database" with context "sites::...::pres::templates"!
core::database
Da soll ich die wohl kaum hinlegen oder?
/config/core/database/{CONTEXT}/{ENVIRONMENT}_connections.ini
sagt die Doku... Aber wie bekomm ich den CONTEXT raus ?

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: Kleine Applikation

Beitrag von Screeze » 17.07.2010, 12:41:04

Der Context wird (wenn nicht manuell gesetzt) automatisch gesetzt in der index datei.

Bei dir lautet der context
sites::...::pres::templates
(was machen da eig 3 punkte??)

Ich würde ihn jedoch explizit setzen in der index datei.
dazu einfach ($fC ist hier der Frontcontroller in der index.php)

Code: Alles auswählen

$fC->setContext('miniapp');
aufrufen, danach lautet der context "miniapp", und der ordner
/config/core/database/miniapp/{ENVIRONMENT}_connections.ini

ByStones
Beiträge: 27
Registriert: 09.07.2010, 20:25:36

Re: Kleine Applikation

Beitrag von ByStones » 17.07.2010, 12:51:10

Code: Alles auswählen

require_once 'apps/core/pagecontroller/pagecontroller.php';
require_once 'apps/core/frontcontroller/Frontcontroller.php';

$fC = Singleton::getInstance('Frontcontroller');

$fC->setContext('myapp');
$fC->setLanguage('de');

$fC->start('sites::myapp::pres::templates','layout');
produziert das:
Fatal error: Call to undefined method Frontcontroller::setContext() in D:\xampp\htdocs\myapp\index.php on line 8
-.- Ich bekomms irgendwie noch nicht auf die Reihe... Naja aller Anfang ist schwer...

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

Re: Kleine Applikation

Beitrag von dr.e. » 17.07.2010, 13:02:46

Hallo ByStones,

ich denke das liegt einfach an der Version. Ralf arbeitet schon lange auf 1.12, du hast sicher 1.11. Schreib einfach

Code: Alles auswählen

$fC->set('Context','myapp');
$fC->set('Language','de');
statt

Code: Alles auswählen

$fC->setContext('myapp');
$fC->setLanguage('de');
Grund hierfür ist eine API-Änderung, die unter http://adventure-php-framework.org/Seit ... 1-auf-1-12 beschrieben ist. In 1.1 wurden die recht unsemantischen get()- und set()-Aufrufe durch schöne Methoden ersetzt.

Alternativ lädst du dir einfach das 1.12-RC1 unter http://files.adventure-php-framework.or ... 3-php5.zip Release herunter. Bei diesem wird sich zur Stable-Version nichts mehr an der API ändern.
Viele Grüße,
Christian

ByStones
Beiträge: 27
Registriert: 09.07.2010, 20:25:36

Re: Kleine Applikation

Beitrag von ByStones » 17.07.2010, 13:08:34

Hab die Version runtergeladen und überspielt:
Zuerst kam ein Fehler dass baseController nicht gefunden wurde => base_controller

Nun kommt dieser Fehler:

Code: Alles auswählen

Fatal error: Call to private Registry::Registry() from context 'Singleton' in D:\xampp\htdocs\myapp\apps\core\singleton\Singleton.php on line 77 


ByStones
Beiträge: 27
Registriert: 09.07.2010, 20:25:36

Re: Kleine Applikation

Beitrag von ByStones » 17.07.2010, 13:19:33

Aber an der Datei hab ich garnix verändert ?

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: Kleine Applikation

Beitrag von Screeze » 17.07.2010, 13:35:36

Du hast vermutlich auf 1.12 updated, richtig?

Ab 1.12 muss die Registry nichtmehr per singleton, instanziert werden, sondern einfach statisch verwendet werden,
mit

Code: Alles auswählen

Registry::register('name::space','ident','value');
Registry::retrieve('name::space','ident');

Der Fehler tritt schon vorher auf, endgültig resultiert er aber erst in der genannten datei in z77, das ist aber nicht die ursache.
Du verwendest lediglich die Registry nach altem schema deswegen klappt das nicht so.

ByStones
Beiträge: 27
Registriert: 09.07.2010, 20:25:36

Re: Kleine Applikation

Beitrag von ByStones » 17.07.2010, 15:52:31

Ok, danke für den Tipp mit der Registry, das funktionert nun !

Hab nun das ganze mit dem FrontController gemacht, will aber in das Layout den eigentlichen Seiteninhalt einfügen:

Code: Alles auswählen

<core:importdesign namespace="sites::myapp::pres::templates::frontend" template="[seite = home]" incparam="seite" />
Naja das tut aber nicht, denn er fügt immer home.html ein, egal was ich oben in der URL angebe.

Meine index.php:

Code: Alles auswählen

error_reporting(E_ALL);
require_once 'apps/core/pagecontroller/pagecontroller.php';
require_once 'apps/core/frontcontroller/Frontcontroller.php';

$fC = Singleton::getInstance('Frontcontroller');

Registry::register('apf::core', 'URLRewriting', true);
Registry::register('myapp', 'HTTP', 'http://' . $_SERVER['HTTP_HOST'] . substr(rtrim($_SERVER['PHP_SELF'], "/\\"),0,-10));

$fC->setContext('myapp');
$fC->setLanguage('de');

$fC->start('sites::myapp::pres::templates','layout');
Was mache ich falsch ?

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

Re: Kleine Applikation

Beitrag von dr.e. » 17.07.2010, 23:12:09

Hallo ByStones,

wie ich sehe hast du URL-Rewriting angeschaltet. Wie sieht denn deine URL aus? Ich vermute, der Parameter wird vom URL-Rewriting-Input-Filter nicht erkannt, weil die URL nicht in der Form /seite/news/ ist. Alles andere scheint korrekt.
Viele Grüße,
Christian

ByStones
Beiträge: 27
Registriert: 09.07.2010, 20:25:36

Re: Kleine Applikation

Beitrag von ByStones » 18.07.2010, 21:22:06

So rufe ich die Seite aber auf, und irgendiwe passiert nix, er nimmt immer das standart template...
Ich hab das mit dem FrontController gemacht, ändert das was ?

Nochmal so ne Anfängerfrage: Wo kommt die eigentliche Logik hin, doch nicht etwas in den DocumentController ?
Wie kann ich Seiten machen, die selber keinen Inhalt haben, sondern nur Sachen verrechnen und dann entsprechend weiterleiten ?

Grüße

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast