Hinzufügen von Menge und Hinzufügen zum Warenkorb in verwandten Produkten auf der Produktdetailseite für virtuemart 3 und lineare Anzeige

Lesezeit: 9 Minuten

Benutzer-Avatar
Frank Barcelona

Ich würde gerne wissen, wie man die Schaltfläche „Menge“ und „Zum Warenkorb hinzufügen“ hinzufügt und sie linear auf der vm3-Produktdetailseite anzeigt.

Ich habe hier eine ähnliche Frage gefunden (Preise anzeigen und Schaltfläche zum Warenkorb hinzufügen in verwandten Produkten Virtuemart 2.0), aber nichts davon funktioniert für vm3.

Ich glaube, ich habe die richtigen Dateien unter components/com_virtuemart/sublayouts/related.php gefunden, aber keine der Syntax sieht so aus wie in der Frage, die ich gefunden habe.

Ich werde ein Vorher-Nachher-Bild von dem anhängen, was ich zu erreichen versuche. Vor:

Vor

und so würde ich es gerne sehen. Nach:

nach

Wenn Sie irgendwelche Ideen oder Hinweise haben, wäre ich so dankbar.

Folgendes habe ich in components/com_virtuemart/sublayouts/related.php:

<?php
defined('_JEXEC') or die('Restricted access');

$related = $viewData['related'];
$customfield = $viewData['customfield'];
$thumb = $viewData['thumb'];

//juri::root() For whatever reason, we used this here, maybe it was for the mails
echo JHtml::link (JRoute::_ ('index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' . $related->virtuemart_product_id . '&virtuemart_category_id=' . $related->virtuemart_category_id), $thumb   . $related->product_name, array('title' => $related->product_name,'target'=>'_blank'));

if($customfield->wPrice){
    $currency = calculationHelper::getInstance()->_currencyDisplay;
    echo $currency->createPriceDiv ('salesPrice', 'COM_VIRTUEMART_PRODUCT_SALESPRICE', $related->prices);
}
if($customfield->wDescr){
    echo '<p class="product_s_desc">'.$related->product_s_desc.'</p>';
}

Folgendes habe ich in components/com_virtuemart/views/productdetails/tmpl/default.php:

<?php
/**
 *
 * Show the product details page
 *
 * @package VirtueMart
 * @subpackage
 * @author Max Milbers, Eugen Stranz, Max Galt
 * @link http://www.virtuemart.net
 * @copyright Copyright (c) 2004 - 2014 VirtueMart Team. All rights reserved.
 * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php
 * VirtueMart is free software. This version may have been modified pursuant
 * to the GNU General Public License, and as distributed it includes or
 * is derivative of works licensed under the GNU General Public License or
 * other free or open source software licenses.
 * @version $Id: default.php 9058 2015-11-10 18:30:54Z Milbo $
 */
// Check to ensure this file is included in Joomla!
defined('_JEXEC') or die('Restricted access');

/* Let's see if we found the product */
if (empty($this->product)) {
    echo vmText::_('COM_VIRTUEMART_PRODUCT_NOT_FOUND');
    echo '<br /><br />  ' . $this->continue_link_html;
    return;
}

echo shopFunctionsF::renderVmSubLayout('askrecomjs',array('product'=>$this->product));

if(vRequest::getInt('print',false)){ ?>
    <body onload="javascript:print();">
<?php } ?>

<div class="productdetails-view productdetails">
    <?php
    // Product Navigation
    if (VmConfig::get('product_navigation', 1)) {
    ?>
        <div class="product-neighbours">
        <?php
        if (!empty($this->product->neighbours ['previous'][0])) {
            $prev_link = JRoute::_('index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' . $this->product->neighbours ['previous'][0] ['virtuemart_product_id'] . '&virtuemart_category_id=' . $this->product->virtuemart_category_id, FALSE);
            echo JHtml::_('link', $prev_link, $this->product->neighbours ['previous'][0]
            ['product_name'], array('rel'=>'prev', 'class' => 'previous-page','data-dynamic-update' => '1'));
        }
        if (!empty($this->product->neighbours ['next'][0])) {
            $next_link = JRoute::_('index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' . $this->product->neighbours ['next'][0] ['virtuemart_product_id'] . '&virtuemart_category_id=' . $this->product->virtuemart_category_id, FALSE);
            echo JHtml::_('link', $next_link, $this->product->neighbours ['next'][0] ['product_name'], array('rel'=>'next','class' => 'next-page','data-dynamic-update' => '1'));
        }
        ?>
        <div class="clear"></div>
        </div>
    <?php } // Product Navigation END
    ?>

    <?php // Back To Category Button
    if ($this->product->virtuemart_category_id) {
        $catURL =  JRoute::_('index.php?option=com_virtuemart&view=category&virtuemart_category_id='.$this->product->virtuemart_category_id, FALSE);
        $categoryName = vmText::_($this->product->category_name) ;
    } else {
        $catURL =  JRoute::_('index.php?option=com_virtuemart');
        $categoryName = vmText::_('COM_VIRTUEMART_SHOP_HOME') ;
    }
    ?>
    <div class="back-to-category">
        <a href="https://stackoverflow.com/questions/34160860/<?php echo $catURL ?>" class="product-details" title="<?php echo $categoryName ?>"><?php echo vmText::sprintf('COM_VIRTUEMART_CATEGORY_BACK_TO',$categoryName) ?></a>
    </div>

    <?php // Product Title   ?>
    <h1 itemprop="name"><?php echo $this->product->product_name ?></h1>
    <?php // Product Title END   ?>

    <?php // afterDisplayTitle Event
    echo $this->product->event->afterDisplayTitle ?>

    <?php
    // Product Edit Link
    echo $this->edit_link;
    // Product Edit Link END
    ?>

    <?php
    // PDF - Print - Email Icon
    if (VmConfig::get('show_emailfriend') || VmConfig::get('show_printicon') || VmConfig::get('pdf_icon')) {
    ?>
        <div class="icons">
        <?php

        $link = 'index.php?tmpl=component&option=com_virtuemart&view=productdetails&virtuemart_product_id=' . $this->product->virtuemart_product_id;

        echo $this->linkIcon($link . '&format=pdf', 'COM_VIRTUEMART_PDF', 'pdf_button', 'pdf_icon', false);
        //echo $this->linkIcon($link . '&print=1', 'COM_VIRTUEMART_PRINT', 'printButton', 'show_printicon');
        echo $this->linkIcon($link . '&print=1', 'COM_VIRTUEMART_PRINT', 'printButton', 'show_printicon',false,true,false,'class="printModal"');
        $MailLink = 'index.php?option=com_virtuemart&view=productdetails&task=recommend&virtuemart_product_id=' . $this->product->virtuemart_product_id . '&virtuemart_category_id=' . $this->product->virtuemart_category_id . '&tmpl=component';
        echo $this->linkIcon($MailLink, 'COM_VIRTUEMART_EMAIL', 'emailButton', 'show_emailfriend', false,true,false,'class="recommened-to-friend"');
        ?>
        <div class="clear"></div>
        </div>
    <?php } // PDF - Print - Email Icon END
    ?>

    <?php
    // Product Short Description
    if (!empty($this->product->product_s_desc)) {
    ?>
        <div class="product-short-description">
        <?php
        /** @todo Test if content plugins modify the product description */
        echo nl2br($this->product->product_s_desc);
        ?>
        </div>
    <?php
    } // Product Short Description END

    echo shopFunctionsF::renderVmSubLayout('customfields',array('product'=>$this->product,'position'=>'ontop'));
    ?>

    <div class="vm-product-container">
    <div class="vm-product-media-container">
