Webtechnologien Sommersemester 2019

5. Aufgabe – MVC mit PHP

Abgabe 9. Januar Punkte 5 – 11

✨ Schauen Sie sich auch die Sportvereins-Version dieser Aufgabe an! ✨

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.

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:

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:

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)

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.


  1. Ein paar Anleitungen finden Sie unter Code Bright, Laracasts und scotch.io