(gelöst/workaround) Views Group By - ich raff's nicht!
Eingetragen von codeherr (73)
am 28.08.2010 - 10:16 Uhr in
am 28.08.2010 - 10:16 Uhr in
Ich seh mal wieder den Wald vor lauter Bäumen nicht.
Was ich erreichen möchte, ist eine Auflistung, in der von jedem node.type genau einer, nämlich der aktuellste, Beitrag erscheint.
Ich habe so ziemlich alle Varianten durchprobiert, aber entweder erhalte ich Fehlermeldungen wegen ungültiger Queries oder ein Ergebnis, das nicht dem gewünschten entspricht.
Bevor ich mich lang ausbreite, findet sich bestimmt jemand, der genau sowas schon mal erfolgreich umgesetzt hat und mir verraten kann, wie :-)
- Anmelden oder Registrieren um Kommentare zu schreiben
Gerne, sobald ich das
am 03.09.2010 - 11:32 Uhr
Gerne, sobald ich das Probleme verstehe, bzw die anderen vielleicht auch.
View erstellen -> Node - Sortierkriterium -> z.B. Beitragsdatum
ungültige Queries wordurch?
Poste mal bitte ein paar mehr Infos
Drupal im Einsatz: Bachblueten-Ratgeber.de - Schuessler-Salze-Ratgeber.de - Tomaten24.de
coming soon: Selbstversorger.com - Bio-Lieferdienste.de
Subquery nötig
am 04.09.2010 - 14:04 Uhr
OK, etwas genauer.
1.) Welche Daten habe ich
Verschiedene Inhaltstypen (Kategorien), z.B. (fiktiv) "Berichte aus der Region", "Kochrezepte" und "Kolumne". In jeder Kategorie kommen laufend Beiträge hinzu.
2.) Was will ich erreichen?
Ich will mit möglichst einer einzigen View auf der Startseite pro Kategorie einen Teaser haben. Dieser soll auf den aktuellsten Beitrag in dieser Kategorie hinweisen.
3.) Was ist das Problem?
Ich bin natürlich inzwischen schon weiter und habe, da ich wie gesagt kein SQL-Anfänger bin, mal versucht, das, was ich vorhabe, in SQL abzubilden. Und dabei ist mir inzwischen auch klar geworden, daß ich das mit Views so nicht gelöst kriegen werde. Grund: Ich muß eine Unterabfrage machen, und das kann Views, wenn ich nichts übersehen habe, wohl nicht. Mein Query müßte nämlich (vereinfacht!) lauten:
SELECT * FROM (SELECT * FROM node ORDER BY sticky DESC, created DESC) AS sub GROUP BY type
Da ich ja in einem einzigen Query nicht erst sortieren und dann gruppieren kann (soweit mein SQL-Wissen denn reicht).
Kann ja aber sein, daß ich trotzdem was übersehe ;)
(Nachtrag: Im Moment helfe ich mir, indem ich einfach für jede der nicht allzuvielen Kategorien das Subquery manuell mit "LIMIT 1" als Anhangs-View gebaut habe und diese dann nacheinander an die Startseitenview hänge. Aber eleganter wäre ja auch nicht schlecht.)
xhtmlperljavascriptcssdelphivbaphp - und nu auch noch das!
Felder als Nodes ausgeben.
am 15.09.2010 - 13:31 Uhr
Soll das ein Node- oder Feldview sein?
Für den Fall eines Feldviews geht das ganz einfach. Als Gruppierung einfach den Inhaltstypen wählen und als Sortierung das Beitragsdatum angeben.
Wenn das ganze ein Nodeview sein soll, bleibst du einfach bei der gleichen Viewkonfiguration, fügst aber als Feld noch die NID hinzu.
Dann erstellst Du ein Template in deinem Theme "views-view-fields--[name des Views]--[name der Viewseite].tpl" (mehr Informationenen findest Du auch unter dem Abschnitt "Theme" in den Vieweinstellungen). In das Template kommt dann folgender Code rein:
<?php
// Deswegen die NID als Feld
$this_node=node_load($row->nid);
print node_view($this_node);
?>
Ich hab das so
am 15.09.2010 - 13:46 Uhr
Ich hab das so http://www.drupalcenter.de/node/27812 gelöst
Sepp
Ich hab das so
am 15.09.2010 - 13:46 Uhr
Ich hab das so http://www.drupalcenter.de/node/27812 gelöst
Sepp
Ich hab das so
am 15.09.2010 - 13:46 Uhr
Ich hab das so http://www.drupalcenter.de/node/27812 gelöst
Sepp
docmiller schrieb Als
am 15.09.2010 - 14:35 Uhr
Als Gruppierung einfach den Inhaltstypen wählen und als Sortierung das Beitragsdatum angeben.
Das führt bei mir aber zu folgendem Ergebnis (in der Vorschau) (fiktiv):
Typ: Artikel
- Artikel 1
- Artikel 2
- Artikel 3
Typ: Seite
- Seite 1
- Seite 2
...
Ich möchte aber:
- Artikel 1
- Seite 1
...
Mit "gruppieren" meinst du doch Basiseinstellungen -> Design -> Einstellungen? Oder wo kann man das noch?
Und selbst wenn es eine "Group by" funktion gibt, bin ich doch sofort wieder beim Ausgangsproblem: SQL gruppiert erst und sortiert dann (-> Subselect nötig bzw. Subview) Ich habe dann zwar je eine Zeile pro Nodetyp, aber eben nicht zwingend die aktuellste. Aber ich probiere es gern aus, wenn du mir sagen kannst, wo das mit dem Gruppieren noch mal an anderer Stelle geht :-)
xhtmlperljavascriptcssdelphivbaphp - und nu auch noch das!
sepp68 schrieb Ich hab das so
am 15.09.2010 - 14:41 Uhr
Ich hab das so http://www.drupalcenter.de/node/27812 gelöst
Da geht es ja quasi um Sub-Selects im weitesten Sinne. Muß ich mir mal anschauen, ob ich das für meinen Fall irgendwie adaptieren kann. Sieht jedenfalls nicht verkehrt aus!
xhtmlperljavascriptcssdelphivbaphp - und nu auch noch das!
codeherr][quote=docmiller
am 15.09.2010 - 14:44 Uhr
Ich möchte aber:
- Artikel 1
- Seite 1
...
Entschuldige bitte, da habe ich Dich wohl misverstanden. Hast Du schon http://drupal.org/project/views_groupby versucht?
Views GroupBy
am 15.09.2010 - 14:59 Uhr
Entschuldige bitte, da habe ich Dich wohl misverstanden. Hast Du schon http://drupal.org/project/views_groupby versucht?
Kein Problem, jeder Hilfsversuch ist ja willkommen :-)
Ja, habe ich probiert. Daher der Titel des Threads (auch wenn das nicht zwingend eindeutig erkennbar ist). Der Punkt ist: Views ist ja (im tiefsten Herzen und abgesehen von den vielen schönen Extras) nichts anderes als ein click-and-build für "Views" wie man sie auch aus dem händischen SQL kennt. Es kann also die Regeln von SQL nicht brechen. Das Modul implementiert seinerseits bisher schlichtweg nicht die Thematik "Subselect".
Ich habe mir übrigens schon seit ein paar Tagen als (im Grunde für meine Problematik genau funktionierenden) Behelf einen Views-PHP-Filter eingebaut:
$myIds = array();
$res =
db_query(
"select nid from (select * from node where promote <> 0 and status <>0 order by sticky desc, created desc) as pre group by type"
);
while ($row = db_fetch_array($res)) {
$myIds[] = $row['nid'];
}
return $myIds;
(Weshalb ich das Thema im Grunde eigentlich mal besser auf gelöst setzen sollte, glaube ich. Auch, wenn ich weiterhin an "saubereren" Ansätzen interessiert wäre.)
xhtmlperljavascriptcssdelphivbaphp - und nu auch noch das!