Unterschiedliche Artikel-Arten

Hier können Probleme und alles andere in Deutscher Sprache gelöst werden.
Post Reply
WATCHDOG
Regular
Posts: 21
Joined: Wed May 14, 2008 11:04 pm

Unterschiedliche Artikel-Arten

Post by WATCHDOG »

Hallo,

wie gehe ich am besten vor, wenn ich folgendes erreichen möchte:

es gibt unterschiedliche Klassen von Artikeln, also z.B. "News" und "Berichte". News werden von jemand anders eingepflegt als Berichte, News erscheinen viel öfter, Berichte nur wöchentlich. Vielleicht wird es noch weitere Klassen von Artikeln geben.

Beide Artikel-Arten können Kategorien zugeordnet werden.

Auf der Startseite sollen nun in unterschiedlichen Bereichen die jeweils neuesten Artikel für jede Artikel-Klasse aus den zugeordneten Kategorien an unterschiedlichen Stellen erscheinen.

Um das zu verdeutlichen: stellt Euch einfach eine 4 x 4 - Tabelle vor:

Spalte links oben -> 5 neueste News aus Kategorie A
Spalte rechts oben -> 5 neueste Berichte aus Kategorie A
Spalte links unten -> 10 neueste News aus Kategorie B
Spalte rechts unten -> 10 neueste Berichte aus Kategorie B

Wie sollte ich vorgehen? ich kann bei NULL anfangen, hab also die Möglichkeit, es von Anfang an "richtig" zu machen, daher erlaube ich mir mal hier zu fragen nach der "best practice" für sowas.

Danke!
yellowled
Regular
Posts: 7111
Joined: Fri Jan 13, 2006 11:46 am
Location: Eutin, Germany
Contact:

Re: Unterschiedliche Artikel-Arten

Post by yellowled »

WATCHDOG wrote:Auf der Startseite sollen nun in unterschiedlichen Bereichen die jeweils neuesten Artikel für jede Artikel-Klasse aus den zugeordneten Kategorien an unterschiedlichen Stellen erscheinen.
Du willst wahrscheinlich ein Template im Magazin-Stil. Allzuviele davon gibt es für s9y derzeit nicht - eigentlich nur Mimbo, zu finden über Spartacus.

Gibt's eine Seite, auf der es so ähnlich oder genauso gemacht wird, wie Du es Dir vorstellst?
WATCHDOG wrote:Spalte links oben -> 5 neueste News aus Kategorie A
Spalte rechts oben -> 5 neueste Berichte aus Kategorie A
Spalte links unten -> 10 neueste News aus Kategorie B
Spalte rechts unten -> 10 neueste Berichte aus Kategorie B
Das ist nicht nur sehr "speziell", sondern erschwert es auch ungemeint, das Ganze evtl. über Plugins zu lösen. Theoretisch hättest Du z.B. über das Plugin "Show entries in siderbar" ... aber letztlich ist das alles Quatsch und meines Erachtens nur halbgar.

Nebebei: Meinst Du wirklich oben jeweils die neuesten 5, unten die neuesten 10 - oder doch eher oben 1-5, unten 6-15?
WATCHDOG wrote:Wie sollte ich vorgehen? ich kann bei NULL anfangen, hab also die Möglichkeit, es von Anfang an "richtig" zu machen, daher erlaube ich mir mal hier zu fragen nach der "best practice" für sowas.
Meines Erachtens ist das vernünftig[tm] nur über ein individuelles Template zu machen. Wobei es sicherlich auch über verschiedene Plugins (Show entries in sidebar, Newsbox etc. pp.) zu lösen ist, aber meiner Ansicht nach ist das der schmerzhaftere Weg.

Just my two cents,
YL
yellowled
Regular
Posts: 7111
Joined: Fri Jan 13, 2006 11:46 am
Location: Eutin, Germany
Contact:

Re: Unterschiedliche Artikel-Arten

Post by yellowled »

yellowled wrote:eigentlich nur Mimbo, zu finden über Spartacus
Mit Multicolor könnte es auch gehen.

YL
WATCHDOG
Regular
Posts: 21
Joined: Wed May 14, 2008 11:04 pm

Re: Unterschiedliche Artikel-Arten

Post by WATCHDOG »

Hi, danke erstmal für die schnelle Antwort.

also das template würde ich mir gerne selber stricken, ich suche eher nach einem Hinweis für die richtige Vorgehensweise. Dennoch guck ich mir das mal an, was Du mir da empfohlen hast, danke!

Vielleicht hab ich mich nicht deutlich genug ausgedrückt - das, was ich da will, gibts eigentlich auf jeder besseren News-Site, z.B. http://www.washingtonpost.com/

Da gibts auch mehrere unterschiedliche Klassen von Artikeln, die in Ihrem eigenen Seitenbereich gerendert werden. Also nicht nur eine Klasse "Blogeintrag", sondern "News", "Opinions", "Holiday Guide" usw. - ist eigentlich nix kompliziertes oder spezielles, dachte ich zumindest.

Muss nur wissen, wie ich Blogeinträge sinnvoll unterscheiden kann - das wäre womöglich über die Kategorien zu machen, vielleicht ist das aber auch ein Missbrauch, weil sich Kategorien ja eher auf den Inhalt beziehen und nicht auf die Form - möglicherweise gibts da was anderes?

Na und dann muss ja irgendwo im template nur noch sowas wie

render_article(kategorie="x",anzahl=10)

stehen (pseudo-code), dachte ich zumindest.

Das Beispiel mit den Spalten war schon richtig, beachte bitte den konzeptionellen Unterschied zwischen "News" und "Bericht".
yellowled
Regular
Posts: 7111
Joined: Fri Jan 13, 2006 11:46 am
Location: Eutin, Germany
Contact:

Re: Unterschiedliche Artikel-Arten

Post by yellowled »

WATCHDOG wrote:Na und dann muss ja irgendwo im template nur noch sowas wie

render_article(kategorie="x",anzahl=10)

stehen (pseudo-code), dachte ich zumindest.
Klar. {serendipity_fetchPrintEntries} - siehe http://www.s9y.org/78.html.

YL
WATCHDOG
Regular
Posts: 21
Joined: Wed May 14, 2008 11:04 pm

Post by WATCHDOG »

aha, also sowas in der Art dachte ich mir doch, sieht ganz gut aus.

Aber ist die Benutzung von Kategorien die gängige Art und Weise, unterschiedliche Klassen von Texten zu differenzieren? Kategorien würden damit ja zweierlei Bedeutungen bekommen: ein inhaltliches Unterscheidungsmerkmal und ein Merkmal zur Unterscheidung der Form von Artikeln... also ich vermute, das wäre dann Missbrauch?

Andersrum gefragt: hat S9Y nur ein einziges Modell für "Artikel"? Ist es nicht möglich, eine eigene, neue Artikel-Klasse zu definieren?

Also sowas wie "class article_news extends article" (pseudocode) ???
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Post by garvinhicking »

Hi!
Andersrum gefragt: hat S9Y nur ein einziges Modell für "Artikel"? Ist es nicht möglich, eine eigene, neue Artikel-Klasse zu definieren?
Serendpity hat sogar unendlich viele Arten, es gibt die "Custom Entryproperties". Darüber können beliebige Artikelattribute gespeichert werden, die separat abgefragt und ausgegeben werden können unda uch in der {fetchPrintEntries} funktion als filter genutzt werden.

Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
WATCHDOG
Regular
Posts: 21
Joined: Wed May 14, 2008 11:04 pm

Post by WATCHDOG »

ah, ok, das bringt mich doch schon auf die richtige Spur, danke. mal sehen, wie weit ich damit komme. Gibts da irgendeine Falle zu beachten? Was passiert z.B., wenn diese "Custom Entryproperties" zukünftig mal geändert werden? Migriert die s9y dann von alleine oder verliert man dann alle alten Artikel? Nur ein spontaner Gedanke, sowas halt mein ich, Probleme, die man so hat im Laufe der Jahre, das übliche... :)
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Post by garvinhicking »

Hi!

Inwiefern meinst du "mal geändert"? Der s9y Kern wird dort nichts veärndern, und da die properties "custom" sind bist du selbst über dein template dafür verantwortlich, dass sie sich nicht ändern.

Serendipity ist extrem auf Kompatibilität hin entwickelt. Solange ich ein Wörtchen mitzureden habe wird es nie dazu kommen, dass ein Blogger irgendwas verliert, Artikel neu machen muss oder Pluginprogrammierung total hinfällig wird. Das ist auch in der Vergangenheit noch nie vorgekommen, sogar als wir von PHP-Templates auf Smarty umgestiegen sind gab (und gibt) es einen Rückwärts-Kompatibilitätsmodus. :-)

Viele Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
WATCHDOG
Regular
Posts: 21
Joined: Wed May 14, 2008 11:04 pm

Post by WATCHDOG »

ok, ich muss da ne Verständnisfrage stellen: wie hast Du diese "Custom Entryproperties" konkret umgesetzt? Werden da neue Felder in einer Tabelle angelegt, die an die Artikel-ID gebunden sind? Oder wird eine Art Artikel-Template daraus generiert, welches der Benutzer dann wählen kann?
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Post by garvinhicking »

Hi!

Es gibt ne einfache Datenbanktabelle serendipity_entryproperties mit "id", "name" und "value". Da kann also quasi alles reingepackt werden und wird später als Variable unter dem Namen verfügbar, wie man es in der Datenbanktabelle eingetragen hat. Also so wie Du vermutest, genau.

grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
WATCHDOG
Regular
Posts: 21
Joined: Wed May 14, 2008 11:04 pm

entryproperty als radio button und / oder als checkbox

Post by WATCHDOG »

ok, nach kleiner weihnachtspause wieder am Ball. Gutes 2009 übrigens für alle!

Also ok, die entryproperties tabelle ist einfach, habs gesehen.

Frage: wie mache ich daraus eine checkbox im template?

In einem Fall ist das schon so - sticky postings. Hab aber nicht finden können, wie das umgesetzt wird in den Admin Templates - kannst Du mir sagen, wo ich die relevante Stelle im Code finde?

Frage 2: wie mache ich daraus radio boxen?

Das beinhaltet dann leider auch noch was anderes: wie kann man dafür sorgen, dass sich zusätzlich auf diese Weise einem Artikel angefügte Eigenschaften gegenseitig ausschliessen ("mutual exclusion")?

Sowas auf template-ebene zu machen wäre zwar momentan für mich ein akzeptabler hack, aber wenn die Exklusivität im Backend nicht ersichtlich ist, wäre es wohl eine böse Falle...

Danke!
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Re: entryproperty als radio button und / oder als checkbox

Post by garvinhicking »

Hi!
Frage: wie mache ich daraus eine checkbox im template?
Genauso wie ein text-input field. Schau dir einfach mal die serendipity_event_entryproperties.php an... eigentlich kannst du das HTML dort auch genauso im Template einsetzen.

Gilt für radiobuttons dann exakt so.
Das beinhaltet dann leider auch noch was anderes: wie kann man dafür sorgen, dass sich zusätzlich auf diese Weise einem Artikel angefügte Eigenschaften gegenseitig ausschliessen ("mutual exclusion")?
Das musst du dann entsprechend mit javascript lösen.

Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
WATCHDOG
Regular
Posts: 21
Joined: Wed May 14, 2008 11:04 pm

Post by WATCHDOG »

mit javascript???

nein, da scheint ein grundlegendes missverständnis vorzuliegen. mit "backend" meinte ich das backend, welches die daten speichert - sorry.

Wenn es eine Exklusivität in der Kennzeichnung der Daten geben soll, müsste das auch im Datenmodell ersichtlich sein. Das ist aber scheinbar in den entry_properties nicht angedacht gewesen? Eigentlich schade, denn das ist ja gleich der zweite Gedanke, den man hat bei der Nutzung dieses Features.

Da Du ja bereits mysql als Datenbank-backend nutzt und sogar Postgres unterstützt, könntest Du solche Features recht einfach einbauen, wenn Du die Möglichkeiten, die eine Datenbank bietet, auch nutzt. Nur zum Daten-Sammeln und wieder auslesen braucht man eine DB eigentlich nicht, dafür sind moderne Dateisysteme völlig ausreichend.

