Contao-Camp 2024
Ergebnis 1 bis 9 von 9

Thema: DCA-Container in Contao 4 Bundle

  1. #1
    Contao-Nutzer Avatar von chatjack
    Registriert seit
    02.09.2012.
    Ort
    Essen
    Beiträge
    160

    Standard DCA-Container in Contao 4 Bundle

    Hallo zusammen,

    bei der Erstellung von Bundles für Contao 4 bin ich immer noch am verzweifeln. Es gibt zwar inzwischen einige Tutorials. Diese beinhalten aber leider so viel neues im Vergleich zu 3.5, dass es meine mentale Kapazität sprengt. Wie eine detailliert beschriebene Autofahrt von Berlin nach München, aus der ich aber immer noch nicht in der Lage bin herzuleiten, wie ich nach Brandenburg komme. Zurzeit scheitere ich bereits dabei, Contao zur Berücksichtigung eines DCA-Containers zu bewegen. Über diesen möchte ich gerne die Tabelle "tl_cssutils" anlegen.

    composer.json
    Code:
    {
    	"name":"bohnmedia/css-utils-bundle",
    	"description":"Generate css utilities from backend",
    	"keywords":["contao","css","sass"],
    	"type":"contao-bundle",
    	"homepage":"https://github.com/bohnmedia/contao-css-utils-bundle",
    	"license":"MIT",
    	"authors":[
    		{
    			"name":"bohn.media",
    			"homepage":"https://bohn.media",
    			"role":"Developer"
    		}
    	],
    	"require": {
    		"contao/core-bundle":"~4.4",
            	"leafo/scssphp": "^0.6 || ^0.7",
    		"menatwork/contao-multicolumnwizard": "~3.2"
    	},
        "conflict": {
            "contao/core": "*",
            "contao/manager-plugin": "<2.0 || >=3.0"
        },
        "extra": {
            "contao-manager-plugin": "BohnMedia\\CssUtilsBundle\\ContaoManager\\Plugin"
        },
    	"autoload":{
    		"psr-4": {
    			"BohnMedia\\CssUtilsBundle\\": "src/"
    		},
            "classmap": [
    			"src/Classes/"
    		]
    	}
    }
    src/CssUtilsBundle.php
    Code:
    <?php
    
    namespace BohnMedia\CssUtilsBundle;
    
    use Symfony\Component\HttpKernel\Bundle\Bundle;
    
    class CssUtilsBundle extends Bundle
    {
    }
    src/Resources/contao/dca/tl_theme.php (funktioniert)
    Code:
    <?php
    	// NEW OPERATION
    	$operations = array(
    		'cssUtils' => array(
    			'href' => 'table=tl_cssutils',
    			'icon' => 'bundles/cssutils/css.svg'
    		)
    	);
    	
    	// FIND INDEX OF CSS
    	$cssIndex = array_search("css",array_keys($GLOBALS['TL_DCA']['tl_theme']['list']['operations'])) + 1;
    	
    	// INSERT AFTER CSS
    	$GLOBALS['TL_DCA']['tl_theme']['list']['operations'] = array_merge(
    		array_slice($GLOBALS['TL_DCA']['tl_theme']['list']['operations'], 0, $cssIndex),
    		$operations,
    		array_slice($GLOBALS['TL_DCA']['tl_theme']['list']['operations'], $cssIndex)
    	);
    	
    	// ADD tl_css_utils AS CHILD TABLE
    	$GLOBALS['TL_DCA']['tl_theme']['config']['ctable'][] = 'tl_cssutils';
    src/Resources/contao/dca/tl_cssutils.php (funktioniert nicht)
    Code:
    <?php
    
    $GLOBALS['TL_DCA']['tl_cssutils'] = array
    (
    	'config' => array
    	(
    		'dataContainer'		=> 'Table',
    		'ptable'			=> 'tl_theme',
    	),
    	'sql' => array
    	(
    		'keys' => array
    		(
    			'id' => 'primary'
    		)
    	),
    	'list' => array
    	(
    		'sorting' => array
    		(
    			'mode'			=> 4,
    			'fields'		=> array('name'),
    			'panelLayout'	=> 'filter;sort,search,limit',
    			'headerFields'	=> array('name', 'author', 'tstamp')
    		),
    		'global_operations' => array
    		(
    			'all' => array
    			(
    				'href'                => 'act=select',
    				'class'               => 'header_edit_all',
    				'attributes'          => 'onclick="Backend.getScrollOffset()" accesskey="e"'
    			)
    		),
    		'operations' => array
    		(
    			'edit' => array
    			(
    				'href'                => 'act=edit',
    				'icon'                => 'edit.svg'
    			),
    			'copy' => array
    			(
    				'href'                => 'act=paste&amp;mode=copy',
    				'icon'                => 'copy.svg',
    				'attributes'          => 'onclick="Backend.getScrollOffset()"'
    			),
    			'cut' => array
    			(
    				'href'                => 'act=paste&amp;mode=cut',
    				'icon'                => 'cut.svg',
    				'attributes'          => 'onclick="Backend.getScrollOffset()"'
    			),
    			'delete' => array
    			(
    				'href'                => 'act=delete',
    				'icon'                => 'delete.svg',
    				'attributes'          => 'onclick="if(!confirm(\'' . $GLOBALS['TL_LANG']['MSC']['deleteConfirm'] . '\'))return false;Backend.getScrollOffset()"'
    			),
    			'show' => array
    			(
    				'href'                => 'act=show',
    				'icon'                => 'show.svg'
    			)
    		)
    	),
    	'palettes' => array(
    		'default'	=>	'{title_legend},name'
    	),
    	'fields' => array
    	(
    		'id' => array
    		(
    			'sql'                     => "int(10) unsigned NOT NULL auto_increment"
    		),
    		'pid' => array
    		(
    			'foreignKey'              => 'tl_theme.name',
    			'sql'                     => "int(10) unsigned NOT NULL default 0",
    			'relation'                => array('type'=>'belongsTo', 'load'=>'lazy')
    		),
    		'tstamp' => array
    		(
    			'sql'                     => "int(10) unsigned NOT NULL default 0"
    		),
    		'name' => array
    		(
    			'exclude'                 => true,
    			'sorting'                 => true,
    			'flag'                    => 1,
    			'search'                  => true,
    			'inputType'               => 'text',
    			'eval'                    => array('mandatory'=>true, 'maxlength'=>255, 'tl_class'=>'w50'),
    			'sql'                     => "varchar(255) NOT NULL default ''"
    		)
    	)
    );
    Die Änderungen für "tl_theme", die ich in der "tl_theme.php" definiert habe werden auch übernommen, aber die "tl_cssutils.php" im selben Ordner wird einfach ignoriert. Ich habe den Env- und Prod-Cache in den letzten 3 Stunden mehrmals gelöscht und das Bundle auch schon neu installiert, aber das Installtool meldet mir immer noch, die Datenbank sei aktuell, obwohl die Tabelle fehlt.

    db.png

    Versuche ich nun im Backend in die Layout-Einstellungen zu gehen, erhalte ich folgende Fehlermeldung.

    An exception occurred while executing 'SELECT c.id FROM tl_cssutils c LEFT JOIN tl_theme p ON c.pid=p.id WHERE p.id IS NULL': SQLSTATE[42S02]: Base table or view not found: 1146 Table 'test1.tl_cssutils' doesn't exist
    Diese kommt aller Wahrscheinlichkeit durch die Anpassung in der "tl_theme" (letzte Zeile). Vielleicht ist es nur eine kleine Anpassung, die für Contao 4.4 notwendig ist.

    Dank und Gruß
    Dennis
    Geändert von chatjack (31.07.2019 um 22:18 Uhr)

  2. #2
    Contao-Nutzer Avatar von chatjack
    Registriert seit
    02.09.2012.
    Ort
    Essen
    Beiträge
    160

    Standard

    Inzwischen gibt es auch ein Git.

    https://github.com/bohnmedia/contao-css-utils-bundle

  3. #3
    Contao-Urgestein
    Registriert seit
    29.10.2009.
    Ort
    Magdeburg
    Beiträge
    2.020
    Partner-ID
    626
    User beschenken
    Wunschliste

    Standard

    Der neue Datacontainer muss mindestens einem Backend-Modul zugewiesen werden:

    https://github.com/contao/contao/blo...config.php#L35

  4. #4
    Contao-Nutzer
    Registriert seit
    03.09.2009.
    Ort
    Baunatal
    Beiträge
    122
    Partner-ID
    6087

    Standard

    Hast du die Tabelle über das Install Tool in der Datenbank angelegt?

  5. #5
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.050
    Partner-ID
    10107

    Standard

    Zitat Zitat von Wusch Beitrag anzeigen
    Hast du die Tabelle über das Install Tool in der Datenbank angelegt?
    Tabellen, die du in einem DCA definiert hast, legst du ja nicht selbst an.

  6. #6
    Contao-Nutzer
    Registriert seit
    03.09.2009.
    Ort
    Baunatal
    Beiträge
    122
    Partner-ID
    6087

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Tabellen, die du in einem DCA definiert hast, legst du ja nicht selbst an.
    Naja, es muss schon das Install Tool drüber laufen und das Create Statement ausführen. Ansonsten kann sie bei einem join nicht gefunden werden.

    PS: Habe den Absatz, dass das Install Tool meldet, dass alles aktuell ist überlesen ...
    Geändert von Wusch (01.08.2019 um 08:57 Uhr)

  7. #7
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.050
    Partner-ID
    10107

    Standard

    Natürlich. Und er hat ja geschrieben, dass das Install Tool es nicht macht.

  8. #8
    Contao-Nutzer
    Registriert seit
    03.09.2009.
    Ort
    Baunatal
    Beiträge
    122
    Partner-ID
    6087

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Natürlich. Und er hat ja geschrieben, dass das Install Tool es nicht macht.
    Ja, habe ich dann auch doch noch gelesen

    Der Part:
    PHP-Code:
    'sql' => array
        (
            
    'keys' => array
            (
                
    'id' => 'primary'
            
    )
        ), 
    Gehört in den Bereich config. Dann sollte es gehen.

  9. #9
    Contao-Nutzer Avatar von chatjack
    Registriert seit
    02.09.2012.
    Ort
    Essen
    Beiträge
    160

    Standard

    Oh mann, wie bescheuert. Klar, das Array "sql" war an der falschen Stelle.

    Bin irgendwie anfällig für diese Art von Fehler und wenn dann keine Fehlermeldung aufploppt, bin ich total aufgeschmissen.

    Hab die Tabelle zusätzlich in die Config aufgenommen. Nun konnte ich die Tabelle anlegen.

    https://github.com/bohnmedia/contao-...77083850ea9d57

    Vielen Dank euch!

    Schöne Grüße
    Dennis
    Geändert von chatjack (01.08.2019 um 10:12 Uhr)

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •