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

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

Не показывать в письмах о заказе поле адреса по условию

 (Прочитано 491 раз)
0 Пользователей и 1 Гость смотрят эту тему.
sashgera
Осваиваюсь на форуме
***

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

Сообщений: 105


« : 06.10.2015, 16:30:11 »

Здравствуйте

Оформление заказа происходит на одной странице
При выборе варианта доставки "Самовывоз" - скрывается поле "Адрес получателя"
скрытие сделал JS примерно так:
Код
if ($("input:checked").val() == "standard_shipping%7C%D0%A1%D0%B0%D0%BC%D0%BE%D0%B2%D1%8B%D0%B2%D0%BE%D0%B7%7C%D1%81%D0%BE+%D1%81%D0%BA%D0%BB%D0%B0%D0%B4%D0%B0%7C0.00%7C3") {
$("#vm_myadres_div, #vm_myadres_input").hide();
}
else
$("#vm_myadres_div, #vm_myadres_input").show();
 
 

Как сделать так, чтобы скрытое при оформлении заказа поле "Адрес получателя" не приходило в письмах админу и покупателю?

Названия полей адреса, которые приходят в письмах, формируются здесь:
components/com_virtuemart/themes/default/templates/order_emails/confirmation_email.tpl.php
Код
<td><b><?php echo $VM_LANG->_($field->title)? $VM_LANG->_($field->title) : $field->title ?>:</b>
 

Пожалуйста, помогите в этом вопросе или подскажите где копать.
Записан
fsv
Moderator
*****

Репутация: +330/-2
Offline Offline

Пол: Мужской
Сообщений: 2244


« Ответ #1 : 06.10.2015, 17:11:02 »

в confirmation_email.tpl.php  посмотрите, что из себя представляет переменная $order_shipping , давно было, могу ошибаться, вроде как она составная. Получите из нее переменную, которую можно проверить на "самовывоз" (возможно, по id способа платежа, т.к. название в админке изменить легче, чем id в базе).
Далее смотрите адресные блоки кода. После
Код:
if( $field->name == 'email') $field->name = 'user_email';
можно добавить
Код:
if( "самовывоз" ){
    if( $field->name == 'поле_которое_надо_не_отсылать') continue;
}

Первое, что в голову пришло. Еще можно посмотреть формирование $registrationfields до передачи в шаблон письма.
Записан
sashgera
Осваиваюсь на форуме
***

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

Сообщений: 105


« Ответ #2 : 06.10.2015, 17:56:15 »

fsv, но в этом случае поля "Адрес получателя" просто не будет в письмах при любых раскладах.
А нужно,  если поле "Адрес получателя" скрыто при оформлении заказа  - то и в письмах его нет.
А если не скрыто, то соответственно покупатель это поле заполняет и оно будет присутствовать в письмах
« Последнее редактирование: 06.10.2015, 18:33:07 от sashgera » Записан
fsv
Moderator
*****

Репутация: +330/-2
Offline Offline

Пол: Мужской
Сообщений: 2244


« Ответ #3 : 06.10.2015, 18:33:52 »

Я так понял, что поле скрывается, и его не надо в письмо только при самовывозе. Поэтому и предложил проверять в шаблоне письма на этот вид доставки, если он, поле не выводится. Там поля в цикле выводятся, в данном случае его вывод будет пропущен, хотя оно в переменной будет всегда. Почему при любом раскладе? Пробовали?
Записан
sashgera
Осваиваюсь на форуме
***

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

Сообщений: 105


« Ответ #4 : 06.10.2015, 22:12:33 »

fsv, как получить переменную из $order_shipping проверить на "самовывоз" я не знаю. Сможете помочь?
Пробовал так, по значению value "Самовывоза":
Код
if( "standard_shipping%7C%D0%A1%D0%B0%D0%BC%D0%BE%D0%B2%D1%8B%D0%B2%D0%BE%D0%B7%7C%D1%81%D0%BE+%D1%81%D0%BA%D0%BB%D0%B0%D0%B4%D0%B0%7C0.00%7C3" ){
   if( $field->name == 'vm_myadres') continue;
}
 