Da gibts noch erheblichen Raum zur Optimierung - Frage: wie abstrakt ist denn das Datenmodell? Also ist das konsequent gekapselt? Es scheint ja schon sowas wie einen DB-Layer zu geben, aber ich finde immer noch verdächtig viele "select" statements, wenn ich die mal so im Code suche... hmmm.... auweia, vor allem auch in den Plugins gibt es direkten Zugriff auf die DB mit sql... warum denn sowas? Plugins sollten doch abstrakt modelliert sein, in dieser Abstraktion besteht doch überhaupt der Sinn von Plugins - Kapselung und leichte Erweiterbarkeit...

hmm... nunja, muss ja in der Praxis nicht wirklich schlimm sein, mal schauen, was ich noch so an Klöpsen finde :)
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Post by garvinhicking »

Hi!
WATCHDOG wrote:mit javascript???
Ja, klar - Du kannst nur über javascript wirklich sinnvoll direkt prüfen ob eine box angecheckt werden sollen darf oder nicht. Mit PHP könntest du das erst nach dem abschicken abfangen, das wäre zu spät.
Wenn es eine Exklusivität in der Kennzeichnung der Daten geben soll, müsste das auch im Datenmodell ersichtlich sein. Das ist aber scheinbar in den entry_properties nicht angedacht gewesen? Eigentlich schade, denn das ist ja gleich der zweite Gedanke, den man hat bei der Nutzung dieses Features.
Was meinst du mit Exklusivität denn genau, ich verstehe dein problem noch nicht.
Da Du ja bereits mysql als Datenbank-backend nutzt und sogar Postgres unterstützt, könntest Du solche Features recht einfach einbauen, wenn Du die Möglichkeiten, die eine Datenbank bietet, auch nutzt. Nur zum Daten-Sammeln und wieder auslesen braucht man eine DB eigentlich nicht, dafür sind moderne Dateisysteme völlig ausreichend.
Das ist eine pauschale Behauptung die jetzt hier erstmal garnichst zur Sache tut und unqualifiziert so nicht diskutiert werden kann. Da darfst du ruhig genauer werden.
Da gibts noch erheblichen Raum zur Optimierung - Frage: wie abstrakt ist denn das Datenmodell? Also ist das konsequent gekapselt? Es scheint ja schon sowas wie einen DB-Layer zu geben, aber ich finde immer noch verdächtig viele "select" statements, wenn ich die mal so im Code suche...
Richtig, wir nutzen aus Performancegründen und zur vollsten Flexibilität SQL-Abfragen.
hmmm.... auweia, vor allem auch in den Plugins gibt es direkten Zugriff auf die DB mit sql... warum denn sowas? Plugins sollten doch abstrakt modelliert sein, in dieser Abstraktion besteht doch überhaupt der Sinn von Plugins - Kapselung und leichte Erweiterbarkeit...
Programmier mal dein eigenes Blogsystem, lass es 7 Jahre aktiv sein, und dann schaust du mal ob das System nach 7 Jahren aktuellen Ansprüchen genüge tut. Du wirst rausfinden,d ass man ein System quasi alle 3 Jahre nochmal von neu programmieren müsste um etwas perfekt zu implementieren.

Bei Software kommt es nicht nur auf Objekte, Er-Modelle und Co an, sondern dass Funktionen implementiert sind, funktionieren, erweiterbar sind, kompatibel sind, API-Zugriff erlauben, für Programmierer leicht verständlich und anpassbar sind.

Du fragst, warum heutzutage Autos noch mehr als 8 Liter Sprit verbrauchen, owbohl es doch auch erwiesenermaßen mit Erdgas oder auch mit weniger als 5 Litern. Es gibt eine so perfekte Welt nicht, schon garnicht in der OpenSource-Welt.

Schau Dir mal WordPress an, da wirst du noch gröbere Schnitzer finden. Oder nimm Typo3. Jedes System, was über den einfachen Alpha-Status hinaus einsetzbar ist, geht heutztage Kompromisse ein.

Garvin.
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
Post Reply