Форум русской поддержки Joomla!® CMS
08.12.2016, 04:17:24 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Вывод в карточке товаров - количество этого товара в корзине

 (Прочитано 28 раз)
0 Пользователей и 1 Гость смотрят эту тему.
gartes
Живу я здесь
******

Репутация: +63/-3
Offline Offline

Сообщений: 827


Е = mс²


« : 26.11.2016, 22:55:23 »

Обратились ко мне с просьбой помочь вот в таком вопросе.

Цитировать
Мне требуется доработать VirtueMart 3, на стандартном шаблоне.
Есть необходимость отобразить в категории товаров, в каждой карточке, количество этого товара, которое лежит в корзине.

Ну что же давайте.. ))

1. Открываем шаблон вывода категории.
/templates/ВАШ_ШАБЛОН/html/com_virtuemart/category/default.php
В нем где то в начале документа после строки defined ('_JEXEC') or die('Restricted access');
пишем следующий код:
Код
if(!class_exists('VirtueMartCart')) 
require(VMPATH_SITE.DS.'helpers'.DS.'cart.php');
$cartData = VirtueMartCart::getCart()->cartProductsData;
$cartInfo = array ();
foreach ( $cartData as $prodInCar ){
$cartInfo[$prodInCar->virtuemart_product_id] = $prodInCar->quantity;
}//foreach
 


за тем в этом же файле опускаемся ниже и ищем вот такую строчку.
echo shopFunctionsF::renderVmSubLayout($this->productsLayout, array('products'=>$products,'currency'=>$this->currency,'products_per_row'=>$this->perRow,'showRating'=>$this->showRating ));

Эта строка выводит под слой карточки товара который определен в переменной  $this->productsLayout
По умолчанию VirtueMart имеет только два таких слоя которые могут использоваться.
Вот они.
  • /templates/ВАШ_ШАБЛОН/html/com_virtuemart/sublayouts/products.php
  • /templates/ВАШ_ШАБЛОН/html/com_virtuemart/sublayouts/products_horizon.php
Для того что бы понять какой файл Вам нужно править из перечисленных выше. Вы можете временно вставить перед конструкцией
echo shopFunctionsF::renderVmSubLayout( $this->productsLayout, array(......

Следующий код
Код
echo '<pre>'; print_r ($this->productsLayout); echo '</pre>'.__FILE__.' in line:  '.__LINE__ ;
die(__FILE__.'in line: '.__LINE__);
 

Что бы получилось как на скрине


Сохраняем этот файл.
Соответственно зайти на страницу категорий и обновить.
Не пугайтесь. но вид будет примерно следующим.



В красной рамке я выделил SUBLAYOUTS - тот который нам нужен. Значит это файл.
/templates/ВАШ_ШАБЛОН/html/com_virtuemart/sublayouts/products_horizon.php


Перед тем как перейти к выводу количества товаров находящихся в корзине. Нужно передать в файл products_horizon.php
данные которые вытащили из данных корзины.
Делаем это так .
Заменяем строку.
Код
echo shopFunctionsF::renderVmSubLayout($this->productsLayout,array('products'=>$products,'currency'=>$this->currency,'products_per_row'=>$this->perRow,'showRating'=>$this->showRating ));
 
на строку
Код
echo shopFunctionsF::renderVmSubLayout($this->productsLayout,array(	'products'=>$products,'currency'=>$this->currency,'products_per_row'=>$this->perRow,'showRating'=>$this->showRating        , 'cartInfo' => $cartInfo   ));
 


т.е. просто добавили в массив эту пару - (ключ => значение)   'cartInfo' => $cartInfo

Теперь давайте разберемся с самим выводом.
Открываем файл /templates/ВАШ_ШАБЛОН/html/com_virtuemart/sublayouts/products_horizon.php
И первым дел то что нам нужно это определить переменную  с полученными данными.
Где то после строки defined('_JEXEC') or die('Restricted access'); напишем такой код:

Код
$cartInfo = $viewData['cartInfo'];
 

Теперь нам нужно только вывести.
Для этого определяем место где будем выводить (я предлагаю это количество вывести рядом с кнопкой КУПИТЬ):
В моем случае кнопка добавить в корзину выводиться через SubLayout и код выглядит так:
Код
...................
<td class="prodtab3">
  <div class="vm3pr-<?php echo $rowsHeight[$row]['customfields'] ?>">
       <?= shopFunctionsF::renderVmSubLayout('addtocart',array('product'=>$product,'rowHeights'=>$rowsHeight[$row])); ?>
  </div>
</td>
................
 



Я не стал заморачиваться с таблицами. И вставил код после закрытия таблиц. т.е. после тэга </table>  
Код следующий.
Код
 <?php 
  if( array_key_exists($product->virtuemart_product_id, $cartInfo)  ){?>
       <div class="csrtInfo" style="float:right; margin-right:10px; color:red;">
          This product in cart :
         <span style="color:red;"><?= $cartInfo[$product->virtuemart_product_id] ?></span>
         <span style="color:red;"> pcs.</span>
      </div>
   <?php  
   } // end if  ?>
 

На скрине это выглядит так.



Вот пока и все. В теле страницы это выглядит так.



« Последнее редактирование: 26.11.2016, 23:15:16 от gartes » Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet