Думаю, многие уже успели столкнуться с проблемой в Virtuemart 2, которая заключается в том, что в макете страницы «Спасибо за заказ» (той, которая появляется, когда пользователь подтверждает заказ) нет практически ничего. В этом кейсе я расскажу, как получить на ней всю информацию о совершенном заказе.
На самом деле, решение очень простое, но его я не встретил ни на одном форуме, в том числе, на официальном. Алгоритм следующий:
- Переопределяем макет страницы «Спасибо за заказ» в используемый шаблон Joomla. Для этого копируем файл components/com_virtuemart/views/cart/tmpl/order_done.php в папку templates/ВАШ_ШАБЛОН /html/com_virtuemart/cart. Если каких-то каталогов не хватает, создаем их вручную. После этого работаем только с файлом, который находится в папке с шаблоном.
- В файле order_done.php добавляем следующий код:
<?php require_once(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'orders.php');$order = VirtueMartModelOrders::getOrder($this->cart->virtuemart_order_id);?>
Посмотреть значения, ставшие доступными, можно вставив ниже код:
<pre><?php print_r($order); ?></pre>
Пример вывода данных:
<?php echo $order['details']['ST']->order_number ?> /*номер заказа*/<?php echo $order['details']['ST']->created_on ?> /*дата заказа*/
и т.д.
Комментарии
не так,если можно опишите пожалуйста подробней куда вставлять код.
Я выводил , к сожалению там нет этого. Открыл модель orders.php, там не тянутся изображения, но я так и не понял из какой модели в корзину берется вывод изображений.
Функция включена. Не передает в массив, увы.
Спасибо
В принципе я понимаю, что ничего невозможного нет, однако вопрос актуальный и очень нужный. Может создадите отдельный кейс. Думаю будет полезно многим.
http://forum.virtuemart.ru/viewtopic.php?f=37&t=10057
Код:
<pre><?php print_r($order); ?></pre>
В нем вы можете посмотреть, как обратиться, чтобы получить те или иные данные. А выводить их нужно строчкой:
Код:
<pre><?php echo $order['details']['ST']->order_number ?></pre>
Где вместо order_number нужно подставить данные из скобок того или иного элемента массива, чтобы получить значение.
Код:
<pre><?php print_r($order); ?></pre>
Array ( [details] => Array ( ) [history] => Array ( ) [items] => Array ( ) [calc_rules] => Array ( ) )
как видно массивы пустые и значений в них нет. вирт 2.6.10. может в новой версии по другому как то?
Код:
<?php echo JFactory::getUser($order->virtuemart_user_id)->username;?>
все выводит нормально
Возможно, кому-то будет полезно:
Добавил в конец order_done.php следующий код:
Код:
// SMS
require_once(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'orders.php');
$order = VirtueMartModelOrders::getOrder($this->cart->virtuemart_order_id);
include_once "smsc_api.php";
list($sms_id, $sms_cnt, $cost, $balance) = send_sms("79191234020", "Заказ на ".round($order['details']['BT']->order_total)." р. ".$order['details']['BT']->first_name." ".$order['details']['BT']->last_name." ".$order['details']['BT']->phone_1." Проверьте email", 0);
Код:
<?php
defined('_JEXEC') or die('');
echo "<h1 class='vm-page-title'>".JText::_('COM_VIRTUEMART_CART_ORDERDONE_THANK_YOU')."</h1>";
echo $this->html;
echo "<br>";
echo "<h3 class='zakaz'>".JText::_('COM_VIRTUEMART_MAIL_SHOPPER_OTP')."</h3>";
require_once(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'orders.php');
$order = VirtueMartModelOrders::getOrder($this->cart->virtuemart_order_id);
$product_link = JURI::root().'index.php?option=com_virtuemart&view=productdetails&virtuemart_category_id=' . $item->virtuemart_category_id .
'&virtuemart_product_id=' . $item->virtuemart_product_id;
?>
<?php echo $order['details']['BT']->order_number; ?>
<?php echo $order['details']['BT']->email; ?>
<?php echo $order['details']['BT']->first_name; ?>
<?php echo $order['items']['0']->order_item_sku; ?>
<?php echo $order['items']['0']->order_item_name; ?>
<?php echo $product_link; ?><?php echo $order['items']['0']->virtuemart_product_id; ?>
Код:
<pre><?php print_r($order); ?></pre>
и увидите весь массив доступных данных. Если там нет изображения, то его можно получить по ID товара, подключив еще одну модель, по аналогии с тем, как это происходит в файле components/com_virtuemart/views/productdetails/view.html.php
В нет инф. о фото вообще, в view.html.php не могу найти где по id можно вывести фото.
Подскажите, пожалуйста, где именно копать, какую строчку.
Код:
require_once(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'product.php');
$product = VirtueMartModelProduct::getProductSingle($item->virtuemart_product_id);
VirtueMartModelProduct::addImages($product,1);
echo $product->images[0]->file_url_thumb;
Но проще, наверное, запросом в БД:
Код:
<?php
$pid= $item->virtuemart_product_id;
$sql="select i.file_url_thumb as image from #__virtuemart_medias as i,
#__virtuemart_product_medias as mi where
i.virtuemart_media_id = mi.virtuemart_media_id and
mi.virtuemart_product_id =".$pid." limit 0,1";
$dbb = JFactory::getDbo();
$dbb->setQuery($sql);
$results = $dbb->loadObjectList();
?>
<img src="<?php echo JURI::root () . $results[0]->image; ?>" alt="<?php echo $item->order_item_name;?>" />
$product = VirtueMartModelProduct::getProductSingle($item->virtuemart_product_id);
На белой странице, без шаблона, выводит Спасибо за заказ и тд.
В консоле выдает Failed to load resource: the server responded with a status of 500 (Internal Server Error)
http://wedal.ru/uroki-joomla/joomla-faq.html
Не забудьте переопределить текущий макет в шаблон Joomla. Подробнее в этой статье: http://wedal.ru/rasshireniya-joomla/nastrojka-shablona-virtuemart-3.html
у меня 2.6.3 и работает как ни странно (сделал так с артикулом)
Код:
<pre><?php print_r($order); ?></pre>
есть ли среди них нужные вам настраиваемые поля. Если есть, можно вывести довольно легко, если же нет, то нужно будет сначала получить ID заказанных товаров и по ним получить значения полей.
Код:
$this->html
Именно в ней будет выводиться кнопка Робокассы (по крайней мере должна, если они не придумали у себя в плагине что-то экзотическое). Дальше просто выводите нужный вам текст перед этой переменной.
Также обратите внимание, что в новых VM макетов "Спасибо за заказ" два: orderdone.php и order_done.php. Я, честно говоря, всегда их путаю теперь - какой и когда используется. Пробуйте с одним, если текст не выведется, то с другим.