inspiredminds/contao-news-facebook
von inspiredminds
Projekt Webseite unter Contao News Facebook Sync
Mit dieser Extension können automatisch Posts von Facebook Pages (oder Gruppen) als Nachrichten in Nachrichtenarchive importiert werden. Es können außerdem automatisch Nachrichten auf Facebook Seiten gepostet werden. Dadurch ist es möglich, ein Nachrichtenarchiv mit einer Facebook Seite synchron zu halten.
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-facebook": "^7.0"
}
}
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.
Vor Version 7.0 dieser Erweiterung muss, um sie konfigurieren zu können, zuerst eine sogenannte »Facebook App« erzeugt werden. Die Details dieser App werden dann für die Konfiguration im Backend benötigt.
Dieser Schritt kann ab Version 7.0 der Extension übersprungen werden.
https://
). Danach auf Save
klicken.https://example.com/system/modules/news_facebook/public/callback.php
. example.com
muss mit
der Domain deiner Webseite ersetzt werden. Dann auf Änderungen speichern klicken.Der Facebook Account, unter dem man die App anlegt, muss die Berechtigung haben, auf der timeline der jeweiligen Facebook Page, mit der synchronisiert werden soll, Posts machen zu dürfen (dies ist optional, wenn nur Posts von der Page in das Nachrichtenarchiv geholt werden sollen). Alternativ können aber auch weitere Administratoren oder Developer zur Facebook App unter Rollen hinzugefügt werden.
Dieser Schritt kann ab Version 7.0 der Extension übersprungen werden.
Gehe im Contao Backend zu System » Einstellungen. Dort unter Facebook App müssen die App ID und das App Secret eingegeben werden. Diese Informationen können in den Facebook App Einstellungen unter Einstellungen » Allgemeines gefunden werden.
Öffne die Einstellungen deines Nachrichtenarchivs. In der Sektion Facebook sync kann der Facebook sync aktiviert werden. Danach kann die numerische ID der Facebook Page eingegeben werden, mit der das Nachrichtenarchiv synchronisiert werden soll. Wenn automatisch Facebook Page Posts als Nachrichtenbeiträge angelegt werden sollen, dann muss die Einstellung Page Posts holen aktiviert werden. Optional kann auch ein Page Post Datum Limit eingestellt werden.
Dasselbe kann auch für eine Facebook Gruppe gemacht werden, wenn Posts dieser Gruppe zum Nachrichtenarchiv importiert werden sollen. Allerdings können keine Nachrichtenbeiträge automatisch in Gruppen gepostet werden.
Nun muss ein Access Token von Facebook geholt werden. Dazu kann die Facebook connect Schaltfläche benutzt werden. Dadurch wird man bei Facebook eingeloggt und es werden Berechtigungen für den eingeloggten Facebook Benutzer angefordert. Nachdem dies bestätigt wurde, wird ein sogenannter »Long Term Access Token« von Facebook geholt.
Falls Nachrichtenbeiträge automatisch auf der Facebook Page gepostet werden sollen, dann muss in diesem Prozess erlaubt werden, dass die Facebook App öffentliche Posts in deinem Namen machen darf. Der Facebook Account, mit dem man sich hier anmeldet, muss außerdem die Berechtigung haben, Posts auf der Timeline der jeweiligen Facebook Page posten zu dürfen.
Heruntergeladene Bilder werden im eingestellten Ordner gespeichert (Standard: files/facebook_images
). Dieser Ordner
muss in Contao 4 veröffentlicht werden!
Seit Version 3.0.0
können folgende Einstellungen in den Systemeinstellungen von Contao unter Facebook Sync
getroffen werden:
Keine OpenGraph Meta Tags: seit Version 3.0.0
der Extension wird automatisch ein og:image
meta
Tag im
<head>
eingefügt, wenn ein Nachrichtenartikel verarbeitet wird, damit das Teaserbild auch auf Facebook automatisch
ausgegeben wird, wenn der Link zu der Nachricht geteilt wird. Mit dieser Einstellung kann dies deaktiviert werden.
Als Fotos posten: seit Version 3.0.0
werden Nachrichtenbeiträge nicht mehr automatisch als Fotos gepostet,
wenn der Nachrichtenbeitrag ein Teaserbild hat. Mit der Einstellung kann dies wieder aktiviert werden.
Falls kein Hook benutzt wird, kann die Standard Überschriftenlänge über
$GLOBALS['FACEBOOK_TITLE_LENGTH'] = …;
in der eigenen config.php
eingestellt werden.
Sobald das Nachrichtenarchiv konfiguriert ist und die Page Posts holen bzw. Group Posts holen Option aktiv ist, überprüft die Erweiterung stündlich auf neue Facebook Posts über den Cronjob von Contao.
Contao Nachrichtenbeiträge werden auf Facebook unter zwei Bedingungen veröffentlicht:
In den Einstellungen der Nachricht kann außerdem ein abweichender Text für den Facebook Post angegeben werden. Andernfalls wird der Teaser Text benutzt.
Die Erweiterung überprüft minütlich auf neue Nachrichten, die auf Facebook veröffentlicht werden sollen.
Es gibt eine Schaltfläche zur manuellen Auslösung der Synchronisation im Backend. Oben bei den globalen Operationen für Nachrichtenarchive.
Die Extension stellt einige Hooks zur Verfügung, welche das Verhalten beeinflussen können, wenn zu Facebook gepostet, oder ein Post von Facebook zu Contao geholt wird.
processFacebookPost
Die Erweiterung prozessiert einen Facebook-Post und versucht diesen zu einem passenden Contao Nachrichtenbeitrag
umzuwandeln. Dieser Prozess kann mit dem processFacebookPost
selbst angepasst werden. Als Rückgabewert wird
ein Array erwartet, mit den finalen Daten für den Datenbankeintrag eines Nachrichtenbeitrags. Wenn der Rückgabewert
false
ist, wird kein Nachrichtenbeitrag erzeugt.
$arrData
Die bereits prozessierten Daten, die für den Nachrichtenbeitrag benutzt werden.$objPost
Die originalen Daten des Posts von Facebook.$objArchive
Das Newsarchiv Objekt.changeFacebookMessage
Wenn ein Contao Nachrichtenbeitrag als Facebook Post vorbereitet wird, wird entweder der Teaser oder der bei der
Nachricht angegebene Text verwendet. Falls aber automatisch dieser Text angepasst werden soll, kann dies mit dem
changeFacebookMessage
Hook gemacht werden. Als Rückgabewert wird der finale Text erwartet.
$message
Die bereits vorgefertigte Nachricht.$objArticle
Der originale Contao Nachrichtenbeitrag.$objArchive
Das Newsarchiv Objekt.Das folgende Beispiel implementiert einen Hook, der die URL zum Nachrichtenbeitrag an den Text des Facebook-Posts anhängt:
// src/EventListener/ChangeFacebookMessageListener.php
namespace App\EventListener;
use Contao\CoreBundle\DependencyInjection\Attribute\AsHook;
use Contao\News;
use Contao\NewsArchiveModel;
use Contao\NewsModel;
#[AsHook('changeFacebookMessage')]
class ChangeFacebookMessageListener
{
public function __invoke(string $message, NewsModel $news, NewsArchiveModel $archive): string
{
// Append the URL to photo posts
if ($news->addImage && $news->fbPostAsPhoto) {
$message .= "\n\n".News::generateNewsUrl($news, false, true);
}
return $message;
}
}
// src/EventListener/ChangeFacebookMessageListener.php
namespace App\EventListener;
use Contao\CoreBundle\DependencyInjection\Attribute\AsHook;
use Contao\News;
use Contao\NewsArchiveModel;
use Contao\NewsModel;
#[AsHook('changeFacebookMessage')]
class ChangeFacebookMessageListener
{
public function __invoke(string $message, NewsModel $news, NewsArchiveModel $archive): string
{
// Append the URL to photo posts
if ($news->addImage && $news->fbPostAsPhoto) {
$message .= "\n\n".News::generateNewsUrl($news, false, true);
}
return $message;
}
}
# config/services.yaml
services:
App\EventListener\ActivateAccountListener:
tags:
- { name: contao.hook, hook: changeFacebookMessage }
// src/EventListener/ChangeFacebookMessageListener.php
namespace App\EventListener;
use Contao\CoreBundle\ServiceAnnotation\Hook;
use Contao\News;
use Contao\NewsArchiveModel;
use Contao\NewsModel;
class ChangeFacebookMessageListener
{
public function __invoke(string $message, NewsModel $news, NewsArchiveModel $archive): string
{
// Append the URL to photo posts
if ($news->addImage && $news->fbPostAsPhoto) {
$message .= "\n\n".News::generateNewsUrl($news, false, true);
}
return $message;
}
}
// contao/config.php
use App\EventListener\ChangeFacebookMessageListener;
$GLOBALS['TL_HOOKS']['changeFacebookMessage'][] = [ChangeFacebookMessageListener::class, '__invoke'];
// src/EventListener/ChangeFacebookMessageListener.php
namespace App\EventListener;
use Contao\CoreBundle\ServiceAnnotation\Hook;
use Contao\News;
use Contao\NewsArchiveModel;
use Contao\NewsModel;
class ChangeFacebookMessageListener
{
public function __invoke(string $message, NewsModel $news, NewsArchiveModel $archive): string
{
// Append the URL to photo posts
if ($news->addImage && $news->fbPostAsPhoto) {
$message .= "\n\n".News::generateNewsUrl($news, false, true);
}
return $message;
}
}
In den Nachrichtentemplates stehen zusätzliche Daten zur Verfügung:
fbData
Die originalen Daten des Posts von Facebook.fbPostId
Die Facebook ID des verknüpften Facebook Posts.fromFb
Gibt an, ob der Nachrichtenbeitrag ursprünglich von Facebook importiert wurde.