Ergebnis 1 bis 10 von 10

Thema: Shipping Weight in Product List, Reader und Collection ausgeben

  1. #1
    Contao-Nutzer
    Registriert seit
    26.03.2012.
    Beiträge
    115

    Standard Shipping Weight in Product List, Reader und Collection ausgeben

    Hallo Zusammen,

    meine bisherigen Versuche, den Wert des Attributs "shipping_weight" (also das Versandgewicht) in Produkt Leser oder Warenkorb auszugeben sind leider gescheitert. Kann mir jemand sagen, wie ich das ausgeben kann? Im "Kochbuch" (Forum) habe ich leider kein passendes Rezept für Noobs gefunden :-)

    Versuch im Template 'iso_collection_default' (Ausschnitt):
    PHP-Code:
    <?php foreach($this->items as $item): $i=0?>
        <tr>
            <!-- BFS, 25.09.15: shipping_weight testweise eingefügt -->
            <td class="col_<?php echo $i++; ?> weight"><?php echo $item['shipping_weight']; ?></td>
            <td class="col_<?php echo $i++; ?> price total"><?php echo $item['total']; ?></td>
            <td class="col_<?php echo $i++; ?> <?php if(!$this->isEditable) echo 'col_last '?>tax"><?php echo $item['tax_id']; ?></td><?php if($this->isEditable): ?>
            <td class="col_<?php echo $i++; ?> col_last remove"><a href="<?php echo $item['remove_href']; ?>" title="<?php echo $item['remove_title']; ?>"><?php echo $item['remove_link']; ?></a></td><?php endif; ?>
        </tr><?php if($item['item']->hasErrors()): ?>
    <?php 
    endforeach; ?>
    Es kommt kein Fehler, es wird im Warenkorb aber auch nichts angezeigt.

    Versuch im Template 'iso_reader_default':

    PHP-Code:
    <?php if ($this->shipping_weight): ?>
    <div class="shipping_weight attribute_container">
      <label><?php echo $this->shipping_weight?>
    </div>
    <?php endif; ?>
    Es wird folgende ausgegeben, wenn ein shipping_weight gepflegt ist:

    Code:
    a:2:{s:4:"unit";s:1:"g";s:5:"value";s:2:"85";}
    Wie kann ich aus dem Array den Wert und die Einheit ausgeben?

    Danke für eure Unterstützung!
    ______________________________________

    www.mit-liebe-gebacken.de

  2. #2
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    PHP-Code:
    echo $this->product->getWeight()->getWeightValue();
    echo 
    $this->product->getWeight()->getWeightUnit(); 
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  3. #3
    Contao-Nutzer
    Registriert seit
    26.03.2012.
    Beiträge
    115

    Standard

    Danke Toflar! Die Ausgabe im Product Reader funktioniert wunderbar.
    Mit der Ausgabe in der Collection für den Warenkorb bin ich leider keinen Meter weiter gekommen. Andreas hat dazu hier schon mal eine Lösung vorgegeben:
    https://community.contao.org/de/show...l=1#post187921

    Wenn ich das so
    PHP-Code:
    <?php echo deserialize($item->raw['shipping_weight'], true); ?>
    in die vorhandene foreach-Schleife für $item einbinde, bekomme ich "array" ausgegeben. Und nun kenne ich leider schon zwei Dutzend Weg, wie ich es nicht hinbekomme das aus dem Array 'value' oder 'unit' auszugeben.

    Was fehlt oder ist falsch?

    Danke für eure Unterstützung!
    ______________________________________

    www.mit-liebe-gebacken.de

  4. #4
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Das Produkt und das Item unterscheiden sich grundsätzlich in deren Verwendung. Das Produkt ist im Prinzip das was du im Backend erfasst. Später während der Bestellung wird es zu einem Item konvertiert. Produkte können vom Admin über die Zeit gelöscht werden, das soll aber die bestehenden Bestellungen nicht beinträchtigen. Deswegen gibt es das Item welches nur die wichtigsten Daten speichert (Preis etc., aber zum Beispiel keine Bilder).

    Du hast also zwei Wege an die Daten zu kommen. Entweder du greifst auf das zugehörige Produkt zurück (das wie gesagt gelöscht worden sein kann und (!) die aktuellen Daten lädt, nicht die von damals als du bestellt hast!), dann kannst du sowas machen:

    PHP-Code:
    if ($item->hasProduct()) {
        echo 
    $item->getProduct()->getWeight()->getWeightValue(); 
        echo 
    $item->getProduct()->getWeight()->getWeightUnit(); 
    } else {
        
    // Überleg dir was Schlaues, was du dem Kunden anzeigen willst, wenn das Produkt von damals gelöscht wurde.

    Ansonsten kannst du auf die Konfiguration des Items zurückgreifen:

    PHP-Code:
    // Gibt dir ein Array von Konfigurationen aus, fisch dir die raus, die du haben möchtest :-)
    dump($item->getConfiguration()); 
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  5. #5
    Contao-Nutzer
    Registriert seit
    26.03.2012.
    Beiträge
    115

    Standard

    Wenn ich

    PHP-Code:
     <?php dump($item->getConfiguration()); ?>
    ins Template innerhalb der foreach-Schleife für $item einfüge, bekomme ich folgende Fehlermeldung:

    Fatal error: Call to a member function getConfiguration() on array in C:\xampp\htdocs\mlg.de\templates\bfs2015\iso_colle ction_cart_full.html5

    Die Schleife:
    PHP-Code:
    <?php foreach($this->items as $item): $i=0?>
        
        <tr class="<?php echo $item['rowClass']; ?>"><?php if(!$this->isNotification): ?>
            <td class="col_<?php echo $i++; ?> col_first image"><?php echo $this->getGallery('images'$item['item'])->generateMainImage(); ?></td><?php endif; ?>
            <td class="col_<?php echo $i++; ?><?php if($this->isNotification) echo ' col_first'?> name">
                <?php if($this->linkProducts && $item['href']): ?><a href="<?php echo $item['href']; ?>"><?php echo $item['name']; ?></a><?php else: ?><?php echo $item['name']; ?><?php endif; ?>
                <?php if(!empty($item['configuration'])): ?>
                <ul class="item_options">
                    <?php foreach($item['configuration'] as $value): ?>
                    <li><?php echo $value['label']; ?><?php echo (string) $value?></li>
                    <?php endforeach; ?>
                </ul>
                <?php endif; ?>
            </td>
            <td class="col_<?php echo $i++; ?> quantity">
            <?php if($this->isEditable): ?>
                <input name="quantity[<?php echo $item['id']; ?>]" type="text" class="text" value="<?php echo $item['quantity']; ?>" maxlength="10">
            <?php else: ?>
                <?php echo $item['quantity']; ?> x
            <?php endif; ?>
            </td>
            <!-- BFS, 25.09.15: shipping_weight testweise eingefügt -->
            <td class="col_<?php echo $i++; ?> weight"><?php dump($item->getConfiguration()); ?></td>
            <td class="col_<?php echo $i++; ?> weight total"><?php echo deserialize($item->raw['shipping_weight'], true); ?> <!--erster Versuch--></td>
            <td class="col_<?php echo $i++; ?> price"><?php echo $item['price']; ?></td>
            <td class="col_<?php echo $i++; ?> price total"><?php echo $item['total']; ?></td>
            <td class="col_<?php echo $i++; ?> <?php if(!$this->isEditable) echo 'col_last '?>tax"><?php echo $item['tax_id']; ?></td><?php if($this->isEditable): ?>
            <td class="col_<?php echo $i++; ?> col_last remove"><a href="<?php echo $item['remove_href']; ?>" title="<?php echo $item['remove_title']; ?>"><?php echo $item['remove_link']; ?></a></td><?php endif; ?>
        </tr><?php if($item['item']->hasErrors()): ?>
        <tr class="<?php echo $item['rowClass']; ?>">
            <td colspan="<?php echo $i?>"><p class="error"><?php echo implode('</p><p class="error">'$item['item']->getErrors()); ?></p></td>
        </tr>
    <?php endif; ?>
    <?php 
    endforeach; ?>
    Mit
    PHP-Code:
    <?php var_dump($item->getConfiguration()); ?>
    habe ich es auch probiert. Gleiche Fehlermeldung.

    Hiiiilfe ...
    ______________________________________

    www.mit-liebe-gebacken.de

  6. #6
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    PHP-Code:
    $item['item']->getConfiguration(); 
    natürlich. Auf einem Array kann man schlecht Methoden aufrufen
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  7. #7
    Contao-Nutzer
    Registriert seit
    26.03.2012.
    Beiträge
    115

    Standard Configuration in tl_iso_collection_item leer?

    Hallo Toflar,

    um meinen mangelnden Überblick im PHP auszugleichen, habe ich mir das noch mal mit einem wissenden Kollegen angesehen.

    Die Funktion getConfiguration() gibt ein leeres Array zurück.

    PHP-Code:
    <?php var_dump$item['item']->getConfiguration()); ?>
    Ergebnis: array(0) { }

    Und auch in einer Testbestellung ist in tl_iso_collection_item die Configuration leer, siehe Screen Shot.

    isotope_collection_config_leer.PNG

    Wie liegt nun der Fehler, in meiner Produktkonfiguration?
    EDIT: Der Testartikel ist ein Artikel ohne Varianten. Das Versandgewicht ist mit dem Wert 85 g gepflegt.

    Vielen Dank für Rückmeldung!
    Chris
    Geändert von cs1982 (05.10.2015 um 08:28 Uhr)
    ______________________________________

    www.mit-liebe-gebacken.de

  8. #8
    Contao-Nutzer
    Registriert seit
    26.03.2012.
    Beiträge
    115

    Standard

    Ich habe mir in der DB in tl_iso_collection_item das Feld 'configuration' noch mal genauer angesehen. Das darin gespeicherte serialisierte (ich hoffe, ich habe das mit dem (De)serialisieren richtig versanden) Array ist nur nicht leer, wenn Produktvarianten genutzt werden. Augenscheinlich war das auch schon in Isotope 1.4.7 so. Ich habe mir alte Bestellung vor der Migration angesehen. Da Bild zeigt ein Beispiel.

    isotope_collection_config_mitVarianten.PNG

    Fehlt das Shipping_Weight in der gespeicherten Configuration oder istder Wert so wo anders gespeichert? Vielen Dank für jede Rückmeldung!
    ______________________________________

    www.mit-liebe-gebacken.de

  9. #9
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Stimmt. Die Configuration enthält nur die vom Kunden veränderbaren Attribute. Das Gewicht wird offenbar nicht dauerhaft im Item abgelegt. Es bleibt dir also nur der Weg via dem Produkt.
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  10. #10
    Contao-Nutzer
    Registriert seit
    26.03.2012.
    Beiträge
    115

    Standard

    Ok, über die Produkte komme ich an das Shippping Weight und die Einheit.

    Und wie komme für $surcharge nun noch an das Shipping Weight. Dabei gehe ich davon aus, dass alle Gewichte in einer einheitlichen Einheit definiert sind. Die Zwischensumme ist dafür da, den Wert, nachdem dann für den Warenkorb die gewichtsabhängigen Versandkosten ermittelt werden, anzuzeigen.

    PHP-Code:
        <?php foreach ($this->surcharges as $surcharge): $i=0?>
        <tr class="<?php echo $surcharge['rowClass']; ?>">
            <?php if(!$this->isNotification): ?>
            <td class="col_<?php echo $i++; ?> col_first">&nbsp;</td><?php endif; ?>
            <td class="col_<?php echo $i++; $i++; ?><?php if($this->isNotification) echo ' col_first'?> name" colspan="2"><?php echo $surcharge['label']; ?></td>
               <td class="col_<?php echo $i++; ?> weight">&nbsp;</td>
            <td class="col_<?php echo $i++; ?> weight total">&nbsp;</td>
            <td class="col_<?php echo $i++; ?> price tax"><!--BFS--><?php echo $surcharge['price']; ?></td>
            <td class="col_<?php echo $i++; ?> price total"><?php echo $surcharge['total_price']; ?></td>
            <td class="col_<?php echo $i++; ?> <?php if(!$this->isEditable) echo 'col_last '?>tax"><?php echo $surcharge['tax_id']; ?></td><?php if($this->isEditable): ?>
            <td class="col_<?php echo $i++; ?> col_last remove">&nbsp;</td><?php endif; ?>
        </tr>
        <?php endforeach; ?>
    Meine nicht funktionierenden Versuche lasse ich mal weg ;-)

    VG
    Chris
    ______________________________________

    www.mit-liebe-gebacken.de

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
  •