brettvormkoppbrettvormkopp MemberComments: 1866 Received thanks: 369 Member since: March 2013

Hallo, ich habe ein Frontend-Plugin gebaut und im Backend kann man das Plugin mit 2 Boolean-Felder und 1 Textfeld konfigurieren. Leider stimmt die Logik im Frontend gar nicht mit dem des Backend überein.

config.xml

    <card>
        <title>Configuration</title>
        <title lang="de-DE">Konfiguration</title>
        <input-field type="bool">
            <name>active</name>
            <label>Plugin active in this channel</label>
            <label lang="de-DE">Plugin in diesem Salechannel aktivieren</label>
        </input-field>
        <input-field type="bool">
            <name>doremove</name>
            <label>Complete remove</label>
            <label lang="de-DE">komplett entfernen</label>
        </input-field>
        <input-field type="text">
            <name>alttext</name>
            <label>Alternative text</label>
            <label lang="de-DE">Alternativer Text</label>
            <placeholder>lorem ipsum</placeholder>
        </input-field>
    </card>

twig:

{% sw_extends '@Storefront/layout/footer/footer.html.twig' %}

{% block layout_footer_copyright %}

    {% if shopware.config.MeinPlugin.config.active == true and shopware.config.MeinPlugin.config.doremove == false %}
        <div class="footer-copyright">
            {{ shopware.config.MeinPlugin.config.alttext }}
        </div>
    {% elseif shopware.config.MeinPlugin.config.active == true and shopware.config.MeinPlugin.config.doremove == true %}
        {# nichts ausgeben #}
    {% elseif shopware.config.MeinPlugin.config.active == false %}
        {{ parent() }}
    {% endif %}

{% endblock %}

Mach ich irgendetwas falsch? Danke und Gruss

Answers

  • brettvormkoppbrettvormkopp MemberComments: 1866 Received thanks: 369 edited October 2019 Member since: March 2013
    • true false = div block //korrekt
    • true true = div block //hier sollte {#nichts#}
    • false true = {#nichts#} //hier sollte parent 
    • false false = parent //korrekt

    EDIT: In der Datenbank werden die Werte auch korrekt hinterlegt 

  • brettvormkoppbrettvormkopp MemberComments: 1866 Received thanks: 369 Member since: March 2013

    Komischerweise funktioniert heute die Logik. Gibt es irgendwo einen Cache extra für Plugins?

  • brettvormkoppbrettvormkopp MemberComments: 1866 Received thanks: 369 Member since: March 2013

    Mitlerweile ist der Fehler gefunden. Es wurden in der Datenbanktabelle system_config die alten Plugindaten nicht gelöscht. Ob das nur eine Ausnahme war oder Regel kann ich gerade nicht sagen.

    Thanked by 1DateIdee
  • gwengwen MemberComments: 63 Received thanks: 4 Member since: September 2018

    Hi

     

    wie schaffts du es, dass 

    {% if shopware.config.MeinPlugin.config.active == true and shopware.config.MeinPlugin.config.doremove == false %}

    bei dir in Echtzeit funktioniert? Also wenn du in deinem  plugin die Einstellung änderst, dass es im Twig auch geändert wird?
    Bei mir funktioniert keine der Varianten.

  • brettvormkoppbrettvormkopp MemberComments: 1866 Received thanks: 369 Member since: March 2013

    Hi, ich hatte das "Problem" gehabt, dass ich zu Testzwecken mehrmals das Plugin installiert und deinstalliert hatte. Bei der deinstallation wurden aber die Einträge aus der Datenbank nicht gelöscht/deinstalliert. Und so wurde bei jeder installation ein neues Feld -Eintrag hinzugefügt aber im Frontend wurde sozusagen immer nur der Ur-Feld-Eintrag genommen. Am besten Plugin deinstallieren und alle Einträge in der DB löschen.

  • gwengwen MemberComments: 63 Received thanks: 4 Member since: September 2018

    Hallo @brettvormkopp

    {%if shopware.config.MeinPlugin.config.doremove == false %}

    wird bei dir also aktualisiert, wenn du es in den Einstellungen auf true oder false setzt?
    Bei mir funktioniert das nicht. Steuerst du da noch irgendwas extra an?

    Gruß

  • brettvormkoppbrettvormkopp MemberComments: 1866 Received thanks: 369 Member since: March 2013

    Ja, nachdem ich in der Datenbank alle alten Einträge gelöscht habe.

    Doppelte Statements habe ich mit einer Klammer umrahmt: 

    {% if ( shopware.config.MeinPlugin.config.active == true ) and ( shopware.config.MeinPlugin.config.doremove == false ) %}

    Einfache Statements ohne Klammer:

     {% if shopware.config.MeinPlugin.config.active == false %}

    Am besten postest du mal dein komplettes Plugin hier, damit man ggf was helfen kann. Es wäre ja auch möglich, dass dein Problem an einer ganz anderen Stelle liegt, z.b. Subscriber, routes, services oder dem Themepfad.

  • gwengwen MemberComments: 63 Received thanks: 4 Member since: September 2018

    Ja, das mache ich. Aber erstmal ist mir noch was anderes aufgefallen.

    hier wird nur sporadisch gesagt, dass man den Cache über die CLI Befehle ausühren kann. Wie genau, nicht.
    Mit bin/console cache:clear kommt console: command not found

    Ich bin im Verzeichnis /bin drin. Mit lisa (ls) bekomme ich aber auch kein clear oder so angezeit und auch keine Help page.
    (Welcher nicht computer affine Shopbetreiber mehrt bitte auf der Konsole rum,um den Cache zu leeren?)

     

     

     

  • MurmeltierMurmeltier MemberComments: 1071 Received thanks: 185 Member since: April 2017

    Geh doch mal in den Ordner bin rein und mach dann:

    ./console

     

  • gwengwen MemberComments: 63 Received thanks: 4 Member since: September 2018

    Hallo Murmeltier,

    jetzt bin ich zuhause. (Ich hab die Nase voll) Daheim habe ich blöderweise keine SSH Daten.
    Ich mache das Montag früh gleich. Ich glaube den bash Operator habe ich auch schon davor gesetzt und es kam command not found.
    Ich werde das Montag sofort nochmal testen. Ich kenne diese php CLI Befehle von früher (2010). Aber da musste man vorher immer irgendwas noch installieren, damit es in /etc/bin oder so global registriert wird. Kann man den Cache nicht auch irgendwie frontendseitig leeren über ein Menü wie in SW5? Wie machen das Otto Normalo Shopbetreiber? Die Kurven doch nicht ernsthaft im Terminal über /root /www/../bin und ./console rum?

    Gruß

  • MurmeltierMurmeltier MemberComments: 1071 Received thanks: 185 edited February 14 Member since: April 2017

    Kann sein, das Du evtl. mal Deinen Provider labern musst. Bei Hetzner z.B. war das auch alles ein bisschen anders. Da muss ich immer folgendes eingeben:

    php70 ./console
    

     

  • MurmeltierMurmeltier MemberComments: 1071 Received thanks: 185 edited February 14 Member since: April 2017
    [...] Daheim habe ich blöderweise keine SSH Daten...

    Leg Dir einfach mal die freie und portable MobaXterm Version zu. Die packst Du auf einen Stick und gut ist. Somit hast Du Dein SSH Client - mit allen Zugängen - immer am Start, wenn Du mal unterwegs bist...

  • gwengwen MemberComments: 63 Received thanks: 4 edited February 17 Member since: September 2018
  • gwengwen MemberComments: 63 Received thanks: 4 Member since: September 2018

    @brettvormkopp schrieb:

    Am besten postest du mal dein komplettes Plugin hier, damit man ggf was helfen kann. Es wäre ja auch möglich, dass dein Problem an einer ganz anderen Stelle liegt, z.b. Subscriber, routes, services oder dem Themepfad.

     


    Dann wollen wir mal. Ich habe mal den Ableger mit den wesentlichen Funktionen programmiert, damit der Code nicht zu lang und unübersichtlich wird. Das Problem besteht auch in diesem.

     

    basic/src/basic.php

    <?php
    
    /* 
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
    
    declare(strict_types=1);
    namespace gwen\basic;
    use Shopware\Core\Framework\Plugin;
    
    class basic extends Plugin {
    }

    /src/Controller/Controller.php

    <?php
    
    /* 
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
    
    declare(strict_types=1);
    namespace gwen\basic\Controller;
    use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
    
    /**
     * 
     */
    class Controller extends AbstractController {
    }
    
    

    /src/Resources/config/config.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!--
    To change this license header, choose License Headers in Project Properties.
    To change this template file, choose Tools | Templates
    and open the template in the editor.
    -->
    
    <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
            xsi:noNamespaceSchemaLocation="https://raw.githubusercontent.com/shopware/platform/master/src/Core/System/SystemConfig/Schema/config.xsd">;
    
      <!-- Basic -->
      <card>
        <title>Basic Configuration</title>
        <title lang="de-DE">Grundeinstellungen</title>
    
        <!-- select if the plugin is enabled or disabled -->
        <input-field type="bool">
          <name>disabled</name>
          <label>enable Plugin</label>
          <label lang="de-DE">Plugin aktivieren</label>
          <defaultValue>true</defaultValue>
          <helpText></helpText>
          <helpText lang="de-DE"></helpText>
        </input-field>
        
        <!-- select if the text has been show in the product page -->
        <input-field type="bool">
          <name>showText</name>
          <label>show Text</label>
          <label lang="de-DE">Text anzeigen</label>
          <defaultValue>true</defaultValue>
          <helpText></helpText>
          <helpText lang="de-DE"></helpText>
        </input-field>
        
        <!-- input the text -->
        <input-field type="textarea">
          <name>text</name>
          <label>Texteingabe</label>
          <label lang="de-DE">Texteingabe</label>
          <placeholder>fill text</placeholder>
          <placeholder lang="de-DE">Text eingeben</placeholder>
          <helpText></helpText>
          <helpText lang="de-DE"></helpText>
        </input-field>
      </card>
    </config>
    

    /src/Resources/service/service.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!--
    To change this license header, choose License Headers in Project Properties.
    To change this template file, choose Tools | Templates
    and open the template in the editor.
    -->
    <container xmlns="http://symfony.com/schema/dic/services";
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
               xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">;
      <services>
        <service id="gwen\basic\Controller\Controller" public="true">
          <argument type="service" id="gwen\basic\Service\Service" />
        </service>
        
        <service id="gwen\basic\Service\Service" />
        
        <service id="gwen\basic\Subscriber\Frontend">
          <argument type="service" id="Shopware\Core\System\SystemConfig\SystemConfigService" />
          <tag name="kernel.event_subscriber"/>
        </service>
      </services>
    </container>
    

    /src/Resources/views/storefront/page/product-detail/index.html.twig

    {# empty Twig template #}
    {% sw_extends '@Storefront/storefront/page/product-detail/index.html.twig' %}
    {% block page_product_detail_headline %}
      {% if shopware.config.basic.config.showText == true and active == true %}
        {{ shopware.config.basic.config.text }}
      {% endif %}
      {{ parent() }}
    {% endblock %}
    

    /src/Service/Service.php

    <?php
    
    /* 
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
    declare(strict_types = 1);
    namespace gwen\basic\Service;
    
    class Service {
    }
    
    

    /src/Subscriber/Subscriber.php

    <?php
    
    /* 
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
    
    declare(strict_types=1);
    namespace gwen\basic\Subscriber;
    use Symfony\Component\EventDispatcher\EventSubscriberInterface;
    use Shopware\Storefront\Event\StorefrontRenderEvent;
    use Shopware\Core\System\SystemConfig\SystemConfigService;
    
    class Frontend implements EventSubscriberInterface{
      
      const gwen_CONFIG_DOMAIN = 'basic.config.';
      
      /**
       * 
       * @param SystemConfigService $config
       */
      public function __construct(SystemConfigService $config) {
        $this->config = $config;
      }
      
      /**
       * 
       * @return array
       */
      public static function getSubscribedEvents(): array {
        return[
          StorefrontRenderEvent::class => 'onStorefrontRender'
        ];
      }
      
      function getPluginConfig($key) {
        return $this->config->get(self::gwen_CONFIG_DOMAIN . $key); 
      }
      
      /**
       * 
       * @param StorefrontRenderEvent $event
       * @return void
       */
      public function onStorefrontRender(StorefrontRenderEvent $event): void {
        $pluginConfiguration = $this->config->getDomain('basic.config', $event->getSalesChannelContext()->getSalesChannel()->getId(), true);
        if ($pluginConfiguration["basic.config.disabled"] == false) {
          return;  
        }
        $event->setParameter('active', true );
      }
    }

     

    Gruß

  • gwengwen MemberComments: 63 Received thanks: 4 Member since: September 2018

    Zur Info: Der Code ist in Ordnung. Es handelt sich vermutlich um einen Bug in SW (im Verkaufskanal), wie Shopware mir mittlerweile einräumte. 

    Gruß

Sign In or Register to comment.