Archiv der Kategorie: Allgemein

Seitenaufrufe anzeigen mit dem Statistik-Modul

Man kann auch in Drupal anzeigen lassen, wie oft eine Seite schon aufgerufen wurde, das ist nur ein bisschen versteckt. Zuerst einmal muss das Statistik-Modul aktiviert werden, das geht unter Module/Statistics. Anhaken, Speichern, dann unter Konfiguration die Option Inhaltsabrufe zählen aktivieren. Dann in die Berechtigungen gehen und falls gewünscht unter Statistics/Inhaltsaufrufe sehen diese Option auch für Gast und authentifizierten Benutzer aktivieren. Das sollte es gewesen sein.

Kurzer Blick auf die Datenbank: Drupal protokolliert jetzt in der Tabelle node_counter mit, welche nid wie oft, wie oft am aktuellen Tag und wann zuletzt aufgerufen wurde:

node_counter
node_counter

Die Anzahl der Aufrufe sollte jetzt auch unterhalb jedes Inhalts erscheinen.

aufrufe
aufrufe

Nicht ins Bockshorn jagen lassen, beim ersten Aufruf erscheint hier noch nichts, klassischer Offset-by-one-Fehler. Erst beim zweiten Aufruf der selben Seite taucht der Zähler auf.

Komplettes Zugriffsprotokoll

Man kann auch unter Konfiguration/Statistik das komplette Zugriffsprotokoll aktivieren, aber da sollte man sich auf einer Seite mit einigermassen Traffic auch sicher sein, dass man diese Informationen auch wirklich braucht, sonst bläht das die Tabelle accesslog auf wie nix. Mir reicht die kleine Lösung oben, die in der node_counter protokolliert wird, völlig aus.

Anzeige der beliebtesten Inhalte

Dafür gibts einen fertig konfigurierten View „Beliebte Inhalte“, der aktiviert werden kann, wenn das Statistik-Modul eingeschaltet ist. Das sieht dann so aus:

beliebte_inhalte
beliebte_inhalte

Ich habe zwar noch nicht rausgefunden, ob und wie man die Anzahl der angezeigten Inhalte steuern kann, aber das ist doch schon mal ganz nett. Man kann sich natürlich auch einen individuellen View basteln, in dem man die Anzahl der anzuzeigenden Inhalte selber konfigurieren kann, die Anzahl der Aufrufe ist über das Feld „Content statistics: Total views“ verfügbar.

Kleiner Exkurs: Datalist in HTML 5

Einleitung – es geht erstmal nicht um Drupal direkt

Eigentlich wollte ich nur eine etwas komfortablere Rezeptsuche realisieren und hab auch mal ein bisschen mit AJAX experimentiert, aber dann bin ich an einem neuen HTML5-Feature hängengeblieben und habe da erstaunliche Ergebnisse erzielt, die will ich euch nicht vorenthalten. Das hat jetzt erstmal noch nix direkt mit Drupal zu tun, aber es ist eine Voraussetzung für die Realisierung des nächsten Projekterls mit dem Arbeitstitel „Rezeptsuche mit Ajax und Autocomplete“, das kommt dann im nächsten Beitrag.

HTML5 Datalist

Die Spezifikation für die Datalist kann man z.B. hier bei w3schools nachlesen, es ist eigentlich ganz einfach und funktioniert prinzipiell wie ein normales Dropdown-Feld mit der zusätzlichen Funktionalität Auto-Vervollständigen. Man kann die Datalist auch prima aus der Datenbank füttern, das hab ich hier mal mit meinen Rezepten in Drupal gemacht. Man gibt dem Input-Feld die Id der Liste mit, und schließt die Liste der Optionen in die <datalist>-Tags ein:

 $query = db_query("SELECT * FROM node WHERE type like 'rezept' AND status = 1 ORDER BY title");
 $anzahl = $query->rowCount();
 echo "<h2>".$anzahl." Rezepte insgesamt </h2><br>";
 $records = $query->fetchAll();
 
//Beginn Formular 
 echo "<form action='#form' method='post'>";
 echo "<input type = 'text' name='kategorien' list='kategorien' />";
 echo "<datalist id='kategorien'>";

 foreach ($records as $record){
 echo "<option value='".$record->title."'>";
 }
 
 echo "</datalist>"; 
 echo "</form>";
//End Formular

Das Ganze sieht jetzt in jedem Browser unterschiedlich aus und hat auch unterschiedliche Funktionalitäten.

Firefox Quantum

Ich habe zunächst nur mal den Buchstaben b eingegeben. Es klappt ein mickriges Listenfeld aus, aus dessen Inhalt zunächst noch nicht klar wird, nach welchen Kriterien da gesucht wird, es fängt mit Rezepten mit dem Anfangsbuchstaben a an:

quantum1
quantum1

Erst wenn man einen zweiten Buchstaben eingibt, ich nehm hier mal b, erhellt sich die Lage etwas. Anscheinend werden alle Einträge angezeigt, die den String ba enthalten:

quantum_ba
quantum_ba

Nehmen wir mal noch ein paar Buchstaben und suchen nach backen:

quantum_backen
quantum_backen

In der Tat, alle Rezepte in deren Titel backen vorkommt. Das heisst aber, dass man im Zweifelsfall verdammt viele Buchstaben eingeben muss, bis man die Auswahl auf ein Rezept eingrenzen kann. Gewöhnungsbedürftig, um es mal milde auszudrücken.

Chrome 65.0.3325.181

Hier siehts am Anfang auch ganz schön verwirrend aus, man bekommt nach Eingabe des b erstmal das letzte Ende der Liste zu sehen:

chrome_b
chrome_b

Erst nach Eingabe weiterer Buchstaben wird klar, dass auch hier nach einer im Titel enthaltenen Kombination gesucht wird.

chrome_back
chrome_back

Wenigstens kriegt man hier die Liste in einer übersichtlichen Breite angezeigt, das ist doch immerhin etwas.

IE 10

Machts wieder ganz anders. Eingabe des Buchstaben b bringt alle Rezepte, die mit b anfangen:

ie_b
ie_b

Diese Liste kann man mit der Eingabe weiterer Buchstaben genauer eingrenzen, ba liefert brav alle Rezepte die mit dieser Kombi anfangen:

ie_ba
ie_ba

Tscha, so unterschiedlich wird die Datalist von den Browsern umgesetzt. Wenn man’s weiss…

Ein einfaches Drupal-Theme erstellen 2: das Styling

Noch sieht unser Theme etwas traurig aus, aber das werden wir gleich ändern.

ohnestyles
ohnestyles

Ich passe erstmal die Schriftarten an und vergebe für h1-h3 Kapitälchen:

body {
  margin: 0;
  padding: 0;
  font-family: Helvetica;
  font-size: 14px;    
  font-weight: normal;
  line-height: 24px;
  color: #43473b;
}


h1, h2, h3, h4, h5, h6 {
  font-family: Times;
  font-weight: normal;
  color: #43473b;
}

h1 { font-size: 45px; font-variant:small-caps;}
h2 { font-size: 30px; font-variant:small-caps;}
h3 { font-size: 22px; font-variant:small-caps;}

a { color: #43473b; 
    text-decoration: none;
}
a:hover { color: #fc737b; 
        }

Dann gehts an die page.tpl.php, aus der entnehmen wir nämlich, welche divs für welche Komponenten vorgesehen sind.

Anfangen tut das Ganze mit gleich zwei umgebenden divs für die Seite:

<div id="page-wrapper"><div id="page">

Ich setze mal nur den page-wrapper auf 1260px. Dann kommt die div header, da wirds schon interessanter:

<div id="header"><div class="section clearfix">

      <?php if ($logo): ?>
        <a href="<?php print $front_page; ?>" title="<?php print t('Home'); ?>" rel="home" id="logo">
          <img src="<?php print $logo; ?>" alt="<?php print t('Home'); ?>" />
        </a>
      <?php endif; ?>

      <?php if ($site_name || $site_slogan): ?>
        <div id="name-and-slogan">
          <?php if ($site_name): ?>
            <?php if ($title): ?>
              <div id="site-name"><strong>
                <a href="<?php print $front_page; ?>" title="<?php print t('Home'); ?>" rel="home"><span><?php print $site_name; ?></span></a>
              </strong></div>
            <?php else: /* Use h1 when the content title is empty */ ?>
              <h1 id="site-name">
                <a href="<?php print $front_page; ?>" title="<?php print t('Home'); ?>" rel="home"><span><?php print $site_name; ?></span></a>
              </h1>
            <?php endif; ?>
          <?php endif; ?>

          <?php if ($site_slogan): ?>
            <div id="site-slogan"><?php print $site_slogan; ?></div>
          <?php endif; ?>
        </div> <!-- /#name-and-slogan -->
      <?php endif; ?>

      <?php print render($page['header']); ?>

    </div></div> <!-- /.section, /#header -->

Zuerst wird das Logo ausgegeben, das ist unser Header-Bild. Dann kommt der Name der Seite und falls vorhanden der Slogan. Man darf sich hier ein wenig über das div-Gestrüpp wundern, das geht sicher auch einfacher, aber wir lassens jetzt mal so wie es ist. Ich setze mal nur eine Hintergrundfarbe für den Header:

#header {background-color: #bfd0ea; 
        }

Und ich schiebe den Block für die Suche nach rechts, wie der heißt habe ich mit Chrome rausgefieselt:

block-search-form
block-search-form

Das zugehörige css ist:

#block-search-form{float: right;
                    padding: 10px;}

Jetzt kriegt der header noch eine Hintergrundfarbe:

#navigation {    background-color:#bfd0ea;    
                }

Und beim Hauptmenü passe ich noch die Schrift an:

#main-menu {
    font-family: Times;
    font-variant:small-caps;
    font-size:24px;
    
    }

Das Sekundärmenü möchte ich in der Fußzeile haben, da packe ich mir den ganzen Block in der page.tpl,php und schiebe ihn nach der div footer hin:

<div id="footer"><div class="section">
      <?php print render($page['footer']); ?>
    </div>
    
    <?php print theme('links__system_secondary_menu', array('links' => $secondary_menu, 'attributes' => array('id' => 'secondary-menu', 'class' => array('links', 'inline', 'clearfix')), 'heading' => t('Secondary menu'))); ?>
      
    </div> <!-- /.section, /#footer -->

Die sidebar-first sitzt noch nach dem content, die klemme ich mir auch im Ganzen:

<?php if ($page['sidebar_first']): ?>
        <div id="sidebar-first" class="column sidebar"><div class="section">
          <?php print render($page['sidebar_first']); ?>
        </div></div> <!-- /.section, /#sidebar-first -->
      <?php endif; ?>

und schiebe sie vor die div content. Jetzt positionieren wir noch sidebar-first, content und sidebar-second nebeneinander:

#content {        padding: 20px;
                width: 600px;
                float:left;
                
}                
                
#sidebar-first {width: 300px;
                float:left;
                padding: 10px;
                }
                
#sidebar-second{
    width:300px;
    float: left;
}

Das sieht jetzt schon im Ganzen gut aus:

seitentitel-kleingeschrieben
seitentitel-kleingeschrieben

Was mich noch stört: wenn man auf eine andere Seite als die Startseite wechselt, wird der Seitentitel klein geschrieben, das hätte ich gern noch anders. Dafür genügt ein kleiner Eingriff in der page.tpl.php, in der ist hinterlegt, dass der Seitentitel nur in h1 formatiert wird, wenn der Content Title leer ist

<?php if ($site_name): ?>
            <?php if ($title): ?>
              <div id="site-name"><strong>
                <a href="<?php print $front_page; ?>" title="<?php print t('Home'); ?>" rel="home"><span><?php print $site_name; ?></span></a>
              </strong></div>
            <?php else: /* Use h1 when the content title is empty */ ?>
              <h1 id="site-name">
                <a href="<?php print $front_page; ?>" title="<?php print t('Home'); ?>" rel="home"><span><?php print $site_name; ?></span></a>
              </h1>
            <?php endif; ?>
          <?php endif; ?>

Dafür editiere ich den ersten Block  hinter der der Zeile

<?php if ($title): ?>

und setze einen h1-Tag:

<div id="site-name"><strong>
                <h1><a href="<?php print $front_page; ?>" title="<?php print t('Home'); ?>" rel="home"><span><?php print $site_name; ?></span></a></h1>
              </strong></div>

Das wars! Jetzt wird der Seitentitel immer h1 formatiert.

Mir ist das Styling jetzt schön genug, ich lass es so, es sieht meinem TwentyFourteen ähnlich genug.

finish
finish

Ich hoffe, ihr habt soviel Spaß beim Nachbauen wie ich beim Basteln!

Ein einfaches Drupal-Theme erstellen

Zu diesem Thema gibt es einige gute Tutorials im Netz, ich schreibs aber hier trotzdem nochmal komprimiert auf, nur die Basics, es ist nämlich nicht besonders schwierig. Ich baue hier so in etwa das Layout von WordPress TwentyFourteen nach, das ist mein Lieblings-Theme und schön schlicht und ohne Schnickschnack.

Die Ordner-Struktur

Man legt in [drupalinstallation]/sites/all/themes einen neuen Ordner an und benennt ihn mit dem Namen des neuen Themes (ohne Umlauts und Sonderzeichen), bei mir heisst er evi2014. In diesem Ordner werden zwei Unterordner angelegt, css und templates.

Die unbedingt notwendigen Dateien

Als Seitenvorlage kopiert man sich aus [drupalinstallation]/modules/system die Datei page.tpl.php, die kommt in den Ordner templates. In den Ordner css legt man eine style.css, die kann fürs erste noch leer sein.

In den Ordner evi2014 kommt jetzt die Datei evi2014.info, die hat Minimum folgenden Inhalt:

name = Evis2014
description = Angelehnt an mein Lieblings-WordPress-Theme TwentyFourteen.
core = 7.x
screenshot = screenshot.png
stylesheets[all][] = css/style.css

Ist eigentlich selbsterklärend, name und description sind frei wählbar, und die Drupalversion core= sollte stimmen. Wichtig ist hierbei, dass der Verweispfad auf die style.css stimmt, und dass die screenshot.png im selben Verzeichnis liegt.

Jetzt brauchen wir noch die tatsächliche Datei screenshot.png, die sollte ca.291×150 px gross sein und eine Vorschau unseres Themes enthalten.

Dann fehlt noch die logo.png, die brauchen wir für das Headerbild, bei mir ist sie 1260 px breit weil ich dafür die ganze Breite haben möchte.

Das wars schon! Jetzt sollte unser neues Theme bereits unter Design->Themes auftauchen und kann aktiviert werden.

aktiviert
aktiviert

Das sieht jetzt alles noch ein bisschen dürftig aus, unsere style.css ist ja noch leer.

ungestylt
ungestylt

Aber unsere Hauptkomponenten sind schon vorhanden, als da wären Das Hauptmenü (selbst erstellt), das Sekundärmenü (default von Drupal), und weiter unten (im Screenshot leider nicht zu sehen) unsere Blöcke. Die Blockvorschau sieht so aus:

vorschau
vorschau

Diese Einteilung kommt aus der page.tpl.php, mit der arbeiten wir weiter. Wo wir hinwollen, ist dieses dreispaltige Layout:

dreispaltig
dreispaltig

In die linke Seitenleiste kommen meine neuesten Rezepte (ein View), in die Mitte der Content, und rechts meine Rezeptkategorien (auch ein View.

Und der Weg dahin führt über die style.css. Das machen wir aber in einem neuen Beitrag.

Von Drupal nach WordPress: der Vollständigkeit halber

Es kann ja rein theoretisch mal vorkommen, dass man existierende Drupal-Inhalte nach WordPress übernehmen möchte. Gehen wir mal davon aus, dass wir einen bestimmten Inhalltstyp aus Drupal als Blog-Beiträge nach WordPress exportieren möchte. Wir bleiben beim Kochbuch, der relevante Inhaltstyp ist „rezept“. Ich hab mal im Archiv gegraben und mir die Mechanik fürs grundlegende Anlegen eines WordPress-Posts geholt:

WordPress Post anlegen

// Beitragsobjekt anlegen
    $my_post = array();
    $my_post['post_title']    = 'Mein Titel';
    $my_post['post_content']  = 'Mein Content';
    $my_post['post_status']   = 'publish';
    $my_post['post_author']   = 1;

    // Beitrag in Datenbank einfügen
    //$neue_id = wp_insert_post( $my_post );

Mehr brauchts eigentlich nicht für den Anfang, der Titel und der Inhalt reichen mal für Demozwecke (Die Kategorien kommen später dran). Jetzt suchen wir uns aus Drupal die relevanten Daten zusammen.

Relevante Tabellen in Drupal

Zum einen die node-Tabelle, aus der brauchen wir vor allem die nid, den type und den title. Der content steckt in der field_data_body im Feld body_value, verknüpft wird über die nid im Feld entity_id. Der SQL sieht so aus:

SELECT field_data_body.entity_id, field_data_body.body_value, node.nid, node.type, node.title
FROM field_data_body INNER JOIN node ON field_data_body.[entity_id] = node.[nid];

Das Ergebnis sieht erstmal so aus:

node_fields
node_fields

Wir haben hier noch articles und pages mit drin, die filtern wir mit einem where type = ‚rezept‘ weg, dann passt die Sache.

Jetzt fehlen noch die Kategorien

Dafür brauchen wir zuerstmal die Tabelle taxonomy_term_data, in der stehen die id und Namen der Kategorien drin, und die vid, das ist der Index der verwendeten Taxonomy, das ist bei mir die 2. Das ergibt bei mir eine Liste mit 28 Einträgen, von denen ich nur die tid und den Namen brauche:

tid_name
tid_name

Die importiere ich mit dem phpmyadmin in unsere WordPress-Datenbank.

Schritt 1: Anlegen der Kategorien in WordPress

Dafür setzen wir uns ein kleines Plugin auf, das zunächst nicht mehr als ein  Formular mit einem Textfeld für den Namen der zu importierenden Tabelle und einen Start-Button enthält. Der Kern des Plugins ist ganz einfach. Auf der Variablen $akt_import liegt der Name der einzulesenden Tabelle mit den Kategorienamen. Durch die steppe ich zeilenweise durch und lege mit wp_create_category() die Kategorien neu an:

global $wpdb;
    $allezeilen = $wpdb->get_results( "SELECT * from ".$akt_import."");
    
    foreach ($allezeilen as $zeile){
        
        echo $zeile->name."<br>";
        wp_create_category($zeile->name);
    }

Das Ergebnis ist wie erwartet:

kat_in_wp
kat_in_wp

28 neue Kategorien. Von denen brauchen wir jetzt die WordPress-Kategorie-IDs, die stecken jetzt in der Tabelle wp_terms:

wp_terms
wp_terms

Schritt 2: verknüpfen mit den Drupal-Daten

Die wp_terms hole ich mir jetzt zu den Drupal-Tabellen nach Access rein. Dort habe ich mir inzwischen aus der node und aus der field_data_body eine neue Tabelle gebaut, die nur die nid, den title und den body_value enthält:

nid_title_body_value
nid_title_body_value

Die wird jetzt erstmal über die nid mit der taxonomy_index und diese über die tid mit der taxonomy_term_data verknüpft:

nid_tid_verknuepfung
nid_tid_verknuepfung

Dann hole ich mir die wp_terms mit dazu und verknüpfe über den name  mit der taxonomy_term_data:

mit_wp_terms
mit_wp_terms

Damit haben wir alle Felder, die wir für den Export nach WordPress brauchen, die term_id liefert uns die richtige Kategorie:

nodes_mit_term_id
nodes_mit_term_id

Das specken wir noch ein wenig ab und basteln uns eine saubere Export-Tabelle. Die enthält zunächst nochmal jeden Datensatz so oft, wie er Kategorien zugeordnet hat. Da ich in Drupal nur zwei Kategorien pro Datensatz hatte, taucht hier also jedes Rezept zweimal auf. Darauf setze ich eine Abfrage mit Gruppierung und nehme von der term_id einmal den letzten Wert und einmal den ersten Wert:

ersterwert_letzterwert
ersterwert_letzterwert

So, das wars. Diese Abfrage exportieren wir uns als CSV und holen sie uns in unsere WordPress-Datenbank rein. Für den tatsächlichen Import gibts aber einen neuen Beitrag.

Drupal und die Bilder – ich geb ihm noch ’ne Chance

Die Bildverwaltung in Drupal ist etwas versteckt und gewöhnungsbedürftig, man kann aber letztendlich doch viel damit machen, deswegen schauen wir uns die Sache noch einmal genauer an.

Wenn man in Drupal ein Bild hochlädt, wird dieses skaliert und im Dateisystem mehrfach abgelegt. Standardmässig sind folgende Skalierungsoptionen aktiv:

Konfiguration->Medien->Bildstile

bildstile
bildstile

Man kann hier auch einen oder mehrere eigene Bildstile anlegen, ich hab mir hier mal einen mit der Breite 50 px und dem Effekt „Skalierung“ genommen und ihn Briefmarke genannt.

Bildanzeige: Steuerung über Inhaltstyp

Wann welcher der angelegten Bildstile verwendet wird, wird über die Inhaltstypen (!) gesteuert.  Suchen sie sich einen Inhaltstyp heraus, dem bereits ein Image-Field zugeordnet ist,oder legen sie es neu an. Ich nehm mal den „article“. Über Struktur->Inhaltstypen->Artikel->Anzeige verwalten gelangt man in ein Auswahlmenü, in dem man die Bildstile für die Anzeigemodi Standard und Anriss festlegen kann.  Ich ändere das mal im Anrisstext auf meinen selbstdefinierten Bildstil Briefmarke. Ergebnis in der gekürzten Ansicht:

vorschau_briefmarke
vorschau_briefmarke

In der Seitenansicht bleibt es beim „grossen“ Bild mit dem voreingestellten Format „Large (480×480)“.

vorschau_large
vorschau_large

Weitere Einstellungsmöglichkeiten

Über Struktur » Inhaltstypen » Article » Felder verwalten kann man bei EINSTELLUNGEN FÜR DAS IMAGE-FELD beim Punkt Anzahl von Werten einstellen, wie viele Bilder maximal zu einem Artikel hochgeladen werden können, Default ist hier 1. Wie die Bilder dann im Artikel angezeigt werden kommt auf den voreingestellten Bildstil an. Mehrere eingefügte Bilder werden untereinander angezeigt, auch wenn sie theoretisch nebeneinander Platz hätten, das finde ich weniger schön. ( Anmerkung: Man kann sicher ins CSS eingreifen, aber ich glaube, das lässt sich auch über Views lösen)

Man kann hier auch die Option „Bildtitel“ mit aktivieren, das ergibt dann später einen Hovertext bei der Bildanzeige auf der Webseite. Ebenso kann man ein Default-Bild einstellen, eine maximale und minimale Bildauflösung einstellen und eine maximale Upload-Grösse definieren.

Es hat auch Vorteile

Man ist es ja von WordPress her gewohnt, Bilder überall und in jeder gewünschten Grösse in einen Beitrag oder auf einer Seite einfügen zu können. Die restriktivere Steuerung über Bildstile in Drupal hat vielleicht den Vorteil, dass für einen bestimmten Inhaltstyp immer ein einheitliches Layout verwendet wird.  Ausserdem hat man hier im Gegensatz zu WordPress noch eine Chance, den Alt-Text und den Titel für jedes Bild im Nachhinein nochmal zu bearbeiten:

3_bilder
3_bilder

Wem das immer noch nicht genügt an Bild-Einstellmöglichkeiten, der braucht ein oder mehrere Zusatzmodule. Eines der am meisten empfohlenen ist Insert https://www.drupal.org/project/insert, ich habs aber auf meiner Testinstallation noch nicht zum Laufen gekriegt.

Bilder mit Views nebeneinander ausgeben

Neue View erstellen, z.B. „Bilder nebeneinander“. Anzeigen Inhalt of type Article, Create a page. Edit&Continue. Format Anzeigen Inhalt Fields, Felder Hinzufügen Inhalt (Bild), Bezeichnung leer machen, Bilddarstellung „Thumbnail“ auswählen. Wahlweise noch Fields hinzufügen Inhalt (Body), Bezeichnung entfernen. Das sollte dann in etwa so aussehen (der erste Artikel hat nur 1 Bild):

drei_bilder_nebeneinander
drei_bilder_nebeneinander

Ich sags ja, mit Views geht fast alles!

Was ich an Drupal 7 toll finde… und was weniger

Ohne Views geht gar nix – aber mit Views geht alles!

Und soweit ich das überblicke, hats ja Views in den Core von Drupal 8 geschafft. Aber Drupal 7 ohne Views ist noch nicht mal die halbe Miete, ohne das geniale (und komplexe) Abfragetool kommt man an das volle Potential von Drupal gar nicht ran.

Views ist allerdings mit einer steinigen, steilen Lernkurve behaftet, ohne viel Ausprobieren und Googlen geht da gar nichts. Je mehr man sich aber mit dem vielseitigen Tool beschäftigt, um so klarer wird es dass es nix gibt was nicht geht – oder fast nix.

Es lassen sich alle, aber auch wirklich alle Datenbankinhalte strukturiert abfragen und optisch ansprechend aufbereitet darstellen. Die Frage ist halt nur, wie lang man basteln und forschen muss bis zum gewünschten Ergebnis.

Ich würde mir wünschen, dass viele der öfter gebrauchten und populären Views-Anwendungen schon als Vorlagen mitgeliefert würden, so dass man nicht jedesmal das Rad neu erfinden muss.

Wirklich prima: die Inhaltstypen

Mit dem Konzept der benutzerdefinierten Inhaltstypen wird es einem leicht gemacht, die Inhalte auch komplexer Webseiten strukturiert zu präsentieren. Mit den entsprechenden Layout-Overrides gepaart hat man ein mächtiges Werkzeug, logisch separierte Inhalte auch nach den eigenen Bedürfnissen aufbereitet darzustellen. Das ersetzt locker die Multiblog-Fähigkeit wie man sie z.B. bei Joomla hat, die Verwaltung und Präsentation der Inhaltstypen läßt sich fein differenziert steuern und macht richtig Spaß.

Die API: braucht man gar nicht so oft

Weil man bei genauem Hinsehen oft feststellt, dass eine gewünschte Funktionalität in Drupal schon vorhanden ist bzw. mit Views relativ leicht zu realisieren ist. Das bisschen was ich von der API bislang gebraucht habe war eigentlich immer sehr straightforward und gut dokumentiert, besonders von den Möglichkeiten der Datenbankoperationen bin ich sehr angetan. Erhebt sich die Frage, ob das mit Drupal 8 so bleiben wird… die APIs sind komplett neu aufgestellt worden.

Mein Fazit: Drupal ist das CMS der Wahl für alte Datenbanker

Wenn man es mit vielen unterschiedlichen Inhalten zu tun hat und auch mit grossen Datenmengen, die man über ruhig auch komplexe Abfragen an die Web-Oberfläche bringen möchte, ist Drupal mit Views unschlagbar.

Wenn es in der Datenbank drinsteckt, kriegt man es in Drupal auch wieder heraus, und das oft auf erstaunlich einfachen Wegen. Keine Verrenkungen wie in WordPress, wo für alle möglichen Inhalte die wp_content herhalten muss, und auch kein Vergleich zu Joomla, das einem den Weg zu den Datenbankinhalten oft unnötig schwierig macht.

Da kann man es dann schon verschmerzen, dass man mit Views erst mal eine Runde üben muss, der geniale Funktionsumfang wiegt die wenig intuitive Bedienung leicht auf.  Ich bin mal gespannt, wie die Integration von Views in Drupal 8 gelungen ist!

Ein bisschen Feintuning – ein Gemischtwarenladen

Anrisstext in Blogansicht ausblenden

Mir genügt es völlig, wenn in der Blogansicht die Titel der Rezepte angezeigt werden. Teaser Text verwende ich nicht, weil mir das zuviel Arbeit ist, den müsste ich ja für jedes der über 300 Rezepte neu erstellen! Also blende ich den Body des Rezeptes in der Blogansicht komplett aus, das funktioniert mit folgendem Eintrag in meinem Template Override node–blog.tpl.php:

<div class="content clearfix"<?php print $content_attributes; ?>>
    <?php
      // We hide the comments and links now so that we can render them later.
      hide($content['comments']);
      hide($content['links']);
      //*****************Inhalt nur in der Full-Ansicht anzeigen
      if ($view_mode == 'full'){print render($content);}
    ?>

Das sieht dann so aus:

blog_ohne_teaser
blog_ohne_teaser

Überschrift „Weblogs“ auf der Blogseite ändern

Dafür legt man sich einen Override der der page.tpl.php an und benennt ihn mit page–blog.tpl.php. Dann nach dem Eintrag suchen:

<?php print $title; ?>

Diesen ersetzen durch:

<?php if (arg(0) != 'blog' && $node->type != 'blog') { print $title; } else {print "Alle Rezepte";}?>

Ergebnis:

alle_rezepte
alle_rezepte

Link „Blog von evi“ in der Blog-Ansicht ausblenden

Quick and dirty, aber funktioniert: die style.css des Themes um folgenden Eintrag ergänzen:

li.blog_usernames_blog.last
{
display:none;
}

Dann ist der Link weg.

blog_ohne_link
blog_ohne_link

Kategorien oben in der Full View anzeigen

An den Anfang  der node–blog.tpl.php folgende Zeile stellen:

<?php print render($content[‚field_tags‘]);?>

kategorien_oben
kategorien_oben

 

Die ersten Inhalte, und das erste Modul: CKEditor

Um einen WYSIWYG-Editor ähnlich wie in Joomla oder WordPress zu erhalten, kann man sich das Modul CKEditor installieren, sie finden es hier: https://www.drupal.org/project/ckeditor

Unter Module->Installieren die ZIP-Datei anwählen, nach der Installation die Aktivierung nicht vergessen, der Editor findet sich ganz am Ende der Liste unter „Benutzeroberfläche“.

ckeditor_aktivieren
ckeditor_aktivieren

(Anmerkung: auf meiner Testinstallation läuft der CKEditor nur mit Google Chrome, unter Firefox gibts Probleme…)

Inhaltstypen

Standardmässig bringt Drupal zwei Inhaltstypen mit:  Artikel und einfache Seite. Artikel sollen lt. Doku überall da verwendet werden, wo vom Benutzer eine Interaktion erwartet wird (Kommentar). Die einfachen Seiten verwendet man für quasi-statische Seiten wie z.B. die Willkommen-Seite oder auch das Impressum.  Drupal hat auch noch andere Inhaltstypen an Bord, die nach Aktivierung der entsprechenden Module angeboten werden, und man kann auch eigene Inhaltstypen anlegen, aber dazu später mehr. Wir passen uns jetzt erstmal den Inhaltstyp „Einfache Seite“ an, denn wir wollen:

Bilder einbinden, die Erste

Das geht nämlich so ohne weiteres erstmal nicht. Wir müssen erstmal das Feld für die Bilder zur einfachen Seite hinzufügen. Das geht unter Struktur->Inhaltstypen->einfache Seite->Felder verwalten. Dort das vorhandene Feld „Bild: field_image“ auswählen und diese Option speichern.

feld_image
feld_image

Wenn wir jetzt über Inhalte hinzufügen eine neue einfache Seite erstellen, gibt es unterhalb des Editorfensters einen zusätzlichen Punkt Images, über den eine Bilddatei hochgeladen werden kann. Das Feld für den Alt-Text kann man leicht übersehen, es gibt auch keine Fehlermeldung wenn es nicht ausgefüllt wird, das Bild wird halt dann mit leerem Alt-Attribut in der Seite angezeigt. Auch Einstellmöglichkeiten für einen Titel oder eine Beschriftung oder dergleichen sucht man vergeblich, aber zur Bilderverwaltung in Drupal wird später noch mehr zu sagen sein.

Machen wir weiter mit unserer einfachen Seite.

Teaser und Bodytext

Wir bleiben erstmal im Beitragseditor. Das Feld Title ist selbsterklärend, darunter wird angezeigt:

Body (Zusammenfassung bearbeiten )

Man kann hier ähnlich wie in Joomla mit dem Weiterlesen-Tag einen Beitrag in eine Einleitung bzw. Zusammenfassung, auch Teaser genannt, und den eigentlichen Body Text aufteilen.  Es wird dann auf der Seite nur der Teaser und ein Weiterlesen-Button angezeigt, wie das im Einzelnen gesteuert wird, hängt letztlich vom Theme ab.

Menüeinstellungen

Wir können unserer einfachen Seite jetzt einen eigenen Menüpunkt zuordnen:

menueinstellungen
menueinstellungen

Dabei bestimmt die Gewichtung, in welcher Reihenfolge die Menüpunkte angezeigt werden. Wenn alles geklappt hat, müsste jetzt als zweiter Menüreiter der Eintrag „Rezeptbilder“ erscheinen.

rezeptbilder
rezeptbilder

NiceURLs muss man per Hand anlegen

In anderen CMS kriegt man sprechende URLs vorgeschlagen, in Drupal muss man sie manuell eintragen, das geht unter URL-Alias-Einstellungen.

niceurls
niceurls

Die kleine Mühe, hier eine URL-safe Vorgabe einzustellen hätten sich die Drupal-Entwickler schon machen können! Wenn man das nämlich nicht macht, bekommt man URLs nach dem Muster  http://ihresite/drupal/node/7, und das ist weder schön noch SEO-gerecht.

Auf die Art und Weise lege ich mir jetzt meine statischen Seiten der Reihe nach an. Wenn man übrigens für die Startseite einen eigenen Karteireiter haben möchte, muss man dies unter Struktur->Menüs->Link hinzufügen einrichten, hier einen Titel (z.B. Startseite) vergeben und als Link <front> eintragen.

Und was ist mit den Rezepten?

Das muss ich mir erstmal gut überlegen. Ob die in einem Blog besser aufgehoben sind, oder als eigener Inhaltstyp verwaltet werden sollen. Aber dazu gibt es einen neuen Beitrag.

 

 

Neues Projekt, neues CMS: Drupal für alte Programmierer

Drupal ist die Nummer drei

Drupal ist nach WordPress und Joomla das drittverbreitetste CMS weltweit, laut Statista waren es Ende September 2017 1,14 Millionen Webseiten „Powered by Drupal“. Es wird oft damit Werbung gemacht, dass Drupal von vielen „offiziellen“ Webseiten wie Regierungen, Bildungseinrichtungen und internationalen Firmen eingesetzt wird und somit als ernstzunehmende CMS-Alternative zu den härtesten Konkurrenten WordPress und Joomla zu rechnen ist.

Am verbreitetsten ist immer noch der Versionszweig 7.x, die Version 8.x schwächelt noch ein bisschen in der Verfügbarkeit zusätzlicher Module im public domain Bereich und in der Dokumentation. Einen kurzen, knackigen Vergleich der beiden Versionen findet man hier bei DB Difference Between. Ich habe mich vor allem wegen der Anzahl und Qualität der verfügbaren Tutorials und Dokumentationen für die Version 7.57 entschieden, und zwar zum Testen in einer lokalen Installation auf XAMPP 7.2. Das wirft zwar ein paar PHP-Glitches (Deprecated function: The each() function is deprecated…), aber scheint im Großen und Ganzen einwandfrei zu funktionieren. Drupal ist allerdings auch bei vielen Hostern als Pre-Package im Angebot und kann dort sehr leicht zum Testen eingerichtet werden

Drupal-Releases zum Download

Die aktuellen Releases findet man auf https://www.drupal.org/project/drupal

Eine sehr ausführliche Installationsanleitung findet man hier beim Drupal Blog Berlin: https://www.drupal-blog-berlin.de/blog/drupal-8-installieren-jedermann

Eine ebenfalls sehr ausführliche Anleitung zum Umstellen der Sprache auf Deutsch findet man hier: https://praxistipps.chip.de/drupal-auf-deutsch-umstellen-so-gehts_27104

Erste Anpassungen nach der Installation

Drupal präsentiert sich erstmal sehr spartanisch, nach erfolgreicher Installation sieht die Startseite recht mager aus, die Meldung „Es wurde noch kein Inhalt für die Startseite erstellt.“ fordert eine erste Aktion heraus. Mit Klick auf Neuen Inhalt hinzufügen->Einfache Seite landet man in einem sehr mageren Editor, aber da kümmern wir uns gleich drum. Geben sie ihrer neuen Seite einen netten Namen „Willkommen“ wäre OK und schreiben sie etwas Text hinein. Damit diese Seite jetzt auch auf der Startseite angezeigt wird, muss man unter Menüeinstellungen die Option „Menüpunkt erstellen“ anhaken, und unter „Veröffentlichungseinstellungen“ den Punkt „Auf der Startseite anzeigen“ anhaken. Speichern, und jetzt haben wir unseren ersten Menüpunkt.

Das Standard-Theme: Bartik 7.57

Genau wie WordPress und Joomla verwendet Drupal Themes, um das Aussehen der Seite zu steuern. Ich bleibe beim Standard-Theme Bartik und nehme nur ein paar Konfigurationseinstellungen vor. Eine feine Dokumentation über das Theme Bartik und dessen Regions findet man hier: https://www.drupal.org/docs/7/core/themes/bartik/introduction-to-bartik-theme

Die Blockpositions-Vorschau

Es gibt aber auch wie in Joomla die Option einer Theme-Vorschau mit den vorhandenen Blöcken, dazu unter Struktur->aktuelles Theme->Block-Regionen veranschaulichen (Bartik)  anwählen, und man bekommt eine sehr schöne grafische Übersicht.

blockvorschau
blockvorschau

Ändern des Titels und des Slogans

Unter Konfiguration->System->Website-Informationen können sie Titel und Slogan der Webseite einstellen.

Ändern des Logos und des Favicons

Unter Design->akt. Theme->Einstellungen kann man ein individuelles Logo hochladen, dieses sollte allerdings bereits auf passendes Mass skaliert sein. Hier könnte man auch ein eigenes Favicon hochladen, sowie bestimmte Seitenelemente ein- und ausblenden. An dieser Stelle kann man auch das Farbschema des Themes einstellen, ich hab mal „Pflaume“ genommen.

erste_seite
erste_seite

Ein kurzer Blick auf die Datenbank

Drupal gönnt sich über 70 Tabellen, eine Dokumentation findet sich hier: https://www.drupal.org/node/2360815

Alle Entitäten einer Drupalseite werden als Nodes (siehe hier in den Joomla Docs) behandelt. Die relevanten Node-Tabellen werden hier kurz und knapp erklärt. Die Inhalte von Seiten und Beiträgen findet man in den Fields-Tabellen wieder, da kommen wir später noch dazu.

Jetzt kümmern wir uns erstmal um die Inhalte unserer neuen Seite, und dazu gibts einen neuen Beitrag.