Der Fehler wurde inzwischen in der "system/modules/bas/forms/FormProducts.php" entdeckt. Hier steckte noch der alte Klassenname drin.
Hallo zusammen,
ich versuche gerade ein Frontend-Widget in Contao 4 zu entwickeln. Leider bekomme ich zurzeit überhaupt keine Ausgabe. Da seit Contao 4 ja einiges über Symfony läuft, habe ich noch arg meine Probleme zu verstehen, wo es ganau hakt.
Das Feld wird zwar in der Auswahl angezeigt und kann es auch befüllen. In der Übersicht bleibt es aber leer und auch im Frontend sieht man nix.
contao_forum_produktauswahl.PNG
contao_forum_luecke.PNG
Ich vermute, dass die Klasse für das Frontend-Widget gar nicht von Contao geladen wird und die Ausgabe nach Prüfung auf die Klasse einfach übersprungen wird. Es wurden inzwischen sämtliche Caches (Prod-Cache, Dev-Cache, Composer-Class-Loader, Composer-Cache, sowie alle Caches über das Contao-Backend) geleert. Das Backend wird über "app_dev" aufgerufen. Ich hängt leider schon den halben Tag an diesem Problem fest und bin für jeden Tipp dankbar.
Der Vollständigkeit halber mal alle Dateien, die zum Widget gehören. Ich habe die nach und nach runter gekürzt, weshalb das Ganze inzwischen recht übersichtlich ausfällt.
system/modules/bas/config/autoload.ini
system/modules/bas/config/autoload.php
system/modules/bas/config/config.php
system/modules/bas/dca/tl_form_field.php
system/modules/bas/forms/FormProducts.php
system/modules/bas/languages/de/tl_form_field.php
system/modules/bas/templates/form_products.html5
system/modules/bas/config/autoload.ini
PHP-Code:
;;
; List modules which are required to be loaded beforehand
;;
requires[] = "core"
;;
; Configure what you want the autoload creator to register
;;
register_namespaces = false
register_classes = true
register_templates = true
system/modules/bas/config/autoload.php
PHP-Code:
<?php
/**
* Register the classes
*/
ClassLoader::addClasses(array
(
// Forms
'FormProducts' => 'system/modules/bas/forms/FormProducts.php',
));
/**
* Register the templates
*/
TemplateLoader::addFiles(array
(
'form_products' => 'system/modules/bas/templates',
));
system/modules/bas/config/config.php
PHP-Code:
<?php
$GLOBALS['TL_FFL']['products'] = 'FormProducts';
system/modules/bas/dca/tl_form_field.php
PHP-Code:
<?php
$GLOBALS['TL_DCA']['tl_form_field']['palettes']['products'] = "{type_legend},type,name,label;{options_legend},options;";
system/modules/bas/forms/FormProducts.php
Achtung: Hier musste in Zeile 3 statt "ProductWidgets" der Klassenname "FormProducts" verwendet werden.
PHP-Code:
<?php
class ProductsWidget extends \Widget
{
protected $blnSubmitInput = true;
protected $blnForAttribute = true;
protected $strTemplate = 'form_products';
protected $strPrefix = 'widget widget-products';
public function parse($arrAttributes=null)
{
return "Output from parse function.";
}
public function generate()
{
return "Output from generate function.";
}
}
system/modules/bas/languages/de/tl_form_field.php
PHP-Code:
<?php
$GLOBALS['TL_LANG']['FFL']['products'] = array('Produktauswahl', 'Auswahl für mehrere Produkte');
system/modules/bas/templates/form_products.html5
PHP-Code:
Output from template.
Hat jemand eine Idee, warum die Klasse nicht geladen werden könnte?
Beste Grüße und
vielen Dank,
Dennis
Lesezeichen