5. Aufgabe – MVC mit PHP
Abgabe | 9. Januar | Punkte | 5 – 11 |
Einleitung
Splendr war mit Ihrer Arbeit zufrieden und möchte im nächsten Schritt einen funktionierenden Prototypen haben.
Um zukunftsfähig zu bleiben, ist von Anfang an eine gute Code-Struktur wichtig. Dazu sollen Sie ein Framework verwenden, das sich am MVC-Architekturmuster orientiert.
Sie können sich hierzu der modifizierten Versions eines kleinen PHP-Projekts namens Simple-MVC-Framework bedienen. Eine Einführung und den Code finden Sie unter Simple-MVC.
Andernfalls können Sie auch populäre Frameworks wie Laravel 1 (Empfehlung), Code Igniter oder Phalcon verwenden. Die Lernkurve ist hier flacher (a.k.a. ordentlicher Einarbeitungsaufwand), die Möglichkeiten aber größer und auch schwierigere Aufgaben lassen sich später elegant und schnell lösen.
Abgabe
Pushen Sie Ihren Code samt SQL-Dump in Ihr Git-Repo und stellen Sie Ihre Lösung über Ihre VM bereit. Sollten Sie eine Datenbank des Studi-Servers verwenden, denken Sie daran, ihr Datenbankpasswort (das auch das Passwort Ihres F4-Accounts ist) nicht zu committen oder für MySQL ein anderes Passwort festzulegen.
Aufgabe
Folgende Features sollen entwickelt werden:
Produktverwaltung – 4 Punkte
Benutzern soll es möglich sein, Produkte hinzuzufügen, anzuzeigen, zu ändern und zu löschen.
Suchfunktion – 1 Punkt
Auf allen Seiten soll ein Eingabefeld vorhanden sein, über das Produkte gesucht werden können. Hierfür reichen Teile des Namens oder der URL (siehe MySQL: Übereinstimmende Suchmuster).
Ergebnisse werden auf einer dedizierten Ergebnisseite angezeigt, beispielsweise /products/search/?q=suchbegriff
.
Zusatzfeatures
Bis zu vier der folgenden Features können zusätzlich entwickelt werden und geben jeweils einen bis drei Punkte extra.
Benutzerverwaltung – 3 Punkte
Besucher sollen sich einen Account mit einem einzigartigen Namen und einem Passwort anlegen und damit ein- und ausloggen können. Weitere Informationen finden Sie unter Authentifizierung mit PHP. Ein Rechtesystem – beispielsweise, welcher Benutzer welche Artikel bearbeiten darf – kann implementiert werden, muss aber nicht.
Bestätigungsmail mit Registrierungslink – 1 Punkt
Hat sich ein Benutzer registriert, wird sein Account nicht sofort freigeschaltet, sondern eine E-Mail an ihn verschickt. In dieser ist ein spezieller Link, der besucht werden muss, um die E-Mail-Adresse zu verifizieren und die Registrierung abzuschließen. Erst danach ist es möglich, sich einzuloggen.
Profile – 1 Punkt
Benutzer bekommen eine eigene Profil-Seite, die Sie nach der Registrierung mit Informationen füllen können. Dazu zählen:
- ihr echter Name,
- ihr Wohnort, zu dem eine Karte angezeigt wird und
- ein Profilbild, das über die Seite hochgeladen werden kann.
Boards – 1 Punkt
Beim Anlegen neuer Produkte soll ein Board ausgewählt werden können, auf dem das Produkt dann erscheint. Boards haben einen Namen und eine URL zu einem Übersichtsbild, werden immer mit der Anzahl der darin befindlichen Produkte angezeigt und sollen bearbeitet und gelöscht werden können. (Was in letzterem Fall mit den dazugehörigen Produkten passiert, ist Ihnen überlassen.)
Verbot populärer Passwörter – 1 Punkt
30% der AnwenderInnen verwenden eines der 10.000 meistgenutzen Passwörter. Dadurch kann womöglich leicht in ein Nutzerkonto eingedrungen werden, weswegen Ihre Anwendung bei dem Versuch, eines der Passwörter zu setzen, verweigern und eine entsprechende Warnung anzeigen sollte. Die entsprechende Liste finden Sie auf GitHub.
Tags – 1 Punkt
Es soll möglich sein, Produkten zusätzlich zu verschlagworten und Produkte durch diese Tags aufzufinden, beispielsweise über:
- eine spezielle Seite mit allen Tags,
- eine Liste aller Tags eines Benutzers auf seinem Profil oder
- eine Liste der am häufigsten benutzten Tags auf der Startseite.
Produkte übernehmen – 1 Punkt
Es soll möglich sein, die Produkte anderer Benutzer auf ein eigenes Board zu übernehmen.
Follow + News / Updates – 1 Punkt
Es soll möglich sein, anderen Benutzern zu folgen und auf einer speziellen Seite eine Liste der zuletzt von diesen Benutzern hinzugefügten Produkte zu bekommen.
Affiliate-Daten – 1 Punkt
Benutzern soll es möglich sein, Affiliate-Daten zu hinterlegen. Links dieser Benutzer zu entsprechenden Shops werden automatisch um die entsprechende Partner-ID erweitert. Bereits enthaltene Partner-IDs werden ersetzt. (Siehe bspw. partnernet.amazon.de)
Links scrapen – 1 Punkt
Es soll möglich sein, für Amazon o.ä. nur noch die URL eines Produkts angeben zu müssen und automatisch die restlichen Daten eingetragen zu bekommen. Dazu sollen automatisch Bezeichnung, Preis und – sofern vorhanden – ein Produktbild extrahiert werden.
OpenID-Authentifizierung – 1 Punkt
Es soll Benutzern möglich sein, sich auf der Seite über einen OpenID-Anbieter zu registrieren, wie z.B. auf Stack Overflow. (Hilfsseiten gibt es von Google+ (mit Beispielscode), Twitter, Facebook und GitHub.)
Empfehlungen – 1 Punkt
Benutzer sollen nach dem Hinzufügen eines Produkts darauf basierende Empfehlungen bekommen. (“Leute, die die dieses Produkt hinzugefügt haben, fügten auch folgende hinzu: …”)
Notifications – 1 Punkt
Benutzer sollen wöchentliche eine E-Mail mit Links zu beliebten Produkten bekommen.
Price-Alert – 1 Punkt
Es soll für Shops – z.B. Amazon – möglich sein, eine Benachrichtigung per Mail zu erhalten, wenn sich der Preis eines Produkts ändert. Dazu soll ein PHP-Script entwickelt werden, das über einen Cron-Job regelmäßig ausgeführt werden kann und alle relevanten Preise prüft. Es kann möglich sein, eine Preisgrenze anzugeben, ab der eine Benachrichtigung erwünscht ist.
Maps – 1 Punkt
Benutzern soll es möglich sein, Koordinaten zu Produkten zu hinterlegen und alle (oder n, wobei n > 5) auf einer Karte anzeigen zu lassen.
-
Ein paar Anleitungen finden Sie unter Code Bright, Laracasts und scotch.io. ↩