Werbung / Banner buchen
Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Smarty für Produktseite

    pcguy

    • Frisch an Board
    • Beiträge: 75
    Smarty für Produktseite
    am: 04. Februar 2015, 19:38:19
    Hallo zusammen, ich möchte im Template den "breadcrumb" einbauen, der soll nur bei allen Produkten sichtbar sein, andernfalls ausgeblendet.

    Code: PHP  [Auswählen]
     {if $smarty.get.cPath!=null and $smarty.get.manufacturers_id==''}  
         <ol class="breadcrumb well">{$navtrail}</ol>  
      {/if}
     

    Das funktioniert leider nur bis zum "product_info.php", dann ist die "breadcrumb"  weg obwohl sie eingeblendet sein sollte. :nixweiss:

    Weiss jemand Rat?

    liebe Grüsse

    Linkback: https://www.modified-shop.org/forum/index.php?topic=32187.0

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    Re: Smarty für Produktseite
    Antwort #1 am: 05. Februar 2015, 11:40:09
    Hallo pcguy

    Wenn Du nur auf der Produktdetailseite die 'breadcrumb' angezeigt haben möchtest,  schlage ich folgenden Code vor.
    Code: PHP  [Auswählen]
    {if strstr($smarty.server.PHP_SELF, 'product_info')}  
        <ol class="breadcrumb well">{$navtrail}</ol>  
    {/if}
     

    Gruss
    Hanspeter

    pcguy

    • Frisch an Board
    • Beiträge: 75
    Re: Smarty für Produktseite
    Antwort #2 am: 05. Februar 2015, 13:21:34
    Hallo Hanspeter, danke für Deine Hilfe.

    Ich möchte die 'breadcrumb' auf der Produktdetailseite und in den Produktekat. anzeigen.
    Muss ich da noch den cPath hinzufügen?

    lg

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    Re: Smarty für Produktseite
    Antwort #3 am: 05. Februar 2015, 16:01:23
    Hallo pcguy

    Wähle selbst!

    Zeigt bei Produktdetailseiten und Produktliesten wenn man eine Kategorie auswählt den "breadcrumb".
    Code: XML  [Auswählen]
    {if strstr($smarty.server.PHP_SELF, 'product_info') or (strstr($smarty.server.PHP_SELF, 'index') and $smarty.get.cPath)}
     

    Zeigt bei Produktdetailseiten und Produktliesten wenn man eine Kategorie auswählt  und Produktliesten wenn man einen Hersteller auswählt den "breadcrumb".
    Code: XML  [Auswählen]
    {if strstr($smarty.server.PHP_SELF, 'product_info') or (strstr($smarty.server.PHP_SELF, 'index') and ($smarty.get.cPath or $smarty.get.manufacturers_id))}
     

    Zeigt bei Produktdetailseiten und Produktliesten wenn man eine Kategorie auswählt  und Produktliesten wenn man einen Hersteller auswählt und Produktliesten wenn man Sonderangebote auswählt den "breadcrumb".
    Code: XML  [Auswählen]
    {if strstr($smarty.server.PHP_SELF, 'specials') or strstr($smarty.server.PHP_SELF, 'product_info') or (strstr($smarty.server.PHP_SELF, 'index') and ($smarty.get.cPath or $smarty.get.manufacturers_id))}
     

    Zeigt bei Produktdetailseiten und Produktliesten wenn man eine Kategorie auswählt  und Produktliesten wenn man einen Hersteller auswählt und Produktliesten wenn man Sonderangebote auswählt und Produktliesten wenn man Neue Artikel auswählt den "breadcrumb".
    Code: XML  [Auswählen]
    {if strstr($smarty.server.PHP_SELF, 'specials') or strstr($smarty.server.PHP_SELF, 'products_new') or strstr($smarty.server.PHP_SELF, 'product_info') or (strstr($smarty.server.PHP_SELF, 'index') and ($smarty.get.cPath or $smarty.get.manufacturers_id))}
     

    Gruss
    Hanspeter

    pcguy

    • Frisch an Board
    • Beiträge: 75
    Re: Smarty für Produktseite
    Antwort #4 am: 05. Februar 2015, 16:50:22
    wowww  :thx:

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.988
    • Geschlecht:
    Re: Smarty für Produktseite
    Antwort #5 am: 06. Februar 2015, 01:10:10
    Nur als kleine Performance-Verbesserung:
    • wäre strpos() ein wenig schneller als strstr()
      und
    • ist das {if $smarty.get.products_id} einfacher und schneller als strstr() oder strpos() nach 'products_id', was für Kategorieseiten (get.cPath) ja auch so gemacht wurde.

    Gruß,
    noRiddle

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    Re: Smarty für Produktseite
    Antwort #6 am: 06. Februar 2015, 10:08:29
    Hallo noRiddle

    Einige Bemerkungen zu deinem Beitrag.

    Zu 1.
    Code: PHP  [Auswählen]
    {if strstr($smarty.server.PHP_SELF, 'product_info') or (strstr($smarty.server.PHP_SELF, 'index') and $smarty.get.cPath)}
     

    Wenn man obige if-Anweisung die ich 'pcguy' vorgeschlagen habe gemäss deinem Vorschlag 'strpos()' statt 'strstr()' einzusetzen umbaut, sähe das wie folgt aus.

    Code: PHP  [Auswählen]
    {if strpos($smarty.server.PHP_SELF, 'product_info') !== false or (strpos($smarty.server.PHP_SELF, 'index') !== false and $smarty.get.cPath)}
     

    Wie man sehen kann muss das Ergebnis der Funktion 'strpos()' noch zusätzlich auf nicht Identität mit dem boolschen Wert 'false' geprüft werden, aus diesem Grund bezweifle ich einen zeitlichen Performancegewinn.
    Näheres zu 'strpos()' siehe hier –> http://php.net/manual/de/function.strpos.php

    Zu 2.
    Bist Du sicher, dass '{if $smarty.get.products_id}' immer nur dann wahr ist, wenn auch '{if strstr($smarty.server.PHP_SELF, 'product_info')}' wahr ist und wenn ja kannst Du Angaben dazu machen wie gross der quantitative Performancegewinn bei deinem Vorschlag währe.

    Gruss
    Hanspeter

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.988
    • Geschlecht:
    Re: Smarty für Produktseite
    Antwort #7 am: 06. Februar 2015, 18:47:22
    Hallo Hanspeter.
    zu 1.:
    Jau, ich weiß, daß strpos() einen nicht boolschen Wert ausgeben kann welcher zu 'false' gewertet wird (z.B. 0, NULL). Da wir aber auf das Vorkommen eines Strings prüfen welcher nie einen solchen Wert haben kann
    - nämlich weil er nie an erster Stelle ( = 0) gefunden werden und nie den Typ NULL ausgeben kann -
    reicht ein
    {if strpos($smarty.server.PHP_SELF, 'product_info') || (strpos($smarty.server.PHP_SELF, 'index') && $smarty.get.cPath)}

    Nicht an erster Stelle kann der String gefunden werden weil auf den Produktseiten die Ausgabe dann so wäre:
    /product_info.phpoder auf Kategorieseiten und der Startseite so
    /index.phpalso der Slash an erster Stelle stünde.

    Natürlich ist die Prüfung auf !== false korrekter und sicherer.

    strpos() ist jedenfalls schneller als strstr() weil nicht so speicher-intensiv, da strstr() den ganzen Rest-String ab der Position des gesuchten Strings zurückgibt während strpos() lediglich die Position des Auffindens zurückgibt.

    zu 2.:
    Ja, ich bin sicher, daß "{if $smarty.get.products_id} immer nur dann wahr ist, wenn auch {if strstr($smarty.server.PHP_SELF, 'product_info')} wahr ist".
    Das liegt am Aufbau der "echten" URLs (also die server-internen URLS ohne SEO-URLs), die auf einer Produktseite so aussehen:
    DOMAIN.TLD/product_info.php?products_id=XXDas heißt, "product_info" kommt nur auf Produktseiten vor
    *EDIT* und der GET-Parameter "products_id" ebenso.
    *EDIT 2* Der GET-Parameter "products_id" kommt auch noch auf anderen Seiten vor, wir prüfen aber ja nur im Produkt-Info-Template, ist also nicht relevant.
    *EDIT 3*
    Mmh, vielleicht hast du doch Recht, die Prüfung kommt ja in die index.html...

    Den Performancegewinn kann ich nicht mit Testcases belegen (obwohl es evtl. schon welche im I-net gibt), aber GET-Parameter sind im globalen GET-Array gespeichert während für eine Prüfung mittels strstr() oder strpos() definitiv Rechenarbeit vonnöten ist die imho nur langsamer sein kann. Mit dem Durchsuchen von Arrays ist PHP sehr schnell.

    Zum Abschluß noch dies:
    Um keine bösen Gedanken aufkommen zu lassen (was ich nicht behaupten möchte, daß es so sei):
    Ich wollte dich nicht korrigieren sondern einen community-gedanken-tragenden Verbesserungsvorschlag machen.

    Gruß,
    noRiddle
    15 Antworten
    1502 Aufrufe
    27. April 2023, 13:51:26 von noRiddle (revilonetz)
    1 Antworten
    3464 Aufrufe
    21. April 2009, 21:45:40 von Anonym
    5 Antworten
    4734 Aufrufe
    26. April 2010, 07:03:13 von claudia
    4 Antworten
    2556 Aufrufe
    20. Januar 2016, 20:27:40 von klasi61
               
    anything