mermshaus: wozu blog software ?

Beitrag lesen

Ach ja: Ich kann dir im Grunde auch ein fertig zusammengestelltes Package von Horne 0.3.0 als Zip schicken. Dann brauchst du weder Git noch Composer. Die dienen nur dazu, die Abhängigkeiten zu anderer Software aufzulösen. Das wäre in dem Zip dann alles mit drin.

Ja, sowas "geschicktes" könnte mir Zeit sparen, obgleich ich denke, dass ich bereits ein zip aus dem download habe, vielleicht meinst du ja ein anderes zip/anderer Inhalt.

Vermutlich ja. In dem GitHub-Projekt ist nur der direkte Anwendungscode von Horne enthalten. Die Anwendung nutzt aber noch externe Bibliotheken wie etwa symfony/console. (Komplette Liste hier: composer.json.) Die müssen noch installiert werden. Dazu dient der Schritt mit composer install. Dabei werden die externen Abhängigkeiten nachgeladen und im Unterverzeichnis vendor platziert. Das, was dabei rauskommt, ist dann die fertige Anwendung.

Das habe ich jetzt lokal mal gemacht. Das ergibt dieses Zip: http://tmp.ermshaus.org/horne-0.3.0.zip.[1] Wenn du das beispielsweise in c:\php\horne-0.3.0 entpackst, solltest du grundsätzlich Horne unter Windows ausführen können. Ich habe vorhin mal einen Windows-Rechner gekapert, dort XAMPP mit PHP 5.6 installiert und es ausprobiert.

Screenshot

Links oben ist einfach das PHP aus XAMPP. Da muss man nichts verändern oder so. Es würde sicher auch eine reine PHP-Installation tun, muss nicht XAMPP sein. XAMPP habe ich jedenfalls nach c:\xampp installiert, die php.exe liegt demnach unter c:\xampp\php\php.exe.

Links unten ist ein Aufruf von Horne, der die Blog-Demo baut. Die beiden Befehle dazu:

chdir c:\php\horne-0.3.0\demos\blog
c:\xampp\php\php.exe -f c:\php\horne-0.3.0\horne -- build

Es ist wichtig, das Arbeitsverzeichnis korrekt zu setzen (chdir). Der build-Befehl kennt zwar einen --working-dir-Parameter, aber ich würde unter Windows bis auf weiteres lieber auf Nummer sicher gehen und vorher ins richtige Verzeichnis navigieren.

Der zweite Befehl sollte eigentlich nur horne build lauten, aber dafür muss man unter Windows offenbar erst mal diverses Zeug (sinngemäß) tun, was mir für den Moment zu umständlich war, daher alles mit absoluten Pfaden und mit expliziter Angabe der php.exe.

Links unten auf dem Screenshot sind die beiden Befehle und ihr Output zu sehen. Da sieht man auch, wieso ich ziemlich verhalten bin, was Windows-Unterstützung angeht, weil etwa in der Ausgabe die Verzeichnistrenner (/ und \) vermischt sind. Ich glaube nicht, dass das an der Stelle zu Problemen führt, aber ich kann es nicht ausschließen. (Use at own risk.)

Rechts oben ist das Verzeichnis der Blog-Demo zu sehen. Dort wurde durch den Aufruf von horne build das output-Verzeichnis angelegt. Darin befinden sich die fertigen HTML-Seiten, die aus den Daten in src und die _horne.json-Datei erzeugt wurden. In _horne.json steht:

{
    "sourceDir": "src",
    "outputDir": "output",
    "modules": {
        "system": {
            "siteTitle": "Blog example",
            "showFooter": true
        },
        "blog": {
            "useTags": true,
            "showInfoline": true,
            "showAuthor": true
        },
        "theme": {
            "name": "esperanza"
        }
    }
}

Das dürfte relativ selbsterklärend sein. Im output-Verzeichnis liegt eine index.html-Datei, die im Browser aufgerufen werden kann. Von dort aus kann durch die gesamte Seite geklickt werden. Das sieht derzeit konkret so aus: http://tmp.ermshaus.org/blog/index.html

Zu den Quelldateien in src schreibe ich demnächst noch was. Sie bestehen grob aus Front Matter und Inhalt, wie es etwa auch bei Jekyll und dergleichen üblich ist. Der Inhaltstyp in der Demo ist PHP/HTML, aber es wird auch Markdown unterstützt[2] und einige esoterische Formate, die ich irgendwann mal genutzt habe.

Ein Bug/Feature ist derzeit, dass das Tool sehr „mächtig“ ist, was die Programmierbarkeit angeht. Da PHP-Code ein Inhaltstyp ist (was by design ist), lassen sich im Grunde alle möglichen Sachen direkt in Inhaltsdateien anstellen. Das geht etwa bei Markdown als Inhaltstyp nicht, weil Markdown nicht programmierbar ist.

Ich nutze das deliberately. Die Quelldatei zur Leseliste auf meiner Homepage enthält zum Beispiel u. a. das hier:


$data = [];

$data[2016][9] = [];
$data[2016][9][] = [
    'author' => 'Arthur C. Clarke',
    'title'  => 'Rendezvous with Rama'
];

$data[2016][6] = [];
$data[2016][6][] = [
    'author' => 'James S. A. Corey',
    'title'  => 'Leviathan Wakes'
];

...

<?php foreach ($data as $year => $entriesForYear) : ?>

<h2><?=$api->e($year)?></h2>

<ul>

<?php foreach ($entriesForYear as $month => $entriesForMonth) : ?>
<?php foreach ($entriesForMonth as $entry) : ?>
    <li>
    <?=$api->e($entry['author'])?>: <em><?=$api->e($entry['title'])?></em> (<?=$api->e($monthByNumber[$month])?>)
    <?php if (isset($entry['comment'])) : ?>

    <?=$entry['comment']?>

    <?php endif; ?>

    </li>
<?php endforeach; ?>

<?php endforeach; ?>

</ul>

<?php endforeach; ?>

Das ist einerseits praktisch, andererseits führt es dazu, dass es immer mindestens drei Stellen gibt, an denen man „Logikcode“ ablegen kann. Im Inhalt selbst, in Layout-Dateien, in Modulen. Aber dazu müsste ich jetzt wirklich weiter ausholen und erst mal die Grundvorgehensweise beschreiben (viel Decorator-Pattern).

Linux

Ein Aspekt dazu ist, dass derlei Tools eben häufig Konsolentools sind und das Windows-Setup davon etwas umständlicher zu sein scheint als unter anderen Betriebssystemen. Beziehungsweise machen sich nur wenige Projekte die Mühe, einen grafischen Installer bereitzustellen, der das Setup übernimmt.

Also ... alles weitere machen wir vielleicht besser per mail (da werden vielleicht so manche "Absprachen" nötig werden). Und ich muss mir dafür Zeit lassen, das kann dauern. Und wenn die Sackgasse zu groß wird, dann werde ich abbrechen müssen. Noch gar nichts ist gewonnen.

Ich muss auch erst mal los.


  1. Mit überflüssigen .git-Dateien drin, aber egal. Die stören nicht. ↩︎

  2. Derzeit muss dazu aber kramdown installiert sein. Das wird zumindest noch um CommonMark ergänzt werden, weil ich wie gesagt einen reinen PHP-Stack will. Gibt derzeit ein einfaches API, um eigene „OutputFilter“ hinzuzufügen: https://github.com/mermshaus/horne/tree/0.3.0/src/Horne/OutputFilter (An der Stelle sieht man auch, dass das alles noch etwas experimentell ist. Der TableOfContentsOutputFilter wird sicherlich nicht dort bleiben.) ↩︎

0 52

wozu blog software ?

Pinie
  • blog
  1. 0
    Matthias Scharwies
    • blog
    • webdesign
  2. 0
    Auge
    • grafik
  3. 0
    pl
  4. 2
    mermshaus
    1. 1
      Pinie
      1. 1
        Auge
        1. 1
          mermshaus
          • blog
          • software
          1. 0

            Anmerkung für mermshaus

            Auge
            • zur info
            1. 0
              mermshaus
              1. 0
                Christian Kruse
              2. 0
                Auge
                1. 0
                  mermshaus
                  1. 0
                    Auge
                    1. 0
                      Christian Kruse
                      1. 0
                        Auge
                        • zu diesem forum
                        • zur info
                        1. 0
                          Christian Kruse
                      2. 0
                        mermshaus
    2. 1
      Pinie
  5. 0
    marctrix
  6. 0
    Pinie
    1. 0
      mermshaus
      1. 0
        Pinie
        1. 0
          mermshaus
          1. 0
            Julius
            • blog
            • markdown
            • php
            1. 0
              mermshaus
              1. 0
                Julius
                • html
                • markdown
                • php
      2. 0
        Pinie
        1. 0
          mermshaus
        2. 0
          mermshaus
          1. 0
            Pinie
            1. 1
              mermshaus
              1. 2
                Pinie
                1. 0
                  mermshaus
                2. 0
                  mermshaus
                  1. 1
                    Pinie
                    1. 0
                      mermshaus
            2. 0
              mermshaus
              1. 0
                Pinie
                1. 0
                  Auge
                  • zu diesem forum
              2. 0
                Julius
                • blog
                • javascript
                • php
                1. 0
                  mermshaus
                  1. 0
                    mermshaus
                    1. 0
                      Julius
                      • javascript
                      • php
                      • unicode
                      1. 0
                        mermshaus
                        1. 0
                          Julius
                          1. 0
                            mermshaus
                            • php
                            • unicode
                  2. 0
                    Julius
                    1. 0
                      mermshaus
                      • php
                      1. 0
                        Julius
                2. 0
                  mermshaus
                  1. 0
                    Julius