Contao 4 Lokales Bundle
Mit der folgenden Anleitung wird ein lokales Contao 4 Bundle angelegt, das ein Inhaltselement mit der Ausgabe "Hello World" erzeugt.
Das Bundle wird nicht über Composer installiert, sondern einfach in die Anwendung gelegt. Es wird nicht das AppBundle verwendet, sondern ein eigener Vendor und Bundle Name.
Der Vendor Name für das Beispiel ist "Acme" der Bundle Name "TestBundle". Diese Strings müssen bei einem eigenen Bundle entsprechend ersetzt werden.
Bundle Erstellung
Dateistruktur
- Im Root folgenden Ordner anlegen src/Acme/TestBundle.
- Dort folgende Ordner- und Dateistruktur anlegen
- Elements
- TestElement.php
- Resources
- contao
- config
- config.php
- templates
- elements
- ce_testelement.html5
- elements
- languages
- de
- default.php
- de
- config
- contao
- AcmeTestBundle.php
- Elements
Code
AcmeTestBundle.php
namespace Acme\TestBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class AcmeTestBundle extends Bundle
{
}
Elements/TestElement.php
namespace Acme\TestBundle\Elements;
class TestElement extends \ContentElement
{
protected $strTemplate = 'ce_testelement';
/**
* Displays a wildcard in the back end.
*
* @return string
*/
public function generate()
{
if (TL_MODE == 'BE') {
$template = new \BackendTemplate('be_wildcard');
$template->wildcard = '### '.utf8_strtoupper($GLOBALS['TL_LANG']['CTE']['testelement'][0]).' ###';
return $template->parse();
}
return parent::generate();
}
/**
* Generates the content element.
*/
protected function compile()
{
// Do something
}
}
Resources/contao/config/config.php
$GLOBALS['TL_CTE']['texts']['testelement'] = '\Acme\TestBundle\Elements\TestElement';
Resources/contao/templates/elements/ce_testelement.html5
<?php $this->extend('block_searchable'); ?>
<?php $this->block('content'); ?>
Hello World
<?php $this->endblock(); ?>
Resources/contao/languages/de/default.php
// Content elements
$GLOBALS['TL_LANG']['CTE']['testelement'] = ['Testelement', 'Gibt "Hello World" aus.'];
Bundle im System bekannt machen
Contao Manager Plugin
Im Ordner app die Datei ContaoManagerPlugin.php anlegen mit folgendem Inhalt.
use Contao\CoreBundle\ContaoCoreBundle;
use Contao\ManagerPlugin\Bundle\BundlePluginInterface;
use Contao\ManagerPlugin\Bundle\Parser\ParserInterface;
use Contao\ManagerPlugin\Bundle\Config\BundleConfig;
use Acme\TestBundle\AcmeTestBundle;
class ContaoManagerPlugin implements BundlePluginInterface
{
/**
* {@inheritdoc}
*/
public function getBundles(ParserInterface $parser)
{
return [
BundleConfig::create(AcmeTestBundle::class)->setLoadAfter([ContaoCoreBundle::class]),
];
}
}
Composer
In der Datei composer.json folgendes ergänzen.
"autoload": {
"classmap": [
"app/ContaoManagerPlugin.php"
],
"psr-4": {
"Acme\\TestBundle\\": "src/Acme/TestBundle/"
}
}
Danach Autoload Konfiguration aktualisieren mit folgendem Befehl.
composer install --optimize-autoloader
Nützliches während der Entwicklung
Cache deaktivieren
Website aufrufen mit /app_dev.php
.
Weitere Konfiguration siehe Kommentar von @fritzmg.
Cache leeren
vendor/bin/contao-console cache:clear
Das:
ist in Contao 4 nicht notwendig. Generell brauchst du in Contao 4 keine
Resources/contao/config/autoload.php
für ein Bundle (im Normalfall).