Warning: Creating default object from empty value in /home/p358670/www/old.didgo.ru/components/com_sh404sef/shInit.php on line 37
Добавление нового поля к заказу. Не путать с добавлением поля к товару! | Доработка Virtuemart
 


ВНИМАНИЕ!!! ЭТО СТАРАЯ ВЕРСИЯ САЙТА.

ДЛЯ ПОЛУЧЕНИЯ АКТУАЛЬНОЙ ИНФОРМАЦИИ

ПЕРЕЙДИТЕ НА WWW.DIDGO.RU




Опубликовано в: Доработка Virtuemart
19 мая 2011


Добавление нового поля к заказу. Не путать с добавлением поля к товару!

Обратился ко мне заказчик с просьбой доработать Virtuemart таким образом, чтобы каждому заказу можно было присвоить свой уникальный номер. Это сделано для отслеживания почтового отправления. Т.е. по этому номеру клиент может отследить где сейчас находится его бандероль с товаром.

Так же можно использовать данный хак, если необходимо заказу задавать какую-либо метку, для использования сотрудниками магазина, например внутри организации. Тот же комментарий, к примеру.

Прошу не путать с добавлением дополнительного поля к товару. В нашем случае, при просмотре заказа должно присутствовать какое-то поле, в которое мы и будем вводить код. Помимо этого, данный код должен отображаться в личном кабинете пользователя.

Шаг 1. Добавление нового поля в админку.

Я решил добавить поле сразу после номера заказа, чтобы было удобней. На выходе нужно было получить в админке вот такое поле.

Новое поле к заказу - рис. 1

Правим файл /administrator/components/com_virtuemart/html/order.order_print.php

После 87-88 строки

<td><?php printf("%08d", $db->f("order_id"));?></td>
</tr>

нужно вставить код:

<tr>
    <td colspan="2">
         <?php $ps_order_change_html->html_change_track() ?>
    </td>
</tr>

Если сейчас обновить страничку с заказом в админке, то увидим ошибку - Fatal error: Call to undefined method. Это нормально, так и должно быть, ведь мы добавили только вызов функции, а нам нужно написать ещё и саму функцию. Это сделаем в следующем шаге.

 

Шаг 2. Добавление функции html_change_track

Редактируем файл /administrator/components/com_virtuemart/classes/ps_order_change_html.php

После  293-294 строки:

<?php
 }

нужно добавить следующий код:

function html_change_track() {
global $VM_LANG;

$db = new ps_DB;
$q = "SELECT * FROM #__{vm}_orders WHERE order_id='".$this->order_id."'";
$db->query($q);
$db->next_record();
?>
<form method="post" action="">
<?php echo $VM_LANG->_('PHPSHOP_TRACK') ?>:
<input type="text" value="<?php $db->p("order_track") ?>" size="30" name="order_track" />
<input type="submit" value="Обновить" name="Submit" class="button">
<input type="hidden" value="1" name="change_track" />
<input type="hidden" name="page" value="order.order_print" />
<input type="hidden" name="option" value="com_virtuemart" />
<input type="hidden" name="func" value="" />
<input type="hidden" name="order_id" value="<?php echo $this->order_id ?>" />  
</form>
<?php
}

 

Шаг 3. Добавим языковую константу.

Правим файл /administrator/components/com_virtuemart/languages/common/russian.php

В любое место, после

$langvars = array (

Добавить:

'PHPSHOP_TRACK' => 'Трекинг-номер',
 'PHPSHOP_TRACK_UPD' => ' обновлён',
 'PHPSHOP_TRACK_ERROR' => 'ОШИБКА!',

Теперь нам нужно добавить поле в базу данных.

 

Шаг 4. Добавление нового поля в MySQL

Заходим в phpMyAdmin, выбираем нашу базу и выполняем запрос:

alter table jos_vm_orders add order_track varchar(50) default NULL;

Обновив страничку заказа, можно уже видеть наше поле с кнопкой "Обновить". Однако если ввести данные и нажать кнопку, то никаких изменений не произойдёт. Данные в базу не запишутся. Нужно выполнить ещё одно действие.

 

Шаг 5. Добавим функцию на обновление поля order_track

Редактируем файл /administrator/components/com_virtuemart/classes/ps_order_change.php

После 480-481 строки

$this->reload_from_db = 1 ;
 }

добавим код

function change_track( $order_id, $track ) {
 
 $db = new ps_DB( ) ;
 $q = "UPDATE #__{vm}_orders SET " ;
 $q .= "order_track =  '" . $track . "' " ;
 $q .= "WHERE order_id = '" . $order_id . "'" ;
 $db->query( $q ) ;
 $db->next_record() ;
 $this->recalc_order( $order_id ) ;
 $this->reload_from_db = 1 ;
 }

В районе 1298-1299 строки найдите код:

$vmLogger->info( $VM_LANG->_( 'PHPSHOP_COUPON_DISCOUNT' ) . $VM_LANG->_( 'PHPSHOP_ORDER_EDIT_SOMETHING_HAS_CHANGED' ) ) ;
 }

После него нужно добавить следующий код, чтобы выводить сообщение об успешном обновлении данных:

elseif( vmGet( $_REQUEST, 'change_track' ) != '' )
 if( $ps_order_change->change_track( $order_id, trim( vmGet( $_REQUEST, 'order_track' ) ) ) ) {
 $vmLogger->err( "PHPSHOP_TRACK_ERROR" ) ;
 } else {
 $vmLogger->info( $VM_LANG->_( 'PHPSHOP_TRACK' ) . $VM_LANG->_( 'PHPSHOP_TRACK_UPD' ) ) ;
 }

Если вам не нужно выводить эти данные в личном кабинете пользователя, то на этом можно и остановиться. Если же вывод данных нужен, то продолжаем... ))

 

Шаг 6. Выведем переменную на странице информации о заказе в личном кабинете покупателя.

Правим файл /components/com_virtuemart/themes/default/templates/pages/account.order_details.tpl.php

После 77 строки добавляем код:

<?php if ($db->f("order_track") != "") { ?>
 <tr> 
     <td>:</td>
     <td><?php echo $db->f("order_track"); ?></td>
 </tr>
 <?php } ?>

На выходе получаем следующее:

Новое поле к заказу - рис.2

 

Чтобы вывести данные на главной странице кабинета пользователя, правим файл /administrator/components/com_virtuemart/classes/ps_order.php

661 строку

$listfields = 'o.order_id,o.cdate,order_total,o.order_status,order_currency';

дописываем, чтобы стало так: 

$listfields = 'o.order_id,o.cdate,order_total,order_track,o.order_status,order_currency';

 

В районе 721 строки находим код:

$listObj->addCell( $tmp_cell );

И ниже дописываем:

if ($db->f("order_track") != "") {
     $tmp_cell = "<strong>".$VM_LANG->_('PHPSHOP_TRACK').":</strong> ".$db->f("order_track");
     $listObj->addCell( $tmp_cell );
 }

На выходе получаем:

Новое поле к заказу - рис. 3

 

 

Вы можете отблагодарить автора:

WMR - R166832041362

WMZ - Z314865156270

QIWI - 9638061071

Яндекс деньги - 41001228750313


Комментарии 
 
#20 04.11.2013 10:33
И все таки, жаждим увидеть инструкцию для VM2.
Автор пожалуйста!!!
 
 
#19 11.03.2013 05:54
Тоже думаю, о VM2, и поддерживаю актуализацию статьи!
 
 
#18 10.03.2013 16:26
Автору спасибо огромное! Уже не первый год пользуюсь этой схемой.

Но сейчас сделал магазина на VM 2 и инструкция категорически не подходит.

Было бы здорово, если бы вы нашли время актуализировать ее для второй версии...

Спасибо!
 
 
#17 25.02.2013 07:07
Больше спасибо, всё работает!
Реализовал у себя!
 
 
#16 24.01.2013 18:25
Буду у себя делать такое, спасибо за инструкцию!
 
 
#15 13.11.2012 17:13
Подскажите, а как отредактировать внешний вид списка заказов? В ps_order.php только функции описаны, а где формируется таблица и стили прописывается?
 
 
#14 21.10.2012 16:42
Может вы подскажите...
Есть определенная группа товаров, в которой должен быть выбор цвета. Цвета выбираются через чекбоксы. Пока через jquery сумел вписать значения цветов в скрытый input. А как дальше передать цвета в корзину, в заказ и в письма на почту админу и юзеру не представляю...
 
 
#13 23.07.2012 18:21
Инструкция рабочая. Проверил только что, специально. Ошибка во втором шаге была, как замечено в комментариях (спасибо пользователю NiceSEO.ru). Исправил код.

Lina, скопируйте код 2 шага и замените им тот, что вставляли ранее. Все будет работать.
 
 
#12 23.07.2012 17:50
Блин , а очень надо((((((
 
 
#11 23.07.2012 17:30
Lina забейте! инструкция нерабатающая