Drupal

  • Eclipse vs. Netbeans für Drupal und PHP

    Seit 2 Jahren benutze ich nun auch Eclipse zum entwickeln von Drupal Modulen in PHP. Richtig überzeugen konnte mich Eclipse jedoch nie. Ich fand das Programm einfach zu schwerlastig um PHP-Code damit zu erstellen. So habe ich nun seit einer Woche Netbeans im Einsatz. Der erste Eindruck scheint gelungen. Das ganze Programm kommt viel schlanker daher. Die Installation geht schnell und PHP kann man direkt als fertige Distribution herunterladen (ähnlich wie PHPEclipse).

    Hier meine positiven Punkte:

    • schneller Start des Programmes
    • übersichtliche Oberfläche
    • Projekt-Wizard sehr gut
    • Projekte, welche auf einem entfernten Server getestet werden (via FTP) können als solche verknüpft werden, es ist also kein zusätzliches FTP Programm nötig
    • bereits nach einem Tag kenne ich mehr Funktionen des Programmes als nach 2 Jahren Eclipse
    • Plugin für Drupal
    Negatives:
    • bisher noch nichts zu bemängeln
    Achtung: Das Plugin für Drupal ist nicht aktuell. Auf der offiziellen Seite gibt es keine aktuelle Version. Ich habe aber für NetBeans 9.1 das Drupal Plugin hier gefunden -> http://hollyit.net/files/org-netbeans-modules-php-drupal-module.nbm . Es hat auch funktioniert.
    NetBeans
  • Drupal: XSend bzw mod_xsendfile auf Debian installieren

    Für Apache gibt es ein super Modul, welches den Dateitransfer massiv verschnellert, bzw die Ladezeit bis zum Dateitransfer. Das Modul heisst mod_xsendfile. Ich hatte einige Probleme das Ding auf meinem Debian zum laufen zu bringen. So habe ich es gemacht:

    1. Wechseln zum Ordner für Apache Module (/usr/lib/apache2/modules; wenn anders dann kann man den modules Ordner suchen: find / -name 'modules')
    2. Source herunterladen mit Link (Link Datei; Link Seite)
    3. apxs2 -cia mod_xsendfile.c (Achtung, bei mir musste ich eine 2 an das apxs anhängen, ist nicht so auf Homepage beschrieben!)
    4. Bei mir kam dann am Schluss folgende Fehlermeldung:
      1. apxs:Error: Activation failed for custom /etc/apache2/httpd.conf file..
        apxs:Error: At least one `LoadModule' directive already has to exist..
    5. Lösen kann man das Problem mit folgendem Trick:
      1. nano /etc/apache2/httpd.conf
      2. Die folgenden zwei Zeilen untereinander eintragen
      3. #LoadModule directive to aid module installations
        #LoadModule dummy_module /usr/lib/apache2/modules/mod_dummy.so
      4. Wieder zumachen und speichern
    6. Apache neu starten (invoke-rc.d apache2 restart)
    7. Ich bin nicht ein Fan von Core-Patches, jedoch ziehe ich in diesem Fall ein solcher vor. Anstelle des xfile Modules von Drupal reicht es (für meinen Fall) in der includes/file.inc die Funktion file_transfer mit der Zeile "$headers[] = 'X-Sendfile: '.$source;" gerade nach dem ersten if {} Konstrukt einzufügen. Das Drupal modul xfiles ist so überflüssig.
    function file_transfer($source, $headers) {
      if (ob_get_level()) {
        ob_end_clean();
      }
      $headers[] = 'X-Sendfile: '.$source; 
      foreach ($headers as $header) {
      ..
  • Drupal: PDF Vorschau als jpg, pdf2jpg

    Immer schon wollte ich auf Webseiten pdf's als Bilder darstellen. Sinnvolle Hilfe dazu zu finden ist meiner Meinung nach eher schwierig. Für eine aktuelle Drupal-Installation wollte ich nun endlich mal einen Schritt weitergehen und meine Wünsche in etwas Handfestes umwandeln. Im Drupal CMS sollten sämtliche PDFs auch als jpg/png automatisch zur Verfügung stehen. Dazu habe ich ein neues Modul geschrieben, ich habs Preview genannt. Ich stellte mir vor, dass es in Zukunft verschiedene Dateitypen als Preview erstellen sollte, nicht nur PDFs. Zurzeit bin ich dran, das Modul so umzugestalten, damit ich es auf drupal.org contributen kann. Auf meiner vorhanden Drupalinstallation läuft es aber breits wie geschmiert. Ich werde bei Gelegnheit mehr Details dazu posten (wird auch vom Interesse von Euch abhängen...).Mein Fazit bis jetzt: Es ist alles was ich mir je gewünscht habe. Gerade grosse PDFs (bei uns handelt es sich um Baupläne, >90MB pro Seite) müssen so nicht heruntergeladen werden sondern werden innert Kürze in der "Vorschau" angezeigt.

    screenshoots: 
    screenshot.9.png
  • Drupal: Auf fremde/zweit Datenbank zugreifen

    Problem: Auf der vorhanden Drupal Installation will ich auf Daten einer anderen Datenbank zugreifen. Drupal hat dafür bereits einen Weg vorgesehen. Dazu geht man in die sites/default/settings.php Datei. Folgende Zeile definiert die Standard Datenbank:

    $db_url 'mysql://drupal:drupal@localhost/drupal';

    Wandelt man $db_url in ein Array um, kann man beliebig viele Datenbank definieren.:

    $db_url['default'] ='mysql://drupal:drupal@localhost/drupal';
    $db_url['mydb'] = 'mysql://user:pwd@localhost/anotherdb';
    $db_url['db3'] ='mysql://user:pwd@localhost/yetanotherdb';

    Im Modul, wo man dann auf die Daten zugreifen will mach man das folderndermassen:

    db_set_active('mydb');

    db_query('SELECT * FROM table_in_anotherdb');

    //...
    db_set_active('default');

    Default ist die Standard-Datenbank. Sie ist erforderlich. In dieser Datenbank ist Drupal installiert. Man muss aufpassen, dass man nach dem Sprung in die andere Datenbank die default Datenbank wieder auf aktiv stellt.

    Quelle: http://drupal.org/node/18429

  • Drupal: Files Ordner verschieben

    Um den Files Ordner zu verschieben (in meinem Fall im Private Mode), geht man folgendermassen vor:

    • per FTP oder shell die Daten an den neuen Ort verschieben
      • shell: mv <pfad>/files <neuer pfad>/files
      • per FTP sicherstellen das .htaccess Datei mitgneommen wird
    • Folgender MYSQL Befehl ausführen (zB in mysqladmin)
      • update files set filepath = replace(filepath,'<alter Pfad>','<neuer Pfad>');
    • Nach admin/settings/file-system gehen
      • neuer Pfad angeben
    • Fertig

    Achtung: <...> ersetzen durch eigene Werte! 

  • Gruppierte Linkliste mit Drupal erstellen

    Nachdem ich viel Post bekommen habe, dass mein erstes Screencast zu diesem Thema nicht bis zum Ende lief, hier mein zweiter Versuch, ein Screencast über die Linkliste in Drupal  zu machen. Diesmal klappt es hoffentlich bis zum Schluss! Also ich hoffe es ist verständlich. Da ich grad kein Mikrofon zur Hand hatte ist's halt ohne Ton. 

    Das ganze ist natürlich noch un-designt, es geht hier nur ums "Technische". Über ein paar Zeilen CSS kann man das noch ganz schön gestalten.

    Ergänzung:

    Die Links müssen mit http:// angegeben werden, sonst meint Drupal, dass es eine Unterseite ist und es gibt sowas wie http://www.meindomain.com/google.com


  • Drupal bleibt bei Installation hängen -> install Profile

    Immer wieder hatte ich das Problem, dass Drupal bei meiner Multisite Installation nach der Erstellung der Datenbanktabellen stehen blieb. Die Tabellen wurden zwar alle Ordnungsgemäss installiert, jedoch blieb der Installer hängen. Hier die Lösung:
    install.php?locale=en&profile=default&op=do_nojs&id=1
    als Pfad eingeben und weiter gehts mit der Installation!
    Ich habe gelesen, dass es sich dabei um irgend ein JS Problem handelt
     

  • Drupal Cron bleibt hängen

    Fast ein Tag lang hat mich das Problem beschäftigt, warum der Cron hängen bleibt. Fehler wie Cron run failed oder Attempting to re-run cron while it is already running. hingen mir schon zum Hals raus. Auch die Tipps und Tricks halfen nichts:

    DELETE FROM `variable` WHERE name = 'cron_semaphore';
    DELETE FROM `variable` WHERE name = 'cron_last';

    Apache neu starten

    Cache leeren

    Alles half nichts! Nichts hilft.

    Folgender Trick hat mir dann geholfen:

     

    • drupalinstallation/includes/module.inc öffnen
    • gehe zu Zeile 481 (oder in der Nähe)

    • foreach (module_implements($hook) as $module) {
        $function = $module .'_'. $hook;
        if ($hook == 'cron') watchdog('cron', "hit $module cron");   // diese Zeile einfügen
        ...
      }

    • Cron per Hand ausführen
    • gehe zu admin/reports/dblog
    • Schauen, welches Modul den Cron stoppt (das ist das letzte, welches "hit $module cron" enthält)
    • Entsprechendes Modul deaktivieren
    • Cron sollte wieder funktionieren
    • Evtl. müssen die ersteren genannten Schritte ebenfalls noch ausgeführt werden
    • Bei mir lag das Problem beim Apache Solr Modul!
  • Online Bilder verlustfrei komprimieren (png compressor)

    Eine schnelle Webseite ist das A und O eine Webprogrammierers. Wieder einmal gibte stausende von Programmen, wobei vieles Rammsch ist. Ein tolles Tool habe ich wieder einmal direkt online gefunden. Es komprimiert PNG Bilder ohne das es dabei Verluste gibt, und das alles Online!
    http://www.gracepointafterfive.com/punypng/
    Bilder Hochladen und wieder runterladen, als komprimierte png.
    Einschränkungen:
     

    •  PNG, JPG, GIF, Animated GIF
    • max. 350KB pro Bild

    Das Resultat ist erstaunlich gut!
     

    screenshoots: 
  • Drupal Speicherverbrauch anzeigen / Drupal Memory Consumption zeigen

    Schon einmal dafür interessiert, wieviel Speicher ein Drupal Modul braucht, bzw. wieviel Speicher jedes einzelne Modul verbraucht? Hier ein kleines Tutorial. Der Inhalt stammt von 2bits.com. Achtung, dieses Tutorial ist nur für Drupal 6.14 gedacht!
     

    1. Patch herunterladen (siehe unten)
    2. Patch auf Drupal-Ordner anwenden
    3. in der settings.php Datei zuunterst $conf['memory_profiling'] = 1;; Diese Einstellung schaltet die Funktion ein.
    4. Drupal tmp Pfad suchen -> zB: devel/variable
    5. jedesmal wenn nun eine Seite geladen wird, wird im Temp Ordner eine Datei "memory.csv" geschrieben. Diese kann man in Excel importieren (Daten->Externe Daten abrufen->aus Text)

    Das ganze am besten sofort wieder Rückgängig machen, also:

    1. Änderungen in der settings.php rückgängig machen
    2. Patch rückgängig anwenden

     

    AnhangGröße
    drupal-memory-6.14.patch7.86 KB
Inhalt abgleichen