wow español ecommerce php e-commerce virtuemart

php - español - woocommerce ecommerce



Agregar cantidad y agregar al carrito en productos relacionados en la página de detalles del producto para virtuemart 3 y mostrar en forma lineal (1)

Si está utilizando anulaciones y tiene

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

de lo que puede usarlo en anulaciones específicas de php, en su anulación específica de php

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

Sobre cómo usar sub layout aquí documentación oficial.

Y también creo que necesitas leer este también CÓDIGOS AJUSTES PARA VIRTUEMART 3

Me gustaría saber cómo agregar la cantidad, el botón Agregar al carrito y mostrarlos de manera lineal en la página de detalles del producto vm3.

Encontré una pregunta similar aquí ( Mostrar precios y el botón Agregar al carrito en productos relacionados con Virtuemart 2.0 ), pero nada de eso funciona para vm3.

Creo que encontré los archivos correctos en components / com_virtuemart / sublayouts / related.php pero ninguna de la sintaxis parece que lo hace en la pregunta que encontré.

Adjuntaré una imagen de antes y después de lo que estoy tratando de lograr. Antes de:

y esto es lo que me gustaría que fuera. Después:

Si tiene alguna idea o sugerencia, estaría muy agradecido.

Esto es lo que tengo en componentes / 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>''; }

Esto es lo que tengo en componentes / 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="<?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>