Plugin Variable

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

        Configuration
        Konfiguration
        
            active
            Plugin active in this channel
            Plugin in diesem Salechannel aktivieren
        
        
            doremove
            Complete remove
            komplett entfernen
        
        
            alttext
            Alternative text
            Alternativer Text
            lorem ipsum

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 %}
        
            {{ shopware.config.MeinPlugin.config.alttext }}
        
    {% 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

  • 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 

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

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

1 „Gefällt mir“

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.

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.

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ß

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.

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?)

 

 

 

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

./console

 

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ß

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

 

@gwen schrieb:

[…] 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…

siehe https://forum.shopware.com/discussion/comment/264423/#Comment_264423

@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

/src/Controller/Controller.php

/src/Resources/config/config.xml

    Basic Configuration
    Grundeinstellungen

    
    
      disabled
      enable Plugin
      Plugin aktivieren
      true
      
      
    
    
    
    
      showText
      show Text
      Text anzeigen
      true
      
      
    
    
    
    
      text
      Texteingabe
      Texteingabe
      fill text
      Text eingeben

/src/Resources/service/service.xml

/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

/src/Subscriber/Subscriber.php

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ß

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ß