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: If Abfrage ob aktuelle Seite product_listing ist

    matchy

    • Neu im Forum
    • Beiträge: 5
    • Geschlecht:
    If Abfrage ob aktuelle Seite product_listing ist
    am: 30. August 2012, 08:49:44
    Hallo Mitstreiter,

    ich habe meine product_listing_v1.html auf ein 4-spaltiges Layout angepasst, soweit so gut, allerdings habe ich das Problem, das bei Sonderangeboten folgender langer Preistext ausgegeben wird, was mir mein Template zerschiesst:

    Unser Angebotspreis 29,99 EUR
    Jetzt nur 27,99 EUR
    Sie sparen 7 % / 2,00 EUR

    Ich weiß auch schon, dass diese Preisangabe in der Datei:

    includes/classes/xtcPrice.php

    erzeugt wird.

    Nun möchte ich in der xtcPrice.php eine If-Abfrage einbauen, die prüft, ob die aktuelle Seite die product_listing_v1.html ist, falls ja soll er nur den Endpreis (27,99 EUR) ausgeben.

    Hat jemand eine Idee, wie man diese If-Abfrage schreiben muss, ich komme nicht mehr weiter. Habe auch das gesamte Forum durchsucht und gegoogelt?

    Vielen Dank im Voraus,
    Mathias

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

    mhbosch

    • Schreiberling
    • Beiträge: 394
    • Geschlecht:
    Re: If Abfrage ob aktuelle Seite product_listing ist
    Antwort #1 am: 30. August 2012, 10:09:07
    Hallo,

    dir sollte folgender Code helfen.

    Code: PHP  [Auswählen]
    <?php
    if (strstr($PHP_SELF, ---dateiname----- )) {

    }
    ?>

    Die Dateinamen stehen in \includes\filenames.php

    Deine product_listing_v1.html ist aber keine aufgerufene Seite, sondern eine Vorlage. Da mußt du anders agieren. Die erforderliche Seite ist folgende
    Code: PHP  [Auswählen]
    define('FILENAME_PRODUCT_INFO', 'product_info.php');

    Dein Ansatz halte ich von daher falsch, vor allem weiß die xtcPrice.php von nichts. Will damit sagen, das dein Ansatz nicht unbedingt zum Erfolg führen würde.
    Wenn deine Template "schlecht" programmiert ist (damit meine ich nicht durchdacht), würde ich eher das Template anpassen (wäre gut), oder die Funktin, wenn der Preisblock zusammengestzt wird (eher schlecht, da du anscheinend nicht ganz so viele Ahnung hast, und die Funktion in Updates immer wieder anpassen mußt).

    Viel Erfolg,

    mhbosch

    matchy

    • Neu im Forum
    • Beiträge: 5
    • Geschlecht:
    Re: If Abfrage ob aktuelle Seite product_listing ist
    Antwort #2 am: 30. August 2012, 12:14:22
    Danke mhbosch,

    ich werde das mal ausprobieren. Ich weiß, dass die xtcPrice.php eigentlich nicht der richtige Ansatz ist, da damit die Update-Fähigkeit begrenzt wird. Wäre dann ein Fall für meine Update-Protokoll-Datei ;-)

    Das Template ist schon (gut) durchdacht, das Problem ist, dass ich versuchen musste möglichst viele Artikel auf wenig Fläche darzustellen, da in den Kategorien soviel Artikel vorhanden sind. Allerdings verursacht da ein größerer Preis-Block (wegen der Rabattangabe) eben Platzprobleme und stört das float:left; da der Container länger wird.

    Ich habe alle TABLES in der product_listing durch DIVs mit CSS ersetzt. Sonst hätte ich das Problem nicht. Aber Tables mag ich überhaupt nicht mehr. Deswegen die Div-Container so groß bzw. lang zu machen, dass der Rabattpreis immer reinpassen würde, ist auch keine Lösung, da dass bei anderen Artikel komisch aussieht, wenn soviel Platz vorgehalten wird.

    Das Problem ist ja, das der Preisblock (nur bei Rabatt) in der xtcPrice zusammengesetzt wird, was ich auch sehr suboptimal finde.

    Hier der originalcode aus der xtcPrice.php:

    Code: PHP  [Auswählen]
    $price = '<span class="productOldPrice"><small>'.INSTEAD.'</small><del>'.$this->xtcFormat($pPrice, $format).'</del></span><br />'.ONLY.$this->checkAttributes($pID).$this->xtcFormat($sPrice, $format).'<br /><small>'.YOU_SAVE.round($discount).' % /'.$this->xtcFormat($pPrice-$sPrice, $format).'</small>';

    Habe auch versucht das alles mit CSS irgendwie so zu formatieren das es passt, aber es wird an der Stelle einfach zuviel ausgegeben, mir wäre nur der rabattierte Preis am liebsten.

    Ich schau jetzt mal ob ich mit Deiner Idee weiterkomme.

    Für andere Lösungsansätze (updatefähig) bin ich sehr offen.

    Viele Grüße,
    Matze

    mhbosch

    • Schreiberling
    • Beiträge: 394
    • Geschlecht:
    Re: If Abfrage ob aktuelle Seite product_listing ist
    Antwort #3 am: 30. August 2012, 12:57:40
    Hi,

    sende mir doch mal einen Link zu deinem Shop.  DIVs statt TABLE finde ich richtig, allerdings FLOAT zu benutzen immer so ein Sache *flöt*.

    vg,

    mhbosch

    web0null

    • Experte
    • Beiträge: 1.998
    Re: If Abfrage ob aktuelle Seite product_listing ist
    Antwort #4 am: 30. August 2012, 14:54:05
    Also ich würde eher sagen dass die xtcPrice.php nicht durchdacht ist, denn Html Elemente haben eigentlich nichts im Core zu suchen, man sollte jeden Bestandteil einzeln in variablen ausgeben, und es dann im Template zusammensetzen. Dann hat man solche Probleme nicht.

    Aber da müsste man schon einiges ändern.

    Mein Vorschlag ist, wenn man das nicht komplett umstellen will, bei dieser einen Ausgabe die einzelnen Elemente mit spans zu umschließen, und dann per css nichtgewünschtes auszublenden.

    @mhbosch
    Du meinst aber schon die
    Code: PHP  [Auswählen]
    define('FILENAME_PRODUCT_LISTING', 'product_listing.php');
    nicht die FILENAME_PRODUCT_INFO oder?

    Gruß web0null

    mhbosch

    • Schreiberling
    • Beiträge: 394
    • Geschlecht:
    Re: If Abfrage ob aktuelle Seite product_listing ist
    Antwort #5 am: 30. August 2012, 14:57:05
    web0null,

    gibt es ein gefällt mir? Na ja, ich beschäftige mich jetzt ein Jahr mit dem Shopsystem und muß sagen es gefällt mir sehr. Auch die Entwickler machen einen guten Job. Aber diese teilweise noch nicht durchgeführte Trennung von Core und Template ist etwas "altbacken".

    Ich hoffe, das dies in Zukunft mehr angepasst/umgesetzt wird.

    vg,

    mhbosch

    matchy

    • Neu im Forum
    • Beiträge: 5
    • Geschlecht:
    Re: If Abfrage ob aktuelle Seite product_listing ist
    Antwort #6 am: 31. August 2012, 09:49:58
    Hallo mhbosch & web0null,

    vielen Dank für Eure Hinweise.

    Einen Link zum Shop kann ich leider nicht senden, da es der Relaunch unsere Shops ist, der noch mit einer .htaccess vor der Öffentlichkeit gesperrt ist.  :-| Ich weiß wäre sonst einfacher.

    Variante 1:

    Ich habe nun folgenden Code in der xtcPrice.php, eigentlich sollte Test123 anstelle des Preises ausgegeben werden. Aber das if-Statement wird nicht erfüllt. Nach meinem Wissensstand müsste es so gehen, klappt aber nicht:

    Code: PHP  [Auswählen]
            if (strstr($PHP_SELF, FILENAME_PRODUCT_LISTING )) {
    $price = '<strong>'.'Test123'.'</strong>';
    } else {
    $price = '<span class="productOldPrice"><small>'.'</small><del>'.$this->xtcFormat($pPrice, $format).'</del></span><br />'.'<span class="jetztonly">'.ONLY.'</span>'.'<span class="jetztonly2">'.$this->checkAttributes($pID).$this->xtcFormat($sPrice, $format).'</span>'.'<br /><span class="productOldPrice2">'.YOU_SAVE.round($discount).' % /'.$this->xtcFormat($pPrice-$sPrice, $format).'</span>';
    }

    Variante 2:

    Nun habe ich versucht um alle relevanten Elemente ein SPAN zu legen und die Box von der Größe her mit overflow:hidden; zu begrenzen sowie alle nicht gewollten Elemente mit display:none; auf unsichtbar zu setzen. Das klappt soweit, allerdings wird der Platz weiterhin vorgehalten, somit rutscht der Warenkorb-Butten aus dem sichtbaren Bereich heraus.

    Gibt es noch andere Möglichkeiten mit CSS, ein Element zu verstecken, so dass es auch keinen Platz mehr reserviert.

     :nixweiss: Hat noch irgend einer eine Idee wie man entweder bei Variante 1 die If-Abrage so hinbekommt, dass sie anspringt oder in Variante 2 die Elemente keinen Platz mehr einnehmen.

    Riesendank schonmal für Eure kostbare Zeit,
    Gruß Matze

    mhbosch

    • Schreiberling
    • Beiträge: 394
    • Geschlecht:
    Re: If Abfrage ob aktuelle Seite product_listing ist
    Antwort #7 am: 31. August 2012, 10:33:59
    Hi Du,

    meines erachtens gehst du da falsch ran. Ich sage dir mal meinen Ansatz/Idee.

    Du weißt was kommt, also mit festen höhen Höhen und Breiten arbeiten.

    Dabei hast du 3 Bereiche (mit Überschrift 4). Das Bild, der Preis, und die Buttons.
    Durch eine Gesamtgröße
    (Überschrift (2zeilig beachten),
    das Bild (durchs Backend max bestimmt),
    dann den Preisbereich (Sonderpreise beim Layout gleich mitbeachten)
    und die Buttons ergibt sich deine Höhe!

    Das alles zusammen ergibt eine Gesamthöhe, die du bestimmst.
    Dann würde ich Überschrift, Bild und Preis untereinander legen, die Buttons unten verankern.
    Je nach Wunsch, kannst du aber auch den Preisbereich auf eine Höhe verankern.

    Dann hast du solche Probleme nicht. Anbei ein Bild aus einem meiner Designs, die (natürlich) nach meinen Vorgaben aufgebaut sind.

    [ Für Gäste sind keine Dateianhänge sichtbar ]

    Vielleicht wäre das für dich ja praktikabel.

    vg,

    mhbosch

    xxxxxxxxx

    • Fördermitglied
    • Beiträge: 615
    Re: If Abfrage ob aktuelle Seite product_listing ist
    Antwort #8 am: 31. August 2012, 11:39:58

    Das Template ist schon (gut) durchdacht, das Problem ist, dass ich versuchen musste möglichst viele Artikel auf wenig Fläche darzustellen, da in den Kategorien soviel Artikel vorhanden sind. Allerdings verursacht da ein größerer Preis-Block (wegen der Rabattangabe) eben Platzprobleme und stört das float:left; da der Container länger wird.

    Hatte das gleiche Problem. Hier ein anderer Ansatz: Wenn es zuviele Produkte je Kategorie gibt, hilft nicht ein optimiertes Layout das dem Kunden ein Maximalzahl an Artikeln präsentiert, sondern ein guter Filter der die Suche erspart und aus Kundensicht vorselektiert.  

    web28

    • modified Team
    • Beiträge: 9.404
    Re: If Abfrage ob aktuelle Seite product_listing ist
    Antwort #9 am: 31. August 2012, 12:12:33
    Zitat
    Nun möchte ich in der xtcPrice.php eine If-Abfrage einbauen, die prüft, ob die aktuelle Seite die product_listing_v1.html ist, falls ja soll er nur den Endpreis (27,99 EUR) ausgeben.

    Das kann man einfacher in der includes/classes/product.php machen
    In der function buildDataArray werden die Smartys für die Artikelisten gesetzt.

    matchy

    • Neu im Forum
    • Beiträge: 5
    • Geschlecht:
    Re: If Abfrage ob aktuelle Seite product_listing ist
    Antwort #10 am: 31. August 2012, 12:43:05
    Notlösung umgesetzt,

    @mhbosch :thx:
    Ich habe mich an deinem Lösungsansatz orientiert. Es ist aber auch ein Kompromiss, weil die Container jetzt etwas lang gezogen sind. Bei Artikeln mit kurzem Artikelnamen und keinem Sonderpreis, wirken die langen Boxen etwas verwaist.

    @Truecolors
    Das mit dem Filter ist so eine Sache, ich träume auch schon eine Weile von einem guten Artikelkonfigurator, das wurde ja auch schon ausführlich diskutiert, überzeugt hat mich bloss noch keiner so richtig. Welches "Modul" nutzt du?

    @web28
    Klingt interessant, das muss ich mir am Wochenende mal näher anschauen, ich befürchte bloss, dass ich mit dem Smarty-Zeug an die Grenzen meiner PHP-Kenntnisse stoße. Ich bin nur ein "Frickler"  :paperbag:

    Mal sehen was sich am Wochenende hier noch tut.

    Viele Grüße und erstmal ein entspanntes Wochenende,
    Matze

    xxxxxxxxx

    • Fördermitglied
    • Beiträge: 615
    Re: If Abfrage ob aktuelle Seite product_listing ist
    Antwort #11 am: 31. August 2012, 13:58:54
    Guggst Du bei Shopmodules unter Attribut Sortierungsfilter.

    jaspa

    • Frisch an Board
    • Beiträge: 89
    • Geschlecht:
    Re: If Abfrage ob aktuelle Seite product_listing ist
    Antwort #12 am: 28. Juli 2015, 16:37:42
    Probier es mal hiermit, basiert auf einer Liste mit der Klasse "overflow".
    Einfach in Dein CSS einbinden:
    Code: CSS  [Auswählen]
    .overflow{overflow:hidden}

    oder wie Du willst anpassen.
    LeerElemente werden auch erzeugt, wenn Du zum Schluss nur 1, 2 oder 3 Produkte in der UL hast.

    Sollte Dein Problem lösen, hier der Code für die product_listing.html

    Code: PHP  [Auswählen]
    {config_load file="$language/lang_$language.conf" section="index"}
    <section class="productList">
      <h2>{$CATEGORIES_NAME}</h2>
    <p>





    {assign var="elementNow" value="0"}    
    {foreach name=aussen item=module_data from=$module_content}
    {* Überprüfung welche Spalte derzeit aktuell ist *}

            {if $elementNow == "0" }
            <ul class="overflow">
                    <li class="list4-{$elementNow+1}">
            {elseif $elementNow == "1" }
                            <li class="list4-{$elementNow+1}">
            {elseif $elementNow == "2" }
                                    <li class="list4-{$elementNow+1}">
            {elseif $elementNow == "3" }
                                    <li class="list4-{$elementNow+1}">
            {/if}

            {* Content *}
            <a itemprop="url" class="transparent" href="{$module_data.PRODUCTS_LINK}" title="{#buy_now#} {$module_data.PRODUCTS_NAME}">
           
            {if $module_data.PRODUCTS_IMAGE!=''}
           
                                   
                                   
                                            <img src="{$module_data.PRODUCTS_IMAGE}" alt="{$module_data.PRODUCTS_NAME}" title="{$module_data.PRODUCTS_NAME}"/>
                                   
                                   
           
                            {else}
           
                                           
                                           
                                                    <img src="{$module_data.NO_IMAGE}" alt="{$module_data.PRODUCTS_NAME}" title="{$module_data.PRODUCTS_NAME}"/>
                                           
                                           
           
                            {/if}
           
           



                                                                                   




                                                                                    <em>{$module_data.PRODUCTS_NAME}</em>
            </a>
                                                                                           
                                                                                                                                                    <span>
                                                                                            {$module_data.PRODUCTS_PRICE}
                                                            </span>
                                                                                                           
                                                                                                   
                                                                                                   

                                                                                           
                                                                                                   
                                                                                                            {if $module_data.PRODUCTS_VPE}
                                                                                                   
                                                                                                                    <span class="vpe">{$module_data.PRODUCTS_VPE}</span>
                                                                                                           
                                                                                                            {/if}

                    <a href="{$module_data.PRODUCTS_LINK}" title="{#buy_now#} {$module_data.PRODUCTS_NAME}">{#buy_now#}</a>
    </li>
    {* Subcolums schließen *}

    {if $elementNow == "3" }
            </ul>
    {/if}

    {* Spaltennummer ändern *}
    {if $elementNow < "3" }
            {assign var="elementNow" value="`$elementNow+1`"}
    {else}
            {assign var="elementNow" value="0"}
    {/if}

    {/foreach}
    {* Leere Zellen einfügen *}
    {assign var="but1" value="`$smarty.foreach.aussen.total+3`"}
    {assign var="but2" value="`$smarty.foreach.aussen.total+2`"}
    {assign var="but3" value="`$smarty.foreach.aussen.total+1`"}
    {* Wenn Spalten unvollständig füge leere Spalten hinzu *}
    {if $but1%4 == 0 }
    <li class="list4-2"></li>
    <li class="list4-3"></li>
    <li class="list4-4"></li>
    </ul>
    {elseif $but2%4 == 0 }
    <li class="list4-3"></li>
    <li class="list4-4"></li>
    </ul>
    {elseif $but3%4 == 0 }
    <li class="list4-4"></li>
    </ul>
    {/if}




    </section>

    P.S. ist HTML5 ggf. anpassen

     und lass die Finger von der xtcPrice.php :-D

    FS72

    • Mitglied
    • Beiträge: 133
    Re: If Abfrage ob aktuelle Seite product_listing ist
    Antwort #13 am: 27. Oktober 2015, 16:27:40
    Ich würde alles was zu viel ist per CSS ausblenden.
    zB. .productOldPrice { display: none; } usw.

    VG Frank
    rechtstexte für onlineshop
    4 Antworten
    2570 Aufrufe
    27. Juli 2011, 23:07:16 von ThorstenK
    4 Antworten
    2789 Aufrufe
    06. September 2015, 10:49:30 von Jürgen
    1 Antworten
    1744 Aufrufe
    23. August 2013, 13:56:20 von Marcus Kreusch
    8 Antworten
    3081 Aufrufe
    16. Mai 2010, 14:13:21 von Tomcraft