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.
- 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
namespace Acme\TestBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class AcmeTestBundle extends Bundle
{
}
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
}
}
$GLOBALS['TL_CTE']['texts']['testelement'] = '\Acme\TestBundle\Elements\TestElement';
<?php $this->extend('block_searchable'); ?>
<?php $this->block('content'); ?>
Hello World
<?php $this->endblock(); ?>
// Content elements
$GLOBALS['TL_LANG']['CTE']['testelement'] = ['Testelement', 'Gibt "Hello World" aus.'];
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]),
];
}
}
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
Website aufrufen mit /app_dev.php
.
Weitere Konfiguration siehe Kommentar von @fritzmg.
vendor/bin/contao-console cache:clear
Nützliches während der Entwicklung
app_dev.php benutzen
Über die
app_dev.php
wird bspw. der interne Cache von Contao nicht benutzt. DCA Änderungen oder Änderungen in den Übersetzungen sind damit daher sofort sichtbar (wobei es bei den Übersetzungen einen Fallstrick gibt).Um die
app_dev.php
auf dem Live Server benutzen zu können, muss zuvor über SSH ein Passwort festgelegt werden:Man kann das auch zuerst lokal machen und dann die generierte
.env
Datei auf den Server kopieren.Konfiguration der Entwicklungsumgebung
Wenn man den Symfony Profiler nicht benötigt, kann man diesen auch deaktivieren (oder nur einzelne Features davon und somit die Performance im Entwicklungsmodus verbessern:
app/config/config_dev.yml
Hinweis: Manchmal ist es sinnvoll "Die Ausgabe der Exception vereinfachen" nicht zu verwenden, um genauere Informationen über den Stack Trace der Exception zu erhalten.
Die Konfiguration "Image Cache nicht umgehen" ist seit Contao 4.5 nicht mehr notwendig.
Hat man bereits eine config.yml im Einsatz, muss man die am Anfang inkludieren: