Drupal7: Eigene Startseite aus SQL-Anweisungen generieren

Für die Startseite verwende ich ein PHP-Skript, welches ich jetzt auch für Drupal 7 angepasst habe.

So sieht das Ergebnis aus

Das Skript soll folgendes bewirken:

  • Anzeige eines Anfangstextes (ohne Bild, da das Bild ja schon in der Slideshow ist) Dieser Text steht im Node 1
  • Falls Artikel von heute da sind, diese Anzeigen
  • Falls zukünftige Artikel (28-Tage voraus) diese Anzeigen
  • Die Vergangenheit anzeigen.

Vorgehensweise:

  • neuen Inhaltstyp anlegen für Node 1

    Struktur – Inhaltstypen – Neu : wnfStartseite

  • bei diesem Inhaltstyp

    Anzeigeeinste­llungen

    „Autor- und Datumsinformationen anzeigen“ ausschalten

    Der Benutzername des Autors und das Veröffentlichun­gsdatum sollen

    nicht angezeigt werden.

  • Über PHPAdmin in der Tabelle node das Feld typ für node 1

    auf wnfstartseite setzen

  • Module – PHP-Filter aktivieren
  • Neue Seite anlegen:

    Den Inhalt der beiliegenden Datei in den Body kopieren

  • Text-Format „PHP-Code“ einstellen
  • Speichern
  • Konfiguration – System – Websiteinforma­tionen

    Standardstartseite auf die eben angelegte Seite stellen

<?php

function anzeige_ohne_caption($sql){
  $result = db_query_range($sql,0,10);
  foreach ($result as $record) {
    $node=node_load($record->nid);
    $node->title = '';
    $anzeige = node_view($node, 'full');
    $rendered = render($anzeige);
    print $rendered;
  }
}

function anzeige($sql,$caption=''){
  $result = db_query_range($sql,0,10);
  if (($result->rowCount()>0) and ($caption<>'')) {
    echo '<hr />';
    echo '<h2>'.$caption.'</h2>';
    }
  foreach ($result as $record) {
    //$rendered_teaser = render(node_view(node_load($record->nid), 'teaser'));
    $rendered_teaser = render(node_view(node_load($record->nid), 'full'));
    print $rendered_teaser;
  }
}

// Das Intro anzeigen
$sql = "SELECT * FROM {node} WHERE nid=1 ORDER BY created ASC";
anzeige_ohne_caption($sql);

// Die heutigen Termine anzeigen
$sql = "SELECT * FROM {node} WHERE type = 'article' AND status = 1 AND nid<>1  AND promote=1 AND (DATE(FROM_UNIXTIME(created))=CURDATE() OR sticky=1) ORDER BY created ASC";
anzeige($sql,'Heute in Niederfrohna');

//Zukunft anzeigen 28 Tage
$sql = "SELECT * FROM {node} WHERE type = 'article' AND status = 1 AND nid<>1  AND promote=1 AND DATE(FROM_UNIXTIME(created))>CURDATE() AND  FROM_UNIXTIME(created)<DATE_ADD(CURDATE(),INTERVAL 28 DAY)
ORDER BY created ASC";
anzeige($sql,'Die nächsten Tage in Niederfrohna');

//Vergangenheit anzeigen
$sql = "SELECT * FROM {node} WHERE type = 'article' AND status = 1 AND nid<>1  AND promote=1  AND DATE(FROM_UNIXTIME(created))<CURDATE() AND sticky<>1 ORDER BY created DESC";
anzeige($sql,'Das war los in Niederfrohna');

?>
Tags: