Contao News Sync

inspiredminds/contao-news-sync

von inspiredminds

Projekt Webseite unter Contao News Sync

Mit dieser Extension können automatisch Nachrichtenartikel zwischen verschiedenen Contao Installationen synchronisiert werden. Die Synchronisationsrichtung kann dabei beliebig festgelegt werden (etwa A nach B, B nach A oder beide Richtungen). Die Extension kann auch dazu verwendet werden, Nachrichtenartikel einmalig aus einer Contao Installation in eine andere Contao Installation zu importieren, etwa für den Relaunch einer Website. Da die Extension die Contao Versionen 3.5 und 4.4+ unterstützt, können damit auch Nachrichten aus älteren Contao Versionen in die neueste Contao Version übertragen werden.

Installation

Um diese Erweiterung zu installieren, muss zuerst die composer.json der eigenen Contao Installation modifiziert werden. Dabei sind zwei Anpassungen notwendig: das private Repository hinzufügen und die Abhängigkeit hinzufügen.

Um das Repository hinzuzufügen, muss folgendes in der composer.json eingefügt werden:

{
    "repositories": [
        {
            "type": "composer",
            "url": "https://token:<YOUR_TOKEN>@packdis.inspiredminds.at/r"
        }
    ]
}

<YOUR_TOKEN> muss mit dem Repository Token ersetzt werden, welches von inspiredminds geschickt wurde.

Um die Abhängigkeit hinzuzufügen, muss folgendes in der composer.json eingefügt werden:

{
    "require": {
        "inspiredminds/contao-news-sync": "^4.0"
    }
}
Komplettes Beispiel anzeigen
{
    "name": "contao/managed-edition",
    "type": "project",
    "description": "Contao Open Source CMS",
    "license": "LGPL-3.0-or-later",
    "authors": [
        {
            "name": "Leo Feyer",
            "homepage": "https://github.com/leofeyer"
        }
    ],
    "require": {
        "php": "^7.1",
        "contao/conflicts": "@dev",
        "contao/manager-bundle": "4.9.*",
        "inspiredminds/contao-news-sync": "^3.0"
    },
    "conflict": {
        "contao-components/installer": "<1.3"
    },
    "extra": {
        "contao-component-dir": "assets",
        "symfony": {
            "require": "^4.2"
        }
    },
    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    },
    "scripts": {
        "post-install-cmd": [
            "Contao\\ManagerBundle\\Composer\\ScriptHandler::initializeApplication"
        ],
        "post-update-cmd": [
            "Contao\\ManagerBundle\\Composer\\ScriptHandler::initializeApplication"
        ]
    },
    "repositories": [
        {
            "type": "composer",
            "url": "https://token:<YOUR_TOKEN>@packdis.inspiredminds.at/r"
        }
    ]
}

Nachdem diese Änderungen gemacht wurden, kann nun ein composer update auf der Kommandozeile oder eine Paketaktualisierung im Contao Manager durchgeführt werden. Danach wie gewohnt das Contao Install Tool aufrufen, um die Datenbank zu aktualisieren.

Contao 3

Die Installation unter Contao 3 setzt die Verwendung der Composer Paketverwaltung voraus. Ansonsten ist die Vorgehensweise gleich. Die von der Composer Paketverwaltung verwendete composer.json befindet sich im composer/ Unterordner der Contao 3 Installation. Als Versionsangabe muss "^1.0" verwendet werden.

Falls die Composer Paketverwaltung in Contao 3 noch nicht eingesetzt wird, kann diese natürlich jederzeit installiert werden. Falls die Composer Paketverwaltung nur für diese Extension, und nur einmalig gebraucht wird (eben etwa um alle Nachrichten einmalig in eine andere Contao Installation zu übertragen), kann folgende Anleitung benutzt werden:

Composer Paketverwaltung in Contao 3 - Experteninstallation

Composer Erweiterung installieren

Zuerst muss die composer Erweiterung installiert werden. In der Erweiterungsverwaltung unter Erweiterung installieren nach composer suchen. Die Installation von Version 0.16.6 mit Weiter mehrmals bestätigen.

Erweiterungsverwaltung Erweiterungsverwaltung

Composer-Installation

Nach erfolgreicher Installation der Erweiterung wird automatisch auf die neue Paketverwaltung im Backend weitergeleitet. Dort bestätigt man nun die Installation von Composer.

Composer-Installation Composer-Installation

Migration überspringen

Danach würde die Composer Paketverwaltung eine Migration der bestehenden Extensions vom alten Contao Extension Repository auf die neue Paketverwaltung durchführen. Diese Migration ist allerdings nicht notwendig für die einmalige Benutzung der News Sync Extension. Daher kann die Migration mit Migration überspringen (Nur wenn du weißt was du tust) übersprungen werden.

Migration Migration

Einstellungen ändern

In der Paketverwaltung sollte man nun rechts oben unter Einstellungen die Einstellung Minimale Stabilität auf Stabil ändern und speichern.

Einstellungen Einstellungen

Expertenmodus

Danach kann man direkt in den Einstellungen rechts oben auf den Expertenmodus gehen, wo man die composer.json der Paketverwaltung editiert. Hier kann nun die composer.json wie im Punkt Installation beschrieben angepasst werden. Danach die Änderungen speichern. Insgesamt würde die composer.json dann so aussehen:

{
    "name": "local/website",
    "description": "A local website project",
    "type": "project",
    "license": "proprietary",
    "require": {
        "contao-community-alliance/composer-client": "~0.14",
        "inspiredminds/contao-news-sync": "^1.0"
    },
    "prefer-stable": true,
    "minimum-stability": "stable",
    "config": {
        "preferred-install": "dist",
        "cache-dir": "cache",
        "component-dir": "../assets/components"
    },
    "repositories": [
        {
            "type": "composer",
            "url": "https://legacy-packages-via.contao-community-alliance.org"
        },
        {
            "type": "artifact",
            "url": "packages"
        },
        {
            "type": "composer",
            "url": "https://token:<YOUR_TOKEN>@packdis.inspiredminds.at/r"
        }
    ],
    "extra": {
        "contao": {
            "migrated": "skipped"
        }
    }
}

Composer-Einstellungen

Wenn man die nachfolgende composer update Operation über das Backend durchführen möchte, statt über die Kommandozeile, dann empfiehlt es sich unter System » Einstellungen » Composer-Einstellungen den Detached Mode einzustellen.

Composer-Einstellungen Composer-Einstellungen

Die genauen Angaben zum PHP CLI Pfad variieren je nach Serverumgebung und eingesetzter PHP Version und können daher hier nicht festgelegt werden. Mögliche Angaben zum PHP Pfad je nach Hoster bekommt man im Wiki der Composer Erweiterung oder auch im Wiki des Contao Managers. Auch die Angabe zum memory_limit Parameter muss individuell eingestellt werden. Je nach Serverumgebung ist es am besten den Parameter auf -1 zu setzen, oder auf 4G, oder gar ganz zu entfernen.

Composer Aktualisieren

Die Composer Erweiterung lädt automatisch die neueste composer.phar. Allerdings handelt es sich dabei um eine Entwicklerversion, die vermutlich nicht mit der Extension kompatibel sein wird. Daher muss diese Datei manuell ersetzt werden. Die neueste 1.x Version des Composers erhält man unter getcomposer.org/download/. Die bestehende composer/composer.phar im Contao Installationsverzeichnis ersetzt man dann mit der heruntergeladenen Datei.

Paketaktualisierung durchführen

Nun kann die Paketaktualisierung durchgeführt werden, womit die News Sync Extension tatsächlich installiert wird. Dies ist der problematischste Punkt, denn diese Operation braucht viel Arbeitsspeicher. Die Paketaktualisierung kann direkt über das Backend oder auf der Kommandozeile angestoßen werden.

Backend

Hat man die entsprechenden Composer-Einstellungen zuvor getroffen, kann die Paketaktualisierung in der Paketverwaltung mit einem Klick auf Pakete Aktualisieren angestoßen werden. Die Paketaktualisierung muss, bei der ersten Benutzung, insgesamt drei mal durchgeführt werden.

Composer Update 1 Composer Update 1

Composer Update 2 Composer Update 2

Composer Update 3 Composer Update 3

Danach ist die Extension installiert. Im Anschluss bietet die Paketverwaltung gleich direkt an, die Datenbank-Updates durchführen zu lassen. Alternativ kann man dies auch wie gewohnt im Contao Install Tool durchführen lassen.

Kommandozeile

Um die Paketaktualisierung auf der Kommandozeile durchzuführen, begibt man sich auf der Konsole in den composer/ Unterordner der Contao Installation. Das auszuführende Kommando lautet:

php composer.phar update --optimize-autoloader
Anmerkung

Im angegebenen Kommando muss php mit dem Pfad zum passenden PHP CLI ersetzt werden. Dies hängt von der jeweiligen Serverumgebung ab. Siehe dazu auch der Punkt Composer-Einstellungen.

Das Kommando muss insgesamt drei mal ausgeführt werden:

$ php composer.phar update --optimize-autoloader
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 27 installs, 0 updates, 0 removals
  - Installing contao-community-alliance/composer-plugin (2.4.3): Loading from cache
  - Installing swiftmailer/swiftmailer (v5.4.12): Loading from cache
  - Installing matthiasmullie/path-converter (1.1.3): Loading from cache
  - Installing matthiasmullie/minify (1.3.63): Loading from cache
  - Installing contao-components/compass (0.12.2.1): Loading from cache
  - Installing true/punycode (1.1.0): Loading from cache
  - Installing tecnick.com/tcpdf (6.3.5): Loading from cache
  - Installing simplepie/simplepie (1.5.5): Loading from cache
  - Installing phpspec/php-diff (v1.1.0): Loading from cache
  - Installing oyejorge/less.php (v1.7.0.14): Loading from cache
  - Installing michelf/php-markdown (1.9.0): Loading from cache
  - Installing leafo/scssphp (v0.8.4): Loading from cache


  [ContaoCommunityAlliance\Composer\Plugin\DuplicateContaoException]
  Warning: Contao core 3.5.40 was about to get installed but 3.5.40 has been found in project root, to recover from this problem please restart the operation
$ php composer.phar update --optimize-autoloader


  [ContaoCommunityAlliance\Composer\Plugin\ConfigUpdateException]  
  legacy packages repository was added to root composer.json
$ php composer.phar update --optimize-autoloader
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 14 installs, 0 updates, 11 removals
  - Removing true/punycode (1.1.0)
  - Removing tecnick.com/tcpdf (6.3.5)
  - Removing swiftmailer/swiftmailer (v5.4.12)
  - Removing simplepie/simplepie (1.5.5)
  - Removing phpspec/php-diff (v1.1.0)
  - Removing oyejorge/less.php (v1.7.0.14)
  - Removing michelf/php-markdown (1.9.0)
  - Removing matthiasmullie/path-converter (1.1.3)
  - Removing matthiasmullie/minify (1.3.63)
  - Removing leafo/scssphp (v0.8.4)
  - Removing contao-components/compass (0.12.2.1)
  - Installing contao-community-alliance/composer-client (0.17.0): Loading from cache
  - removed 114 files
  - created 1 links
  - Installing symfony/polyfill-mbstring (v1.17.0): Loading from cache
  - Installing paragonie/random_compat (v9.99.99): Loading from cache
  - Installing symfony/polyfill-php70 (v1.17.0): Loading from cache
  - Installing symfony/http-foundation (v3.4.40): Loading from cache
  - Installing symfony/polyfill-ctype (v1.17.0): Loading from cache
  - Installing symfony/event-dispatcher (v2.8.52): Loading from cache
  - Installing ramsey/uuid (3.9.3): Loading from cache
  - Installing pimple/pimple (v1.1.1): Loading from cache
  - Installing contao-community-alliance/dependency-container (1.8.3): Loading from cache
  - created 1 links
  - Installing contao-community-alliance/event-dispatcher (1.3.0): Loading from cache
  - created 1 links
  - Installing richardhj/contao-simple-ajax (v1.2.1): Loading from cache
  - removed 2 files
  - created 3 links
  - Installing codefog/contao-haste (4.24.6): Loading from cache
  - created 1 links
  - Installing inspiredminds/contao-news-sync (1.8.4): Loading from cache
  - created 1 links
Package richardhj/contao-simple-ajax is abandoned, you should avoid using it. Use symfony/routing instead.
Writing lock file
Generating optimized autoload files
4 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
Runonce created with 1 updates

Danach muss wie gewohnt das Contao Install Tool aufgerufen werden, um die Datenbank zu aktualisieren.

Konfiguration

Die Extension muss in allen Contao Installationen installiert werden, die in die Synchronisation der Nachrichten involviert sein sollen. Nach der Installation stehen zusätzliche Einstellungen in den Nachrichtenarchiven unter dem Punkt Synchronisation zur Verfügung.

Um die Nachrichten eines Nachrichtenarchivs als Quelle für die Synchronisation zur Verfügung zu stellen, muss die Einstellung Quelle für Synchronisation aktiviert werden.

News Sync Einstellungen News Sync Einstellungen

Um Nachrichten in einem Nachrichtenarchiv von einer Quelle holen zu lassen muss die Einstellung Ziel für Synchronisation aktiviert werden. Danach stehen zusätzliche Einstellungen zur Verfügung. Unter Quell-URL muss zunächst die URL eingetragen werden, unter der die andere Contao Installation erreichbar ist. Speichert man die Einstellungen danach, stehen unter News Archive alle Nachrichtenarchive zur Auswahl, die auf der Quell-Installation für die Synchronisation freigegeben.

News Sync Einstellungen News Sync Einstellungen

  • News Archive - damit aktiviert man die Nachrichtenarchive, aus denen Nachrichten aus der Quell-Installation geholt werden sollen.
  • Auf Kategorien beschränken - ist in beiden Installationen die codefog/contao-news_categories Extension installiert, kann die Synchronisation auf bestimmte Kategorien beschränkt werden.1
  • Alias-Duplikate ignorieren - in manchen Situationen kann es sein, dass man bereits Nachrichten mit dem selben Alias in der Ziel-Installation hat. Mit dieser Option werden diese Nachrichten übersprungen. Andernfalls wird ein Duplikat angelegt.
  • Periodisch synchronisieren - dies aktiviert die periodische Synchronisation über den Contao Cronjob. Die Synchronisierung erfolgt stündlich.
  • Einträge aktualisieren - ist diese Einstellung aktiv, werden Änderungen in der Quell-Installation bereits synchronisierter Nachrichten in der Ziel-Installation übernommen.
  • Zielverzeichnis - hier muss ein Verzeichnis für die synchronisierten Bilddaten und Anhänge angegeben werden.
Info

1 Dies funktioniert derzeit noch nur mit Version 2.x der news_categories Extension.

Synchronisation

Die Aktualisierung der Nachrichten kann auf der Ziel-Installation auf drei verschiedene Arten ausgelöst werden.

  • Kommando: auf der Kommandozeile kann folgendes Kommando benutzt werden: vendor/bin/contao-console contao_news_sync:import
  • Backend: in der Übersicht der Nachrichtenarchive gibt es bei den globalen Operationen einen zusätzlichen News holen Link.
  • Cronjob: bei allen Nachrichtenarchiven, wo die periodische Synchronisierung aktiviert worden ist, werden die Nachrichten stündlich über den Contao Cronjob abgeholt.

Sicherheitshinweis

Die Nachrichten und Inhaltselemente aller Nachrichtenarchive, die als Quelle für die Synchronisierung freigegeben wurden, sind öffentlich über die API der News Sync Extension erreichbar.