Contao-Camp 2024
Ergebnis 1 bis 12 von 12

Thema: Probleme Klasse zu laden

  1. #1
    Contao-Nutzer
    Registriert seit
    10.01.2011.
    Beiträge
    234

    Standard Probleme Klasse zu laden

    Hallo,

    ich habe eine Contao 4 Erweiterung in "src" folder.
    Wenn ich in "Resources/contao/config/config.php" den hook eintrage bekomme ich die Meldung:

    Attempted to load class "ChangelanguageNavigationListener" from namespace "Vendor\Extension\EventListener".\nDid you forget a "use" statement for another namespace? at /var/www/html/dev/vendor/contao/core-bundle/src/Resources/contao/library/Contao/System.php:211)"} []

    Wie bekomme ich die Klasse in dem Fall geladen? Danke

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

    Standard

    Welche Contao Version? Poste den Pfad deiner Klasse, den Code und deine composer.json.

  3. #3
    Contao-Nutzer
    Registriert seit
    10.01.2011.
    Beiträge
    234

    Standard

    Version 4.4.46

    /src/MyModuls/Produkte/Resources/contao/config/config.php:
    PHP-Code:
    <?php
    array_insert
    ($GLOBALS['BE_MOD']['MyModuls'], 1, array
    (
        
    'Produkte' => array
        (
            
    'tables'      => array('tl_ss_produkte'),
            
    'export_csv'  => array('huh.exporter.action.backendexport''export')
        )
    )); 
     

    $GLOBALS['TL_CTE']['MyModuls']['products']         = '\\MyModuls\\Produkte\\classes\\elements\\ContentProduct';
    $GLOBALS['TL_CTE']['MyModuls']['productdetails']   = '\\MyModuls\\Produkte\\classes\\elements\\ContentProductDetails';

    if(
    TL_MODE == 'BE'){ 
        
    $GLOBALS['TL_CSS'][] = '/be.css';
        
    $GLOBALS['TL_JAVASCRIPT'][] = 'assets/jquery/js/jquery.min.js'
        
    $GLOBALS['TL_JAVASCRIPT'][] = 'be.js'

     
    $GLOBALS['TL_HOOKS']['getSearchablePages'][] = array('ProductsSearch''getSearchableProducts');

    $GLOBALS['TL_HOOKS']['changelanguageNavigation'][] = [
        
    'Vendor\Extension\EventListener\ChangelanguageNavigationListener',
        
    'onChangelanguageNavigation'
    ];
    composer.json:
    PHP-Code:
    {
        
    "type""project",
        
    "require": {
            
    "codefog/contao-cookiebar""^2.2",
            
    "contao/calendar-bundle""4.4.*",
            
    "contao/comments-bundle""4.4.*",
            
    "contao/conflicts""*@dev",
            
    "contao/faq-bundle""4.4.*",
            
    "contao/listing-bundle""4.4.*",
            
    "contao/manager-bundle""4.4.*",
            
    "contao/news-bundle""4.4.*",
            
    "contao/newsletter-bundle""4.4.*",
            
    "do-while/contao-backupdb-bundle""^1.4",
            
    "heimrichhannot/contao-exporter-bundle""^0.7.1",
            
    "heimrichhannot/contao-slick-bundle""^1.2",
            
    "madeyourday/contao-rocksolid-antispam""^2.0",
            
    "madeyourday/contao-rocksolid-columns""^2.0",
            
    "martin-kozianka/contao-recipientselect""^1.0",
            
    "menatwork/registration_info_mailer""^3.1",
            
    "terminal42/contao-changelanguage""^3.1"
        
    },
        
    "autoload": {
            
    "classmap": [
                
    "src/ContaoManager/ContaoManagerPlugin.php",
                
    "src/MyModuls/Produkte/Resources/contao",
                
    "src/MyModuls/Themen/Resources/contao",
                
    "src/MyModuls/Publikationen/Resources/contao",
                
    "src/MyModuls/Kategorien/Resources/contao"
            
    ],
            
    "psr-4": {
                
    """src/"
            
    },
            
    "exclude-from-classmap": [
                
    "src/MyModuls/Produkte/Resources/contao/config/",
                
    "src/MyModuls/Produkte/Resources/contao/dca/",
                
    "src/MyModuls/Produkte/Resources/contao/languages/",
                
    "src/MyModuls/Produkte/Resources/contao/templates/",
                
    "src/MyModuls/Themen/Resources/contao/config/",
                
    "src/MyModuls/Themen/Resources/contao/dca/",
                
    "src/MyModuls/Themen/Resources/contao/languages/",
                
    "src/MyModuls/Themen/Resources/contao/templates/",
                
    "src/MyModuls/Publikationen/Resources/contao/config/",
                
    "src/MyModuls/Publikationen/Resources/contao/dca/",
                
    "src/MyModuls/Publikationen/Resources/contao/languages/",
                
    "src/MyModuls/Publikationen/Resources/contao/templates/",
                
    "src/MyModuls/Kategorien/Resources/contao/config/",
                
    "src/MyModuls/Kategorien/Resources/contao/dca/",
                
    "src/MyModuls/Kategorien/Resources/contao/languages/",
                
    "src/MyModuls/Kategorien/Resources/contao/templates/"
            
    ]
        },
        
    "extra": {
            
    "contao-component-dir""assets"
        
    },
        
    "scripts": {
            
    "post-install-cmd": [
                
    "Contao\\ManagerBundle\\Composer\\ScriptHandler::initializeApplication"
            
    ],
            
    "post-update-cmd": [
                
    "Contao\\ManagerBundle\\Composer\\ScriptHandler::initializeApplication"
            
    ]
        }

    Ich hoffe damit kann geholfen werden, Danke

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

    Standard

    Zitat Zitat von d.tafel Beitrag anzeigen
    /src/MyModuls/Produkte/Resources/contao/config/config.php:
    Das gehört nach app/Resources/contao/config/config.php, siehe https://docs.contao.org/dev/getting-...n-translations


    Zitat Zitat von d.tafel Beitrag anzeigen
    composer.json:
    PHP-Code:
    {
        
    "autoload": {
            
    "classmap": [
                
    "src/ContaoManager/ContaoManagerPlugin.php",
                
    "src/MyModuls/Produkte/Resources/contao",
                
    "src/MyModuls/Themen/Resources/contao",
                
    "src/MyModuls/Publikationen/Resources/contao",
                
    "src/MyModuls/Kategorien/Resources/contao"
            
    ],
            
    "psr-4": {
                
    """src/"
            
    },
            
    "exclude-from-classmap": [
                
    "src/MyModuls/Produkte/Resources/contao/config/",
                
    "src/MyModuls/Produkte/Resources/contao/dca/",
                
    "src/MyModuls/Produkte/Resources/contao/languages/",
                
    "src/MyModuls/Produkte/Resources/contao/templates/",
                
    "src/MyModuls/Themen/Resources/contao/config/",
                
    "src/MyModuls/Themen/Resources/contao/dca/",
                
    "src/MyModuls/Themen/Resources/contao/languages/",
                
    "src/MyModuls/Themen/Resources/contao/templates/",
                
    "src/MyModuls/Publikationen/Resources/contao/config/",
                
    "src/MyModuls/Publikationen/Resources/contao/dca/",
                
    "src/MyModuls/Publikationen/Resources/contao/languages/",
                
    "src/MyModuls/Publikationen/Resources/contao/templates/",
                
    "src/MyModuls/Kategorien/Resources/contao/config/",
                
    "src/MyModuls/Kategorien/Resources/contao/dca/",
                
    "src/MyModuls/Kategorien/Resources/contao/languages/",
                
    "src/MyModuls/Kategorien/Resources/contao/templates/"
            
    ]
        },

    Grundsätzlich solltest du es so machen wie in der Dokumentation beschrieben: https://docs.contao.org/dev/getting-...es-and-actions



    Außerdem hast du deine Vendor\Extension\EventListener\ChangelanguageNavig ationListener Klasse nicht gepostet.

  5. #5
    Contao-Nutzer
    Registriert seit
    10.01.2011.
    Beiträge
    234

    Standard

    Die Klasse kommt von der Erweiterung. Habe es übernommen von hier:
    https://terminal42.github.io/contao-...evelopers.html

    bisher versuche ich die Klasse nur zu laden, genutzt wird diese noch nicht.

    Meine Erweiterungen sind vom vorgehen her überwiegend nach contao 3 umgesetzt.
    Das klappt auch gut mit meinen Klassen und Contao Klassen. Bleibt nur offen wie die Klasse dieser Erweiterung erreicht werden kann.

    Danke

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

    Standard

    Zitat Zitat von d.tafel Beitrag anzeigen
    Die Klasse kommt von der Erweiterung. Habe es übernommen von hier:
    https://terminal42.github.io/contao-...evelopers.html

    bisher versuche ich die Klasse nur zu laden, genutzt wird diese noch nicht.
    Diese Klasse existiert nicht. Das ist nur ein Beispiel, wie du das selbst umsetzen kannst. Du musst das natürlich selbst implementieren.


    Zitat Zitat von d.tafel Beitrag anzeigen
    Meine Erweiterungen sind vom vorgehen her überwiegend nach contao 3 umgesetzt.
    Das klappt auch gut mit meinen Klassen und Contao Klassen.
    Wenn du im Contao 3 Stil programmieren willst, musst du dein Modul in system/modules/ anlegen, wie gewohnt. Empfohlen ist das jedoch nicht.

  7. #7
    Contao-Nutzer
    Registriert seit
    10.01.2011.
    Beiträge
    234

    Standard

    Also wie bei meinen Contao Such Hook?

    PHP-Code:
    $GLOBALS['TL_HOOKS']['getSearchablePages'][] = array('ProductsSearch''getSearchableProducts'); 
    Ich versuche es, Danke dir.

    Es soll schon soweit wie möglich Richtung 4 gehen, 5 ist ja dann auch bald da wo es noch weniger abwärts klappt.
    Tue mich etwas schwer. 3 war verständlicher, aber wird noch.

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

    Standard

    Zitat Zitat von d.tafel Beitrag anzeigen
    Es soll schon soweit wie möglich Richtung 4 gehen
    Tue mich etwas schwer. 3 war verständlicher, aber wird noch.
    https://docs.contao.org/dev/getting-started/




    Zitat Zitat von d.tafel Beitrag anzeigen
    5 ist ja dann auch bald da wo es noch weniger abwärts klappt.
    Woher hast du diese Information? Für Contao 5 gibt es noch keine offiziellen Pläne. Den aktuellen Release Plan gibt es hier: https://contao.org/de/release-plan.html

  9. #9
    Contao-Nutzer
    Registriert seit
    10.01.2011.
    Beiträge
    234

    Standard

    Danke für den Link, kannte ich tatsächlich noch nicht.

    Kein Plan, wo ich es her habe, aber hab im Kopf 4.9 sei "nur" eine 5 alpha, bzw. bereitet sich stark auf 5 vor, welche dann komplett Symfony ist.

    so oder so, fand ich 3 "schöner" für "normale" Webseiten Projekte.
    ContaoLight schwebt mir da persönlich immer wieder im Kopf vor

  10. #10
    Contao-Nutzer
    Registriert seit
    10.01.2011.
    Beiträge
    234

    Standard

    Hallo nochmal,

    die Klasse wird geladen, aber keines der Beispiele funktioniert für mich.
    erhalte immer "Warning: in_array() expects parameter 2 to be array, null given"

    config/config.php
    PHP-Code:
    $GLOBALS['TL_HOOKS']['changelanguageNavigation'][] = array('ChangeProductsLang''onChangelanguageNavigation'); 
    classes/ChangeProductsLang.php
    PHP-Code:
    <?php 
    namespace Contao;

    use 
    Haste\Input\Input;
    use 
    Terminal42\ChangeLanguage\Event\ChangelanguageNavigationEvent;

    class 
    ChangeProductsLang
    {
        public function 
    onChangelanguageNavigation(ChangelanguageNavigationEvent $event){
        
    $navigationItem $event->getNavigationItem();

        
    // Detect item for the current page, e.g. to do nothing
        
    if ($navigationItem->isCurrentPage()) {
            return;
        }

        
    // Override label of navigation item
        
    $navigationItem->setLabel('custom label');

        
    // Make the link open in a new window
        
    $navigationItem->setNewWindow(true);
        }
    }
    ?>
    app_dev.php
    Unbenannt.PNG

  11. #11
    Contao-Nutzer
    Registriert seit
    10.01.2011.
    Beiträge
    234

    Standard

    ok, ist geschafft. Composer Class Loader hat zum glück gefehlt. (Systemwartung - Contaomanger)
    der Cache reicht nicht... vergesse ich immer wieder

  12. #12
    Contao-Nutzer
    Registriert seit
    10.01.2011.
    Beiträge
    234

    Standard

    Hier noch meine komplette Klasse, evtl. hilft es jemanden oder mag es verbessern =)

    PHP-Code:
    <?php 
    namespace Contao;

    use 
    Haste\Input\Input;
    use 
    Terminal42\ChangeLanguage\Event\ChangelanguageNavigationEvent;

    class 
    ChangeProductsLang
    {
        public function 
    onChangelanguageNavigation(ChangelanguageNavigationEvent $event){      
            if(
    $event->getUrlParameterBag()->hasUrlAttribute('produkt') === true || $event->getUrlParameterBag()->hasUrlAttribute('product') === true || $event->getUrlParameterBag()->hasUrlAttribute('produit') === true){
                
            
    $targetRoot $event->getNavigationItem()->getRootPage();
            
    $language   $targetRoot->rootLanguage;
                
            
    $alias = \Contao\Input::get($GLOBALS['TL_LANG']['MSC']['produkt']);
            
    $aliase $this->loadProduct($alias);
                
            if(
    $language == 'de'){
                if(
    $aliase[0]['alias'] != ''){
                
    $event->getUrlParameterBag()->removeUrlAttribute('product');
                
    $event->getUrlParameterBag()->removeUrlAttribute('produit');
                
    $event->getUrlParameterBag()->setUrlAttribute('produkt'$aliase[0]['alias']);
                } else{
                
    $navigationItem $event->getNavigationItem();
                
    $navigationItem->setTargetPage(\PageModel::findByPk(4),true,false);   
                
    $event->getUrlParameterBag()->removeUrlAttribute('produkt');
                
    $event->getUrlParameterBag()->removeUrlAttribute('product');
                
    $event->getUrlParameterBag()->removeUrlAttribute('produit');
                }
            }        
            if(
    $language == 'en'){
                if(
    $aliase[0]['alias_en'] != ''){
                
    $event->getUrlParameterBag()->removeUrlAttribute('produkt');
                
    $event->getUrlParameterBag()->removeUrlAttribute('produit');
                
    $event->getUrlParameterBag()->setUrlAttribute('product'$aliase[0]['alias_en']);
                } else{
                
    $navigationItem $event->getNavigationItem();
                
    $navigationItem->setTargetPage(\PageModel::findByPk(434),true,false);   
                
    $event->getUrlParameterBag()->removeUrlAttribute('produkt');
                
    $event->getUrlParameterBag()->removeUrlAttribute('product');
                
    $event->getUrlParameterBag()->removeUrlAttribute('produit');
                }
            }
            if(
    $language == 'fr'){
                if(
    $aliase[0]['alias_fr'] != ''){
                
    $event->getUrlParameterBag()->removeUrlAttribute('produkt');
                
    $event->getUrlParameterBag()->removeUrlAttribute('product');
                
    $event->getUrlParameterBag()->setUrlAttribute('produit'$aliase[0]['alias_fr']);
                } else{
                
    $navigationItem $event->getNavigationItem();
                
    $navigationItem->setTargetPage(\PageModel::findByPk(506),true,false);   
                
    $event->getUrlParameterBag()->removeUrlAttribute('produkt');
                
    $event->getUrlParameterBag()->removeUrlAttribute('product');
                
    $event->getUrlParameterBag()->removeUrlAttribute('produit');
                }
            }
            }
        
        }
        
        private function 
    loadProduct($getAlias)
        {
            
    $lg '';
            if(
    $GLOBALS['TL_LANGUAGE'] != 'de'){
                
    $lg '_'.$GLOBALS['TL_LANGUAGE'];
            }
            if(
    $GLOBALS['TL_LANGUAGE'] != 'de'){
                
    $ls $GLOBALS['TL_LANGUAGE'];
                
    $lang " AND publikationen REGEXP '\"$ls\"' AND alias_".$ls." != ''";
            } else {
                    
    $lang " AND publikationen REGEXP 'de' AND alias != ''";               
            }
                
            
    $objDb      = \Contao\Database::getInstance();
            
    $strQuery   "SELECT alias, alias_en, alias_fr FROM tl_ss_produkte WHERE alias".$lg." = '$getAlias' AND activated = 1".$lang;
            
    $objResult  $objDb->execute($strQuery)->fetchAllAssoc();        
            return 
    $objResult;                 
        }
    }
    ?>

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
  •