<?php
echo $this->loadTemplate('images');
?>
    </div>

    <div class="vm-product-details-container">
        <div class="spacer-buy-area">

        <?php
        // TODO in Multi-Vendor not needed at the moment and just would lead to confusion
        /* $link = JRoute::_('index2.php?option=com_virtuemart&view=virtuemart&task=vendorinfo&virtuemart_vendor_id='.$this->product->virtuemart_vendor_id);
          $text = vmText::_('COM_VIRTUEMART_VENDOR_FORM_INFO_LBL');
          echo '<span class="bold">'. vmText::_('COM_VIRTUEMART_PRODUCT_DETAILS_VENDOR_LBL'). '</span>'; ?><a class="modal" href="<?php echo $link ?>"><?php echo $text ?></a><br />
         */
        ?>

        <?php
        echo shopFunctionsF::renderVmSubLayout('rating',array('showRating'=>$this->showRating,'product'=>$this->product));

        if (is_array($this->productDisplayShipments)) {
            foreach ($this->productDisplayShipments as $productDisplayShipment) {
            echo $productDisplayShipment . '<br />';
            }
        }
        if (is_array($this->productDisplayPayments)) {
            foreach ($this->productDisplayPayments as $productDisplayPayment) {
            echo $productDisplayPayment . '<br />';
            }
        }

        //In case you are not happy using everywhere the same price display fromat, just create your own layout
        //in override /html/fields and use as first parameter the name of your file
        echo shopFunctionsF::renderVmSubLayout('prices',array('product'=>$this->product,'currency'=>$this->currency));
        ?> <div class="clear"></div><?php
        echo shopFunctionsF::renderVmSubLayout('addtocart',array('product'=>$this->product));

        echo shopFunctionsF::renderVmSubLayout('stockhandle',array('product'=>$this->product));

        // Ask a question about this product
        if (VmConfig::get('ask_question', 0) == 1) {
            $askquestion_url = JRoute::_('index.php?option=com_virtuemart&view=productdetails&task=askquestion&virtuemart_product_id=' . $this->product->virtuemart_product_id . '&virtuemart_category_id=' . $this->product->virtuemart_category_id . '&tmpl=component', FALSE);
            ?>
            <div class="ask-a-question">
                <a class="ask-a-question" href="<?php echo $askquestion_url ?>" rel="nofollow" ><?php echo vmText::_('COM_VIRTUEMART_PRODUCT_ENQUIRY_LBL') ?></a>
            </div>
        <?php
        }
        ?>

        <?php
        // Manufacturer of the Product
        if (VmConfig::get('show_manufacturers', 1) && !empty($this->product->virtuemart_manufacturer_id)) {
            echo $this->loadTemplate('manufacturer');
        }
        ?>

        </div>
    </div>
    <div class="clear"></div>


    </div>
<?php
    $count_images = count ($this->product->images);
    if ($count_images > 1) {
        echo $this->loadTemplate('images_additional');
    }

    // event onContentBeforeDisplay
    echo $this->product->event->beforeDisplayContent; ?>

    <?php
    //echo ($this->product->product_in_stock - $this->product->product_ordered);
    // Product Description
    if (!empty($this->product->product_desc)) {
        ?>
        <div class="product-description">
    <?php /** @todo Test if content plugins modify the product description */ ?>
        <span class="title"><?php echo vmText::_('COM_VIRTUEMART_PRODUCT_DESC_TITLE') ?></span>
    <?php echo $this->product->product_desc; ?>
        </div>
    <?php
    } // Product Description END

    echo shopFunctionsF::renderVmSubLayout('customfields',array('product'=>$this->product,'position'=>'normal'));

    // Product Packaging
    $product_packaging = '';
    if ($this->product->product_box) {
    ?>
        <div class="product-box">
        <?php
            echo vmText::_('COM_VIRTUEMART_PRODUCT_UNITS_IN_BOX') .$this->product->product_box;
        ?>
        </div>
    <?php } // Product Packaging END ?>

    <?php 
    echo shopFunctionsF::renderVmSubLayout('customfields',array('product'=>$this->product,'position'=>'onbot'));

  echo shopFunctionsF::renderVmSubLayout('customfields',array('product'=>$this->product,'position'=>'related_products','class'=> 'product-related-products','customTitle' => true ));

    echo shopFunctionsF::renderVmSubLayout('customfields',array('product'=>$this->product,'position'=>'related_categories','class'=> 'product-related-categories'));

    ?>