но поле "Адрес получателя" в письмах скрыто, при любом варианте доставки
Записан
fsv
Moderator
*****

Репутация: +330/-2
Offline Offline

Пол: Мужской
Сообщений: 2244


« Ответ #5 : 06.10.2015, 23:20:12 »

но поле "Адрес получателя" в письмах скрыто, при любом варианте доставки
потому что сейчас: "если true, пропускаем" (всегда)

Над первым foreach адресных полей:
Код:
$ship_info_arr = explode("|", $db->f("ship_method_id") );

Просмотрите полученный массив (потом это удалите!):
Код:
echo '<pre>'.print_r($ship_info_arr, true).'</pre>';
Найдите для самовывоза уникальный элемент массива. Пусть это будет второй элемент "Самовывоз", класс доставки может повторяться (не уникальный).
Только если вы в админке измените название доставки, все накроется. Для надежности можете запрос в базу на получение id этой доставки написать.

Тогда там, где выше написал:
Код:
if( $ship_info_arr[1] == "Самовывоз" ){
    if( $field->name == 'vm_myadres') continue;
}
Записан
sashgera
Осваиваюсь на форуме
***

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

Сообщений: 105


« Ответ #6 : 07.10.2015, 01:13:48 »

fsv, спасибо, все получилось.
к Самовывозу добавил еще одно поле
повторил все тоже самое для Доставки по Москве, здесь только одно поле в письме выводить не нужно
Код
$ship_info_arr = explode("|", $db->f("ship_method_id") );
$ship_info_arr2 = explode("|", $db->f("ship_method_id") );
 
foreach( $shippingfields as $field ) {
  if( $field->name == 'email') $field->name = 'user_email';
 
  if( $ship_info_arr[1] == "Самовывоз" ){
     if( $field->name == 'vm_myadres') continue;
     if( $field->name == 'vm_pasport') continue;
  }
  if( $ship_info_arr2[1] == "Доставка по Москве" ){
     if( $field->name == 'vm_pasport') continue;
  }
 

Только если вы в админке измените название доставки, все накроется. Для надежности можете запрос в базу на получение id этой доставки написать.
Вывод полей в письмах пропускаться не будет? Или сайт накроется?
Мне очень неудобно спрашивать – а как сделать запрос в БД на получение id доставки?

Записан
fsv
Moderator
*****

Репутация: +330/-2
Offline Offline

Пол: Мужской
Сообщений: 2244


« Ответ #7 : 07.10.2015, 03:15:43 »

Вот это
$ship_info_arr = explode("|", $db->f("ship_method_id") );
$ship_info_arr2 = explode("|", $db->f("ship_method_id") );
масло масляное, не надо. На просмотр оба массива, и вы увидите, что они одинаковые. В каждом заказе $db одна.
Один раз получаете массив, в обоих проверках его используете.

Сайт не накроется, поля выводится начнут. Запрос - смотреть надо.

Забыл, шаблон письма в utf-8 без бум, иначе проверка на совпадение с кириллической строкой не пройдет. Но раз получилось, и сами знаете.
Записан
sashgera
Осваиваюсь на форуме
***

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

Сообщений: 105


« Ответ #8 : 07.10.2015, 03:57:32 »

fsv, внес изменения:
Код
$ship_info_arr = explode("|", $db->f("ship_method_id") );
 
if( $ship_info_arr[1] == "Самовывоз" ){
 if( $field->name == 'vm_myadres') continue;
 if( $field->name == 'vm_pasport') continue;
}
if( $ship_info_arr[1] == "Доставка по Москве" ){
 if( $field->name == 'vm_pasport') continue;
}
 
ну, если вдруг приспичит изменить название доставки, то наверное, можно потом поправить в коде?
Например
Код
if( $ship_info_arr[1] == "Доставка по Москве" ){
 
на
Код
if( $ship_info_arr[1] == "Доставка по МО" ){
 
Записан
fsv
Moderator
*****

Репутация: +330/-2
Offline Offline

Пол: Мужской
Сообщений: 2244


« Ответ #9 : 07.10.2015, 13:39:51 »

ну, если вдруг приспичит изменить название доставки, то наверное, можно потом поправить в коде?
да
Записан
sashgera
Осваиваюсь на форуме
***

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

Сообщений: 105


« Ответ #10 : 07.10.2015, 13:47:28 »

fsv, спасибо, вы мне здорово помогли!
Записан
sashgera
Осваиваюсь на форуме
***

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

Сообщений: 105


« Ответ #11 : 25.10.2015, 17:29:33 »

fsv, у меня еще вопрос, если сможете, пожалуйста, помогите
В письмах, название товара сделал ссылкой:
Код
<?php
$q  = "SELECT product_id FROM #__{vm}_product WHERE product_name='".$dboi->f("product_name")."'";
$db->query($q);
$db->next_record();
$product_id = $db->f("product_id");
?>
<tr class="Stil1">
<td><?php echo $my_qty ?></td>
<td><a href="http://www.МойСайт/component/virtuemart/?page=shop.product_details&product_id=<?php echo $product_id ?>"><?php $dboi->p("product_name")?> <?php echo ($dboi->f("product_attribute")? ' ('.$dboi->f("product_attribute").')' : ''); ?></a></td>
 

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



если запрос делаю так (изменяю 3-ю строку), то поля скрываются и у покупателя, и у админа, но ссылка получается одинаковой для всех товаров (если в корзине было более одного товара):
Код
<?php
$q  = "SELECT product_id FROM #__{vm}_product WHERE product_name='".$dboi->f("product_name")."'";
$db->query(); //изменяю 3-ю строку
$db->next_record();
$product_id = $db->f("product_id");
?>
 
« Последнее редактирование: 25.10.2015, 21:58:03 от sashgera » Записан
fsv
Moderator
*****

Репутация: +330/-2
Offline Offline

Пол: Мужской
Сообщений: 2244


« Ответ #12 : 26.10.2015, 22:04:20 »

Вы пытаетесь получить id товара. Он известен, внутри цикла  while($dboi->next_record()) {...}
Код:
$prid=$dboi->f("product_id");

Вот откопал вариант письма, более чем 2,5-годичной давности. Там есть ссылка на товар.
Не для копипаста! Там перепиленный вариант под конкретную ситуацию. Но ссылку на товар рассмотреть при желании можно.

Показать текстовый блок

Записан
sashgera
Осваиваюсь на форуме
***

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

Сообщений: 105


« Ответ #13 : 27.10.2015, 01:52:29 »

сделал так, теперь есть и ссылка товара и скрываются поля
Код
<td>
<?php
$prid=$dboi->f("product_id");
$mydb = &JFactory::getDBO();        
$mydb->setQuery("SELECT product_name FROM #__vm_product WHERE product_id=(SELECT product_parent_id FROM #__vm_product WHERE product_id=$prid)");
?>        
<a href="<?php echo JURI::root(); ?>/index.php?page=shop.product_details&flypage=flypage.tpl&product_id=<?php echo $prid ?>"><?php $dboi->p("product_name")?> <?php echo ($dboi->f("product_attribute")? ' ('.$dboi->f("product_attribute").')' : ''); ?></a></td>
 

fsv, большое спасибо! Вы меня снова выручили
Записан
fsv
Moderator
*****

Репутация: +330/-2
Offline Offline

Пол: Мужской
Сообщений: 2244


« Ответ #14 : 27.10.2015, 02:08:12 »

это, вроде, как ни к чему тут:
Код:
$mydb = &JFactory::getDBO();         
$mydb->setQuery("SELECT product_name FROM #__vm_product WHERE product_id=(SELECT product_parent_id FROM #__vm_product WHERE product_id=$prid)");
Записан
sashgera
Осваиваюсь на форуме
***

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

Сообщений: 105


« Ответ #15 : 27.10.2015, 02:42:50 »

fsv, все понял, еще раз спасибо!
Записан
Страниц: [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