<?php // onContentAfterDisplay event
echo $this->product->event->afterDisplayContent;

echo $this->loadTemplate('reviews');

// Show child categories
if (VmConfig::get('showCategory', 1)) {
    echo $this->loadTemplate('showcategory');
}

$j = 'jQuery(document).ready(function($) {
    Virtuemart.product(jQuery("form.product"));

    $("form.js-recalculate").each(function(){
        if ($(this).find(".product-fields").length && !$(this).find(".no-vm-bind").length) {
            var id= $(this).find(\'input[name="virtuemart_product_id[]"]\').val();
            Virtuemart.setproducttype($(this),id);

        }
    });
});';
//vmJsApi::addJScript('recalcReady',$j);

/** GALT
 * Notice for Template Developers!
 * Templates must set a Virtuemart.container variable as it takes part in
 * dynamic content update.
 * This variable points to a topmost element that holds other content.
 */
$j = "Virtuemart.container = jQuery('.productdetails-view');
Virtuemart.containerSelector=".productdetails-view";";

vmJsApi::addJScript('ajaxContent',$j);

if(VmConfig::get ('jdynupdate', TRUE)){
    $j = "jQuery(document).ready(function($) {
    Virtuemart.stopVmLoading();
    var msg = '';
    jQuery('a[data-dynamic-update=\"1\"]').off('click', Virtuemart.startVmLoading).on('click', {msg:msg}, Virtuemart.startVmLoading);
    jQuery('[data-dynamic-update=\"1\"]').off('change', Virtuemart.startVmLoading).on('change', {msg:msg}, Virtuemart.startVmLoading);
});";

    vmJsApi::addJScript('vmPreloader',$j);
}

echo vmJsApi::writeJS();

if ($this->product->prices['salesPrice'] > 0) {
  echo shopFunctionsF::renderVmSubLayout('snippets',array('product'=>$this->product, 'currency'=>$this->currency, 'showRating'=>$this->showRating));
}

?>
</div>

  • Bitte fügen Sie den relevanten Code hinzu, mit dem Sie arbeiten.

    – devlin carnate

    8. Dezember 2015 um 16:47 Uhr

  • Ich habe ein ‘?> xxxx

    – Frank Barcelona

    8. Dezember 2015 um 17:41 Uhr


  • Frank, hast du es geschafft, dieses Problem zu lösen?

    – Andrey_yog

    25. Mai 2016 um 22:56 Uhr

  • Negativ. Bekomme ich eine Auszeichnung für die längste unbeantwortete Frage aller Zeiten?

    – Frank Barcelona

    26. Mai 2016 um 2:03 Uhr

Wenn Sie Überschreibungen verwenden und Sie haben

/templates/{your_template_folder}/html/com_virtuemart/sublayouts/addtocart.php

als Sie es in bestimmten PHP-Überschreibungen verwenden können, in Ihrer spezifischen PHP-Überschreibung

echo shopFunctionsF::renderVmSubLayout('addtocart',array('product'=>$this->product));

Informationen zur Verwendung des Unterlayouts hier offizielle Dokumentation

Und ich denke auch, dass Sie dieses auch lesen müssen CODE-ANPASSUNGEN FÜR VIRTUEMART 3

1251670cookie-checkHinzufügen von Menge und Hinzufügen zum Warenkorb in verwandten Produkten auf der Produktdetailseite für virtuemart 3 und lineare Anzeige

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy