Новости Joomla

Модификация WT JShopping products anywhere - Uikit макетИтак, дано: музыкальный журнал, в котором...

Модификация WT JShopping products anywhere - Uikit макетИтак, дано: музыкальный журнал, в котором...

Модификация WT JShopping products anywhere - Uikit макетИтак, дано: музыкальный журнал, в котором представлены новости, интервью, рецензии и есть небольшой магазин на JoomShopping. Возникла необходимость внутри Joomla статей вставлять упоминание релиза и кнопочку «добавить в корзину». Я взял плагин WT JShopping products anywhere Сергея Толкачева (@webtolkru). Плагин отображает название товара и ссылку. При помощи напильника, ИИ и навыков вёрстки появился Uikit макет для шаблонов на базе Yootheme Pro.Учитываается мобильная версия - телефоны и ipad.Кнопка добавления в корзину работает по Ajax и появляется всплывающее окно (Notification Bar от Uikit) с информацией.Пока это базовый вариант, требующий доведения до лоска, однако он уже работает и его можно применять на проектах.Взять макет можно здесь.А плагин вставки товаров в материалы можно забрать здесь.Приветствуется доведение до ума и оформление в виде PR.

WT Content Image Gallery v.1.2.3 - плагин галереи изображений для Joomla

WT Content Image Gallery v.1.2.3 - плагин галереи изображений для Joomla

👩‍💻 WT Content Image Gallery v.1.2.3 - плагин галереи изображений для Joomla.Пакет плагинов галереи изображений и видео для вставки в материалы и модули Joomla, а так же везде, где работают плагины группы content. Поддержка собственных макетов вывода для галерей. Смешанные фото+видео галереи. Плагин создан как замена Simple Image Gallery и поддерживает синтаксис {gallery}{/gallery}.👩‍💻 v.1.2.3. Что нового?- Обработка вступительного и полного текста для материалов Joomla. Добавлена обработка шорткодов в полном и вступительном текстах материалов Joomla.- Системные требования. Повышены минимальные требования до Joomla 5 и PHP 8.1.- Мелкие правки. Исправлена ошибка работы макета по умолчанию в плагине контента.- Joomla 6. Пакет плагинов успешно протестирован на Joomla 6.Страница расширения.GitHub расширенияJoomla Extensions Directory@joomlafeed#joomla #расширения

Совет по Joomla: несколько значений по умолчанию в XML-формах для стандартных полей типа list

👩‍💻 Совет по Joomla: несколько значений по умолчанию в XML-формах для стандартных полей типа list.При работе над плагином возникла необходимость указать стандартный набор из нескольких элементов стандартного поля списка. И хотелось указать их в стандартном же атрибуте default для полей. Когда это нужно?Когда Ваши пользователи устанавливают плагин и НЕ заходят в настройки - в коде вы можете использовать значения по умолчанию с помощью класса Registry (писал об этом ранее) и всегда быть уверенным, что хоть какие-то жизненно необходимые параметры к вам придут всегда. 🧐 Но как сделать то же самое для интерфейса админки?Пользователя нужно направлять, предлагать очевидный работоспособный сценарий для начала, а дальше он уже сам разберется. Когда человек заходит в параметры свежеустановленного плагина в Form ещё нет данных и параметры по умолчанию выставляются из атрибутов default в xml-полях.
<field name="showdesc" type="radio"                       label="PLG_CFI_PARAM_SHOWDESC"                       class="btn-group btn-group-yesno"                       default="1">                    <option value="0">JNO</option>                    <option value="1">JYES</option>                </field>
Здесь по умолчанию будет включено "Да". И если пользователь не переключит параметр, то при сохранении мы ожидаемо получим "да" в params плагина.Для поля списков type=&quot;list&quot; можно указать значение по умолчанию и многие знают, что его можно указать только одно.
<field type="list"                       name="article_fields"                       label="article_fields"                       description="article_fields_desc"                       layout="joomla.form.field.list-fancy-select"                       multiple="true"                       default="id"                >                    <option value="id">id</option>                    <option value="title">title</option>                    <option value="alias">alias</option>                    <option value="introtext">introtext</option>                    <option value="fulltext">fulltext</option>                    <option value="state">state</option></field>
Но у нас поле с множественным выбором (атрибут multiple) и хотелось бы указать несколько значений по умолчанию...Оказывается, так можно сделать. Для этого в атрибуте default нужно указать json с нужными параметрами в виде {int}key : {string} value.Например, default='{"0":"id","1":"title"}'.
<field type="list"                       name="article_fields"                       label="article_fields"                       description="article_fields_desc"                       layout="joomla.form.field.list-fancy-select"                       multiple="true"                       default='{"0":"id","1":"title"}'                >                    <option value="id">id</option>                    <option value="title">title</option>                    <option value="alias">alias</option>                    <option value="introtext">introtext</option>                    <option value="fulltext">fulltext</option>                    <option value="state">state</option></field>
⚠️ Обратите внимание на кавычки! Поскольку json_decode не понимает одинарные кавычки собственно json нужно писать с двойными, а значение для атрибута default писать в одинарные.🙏 За подсказанное решение огромное спасибо участникам нашего сообщества - разработчикам Дмитрию Васюкову (@fictionlabs) и Игорю Бердичевскому (@septdir).@joomlafeed#joomla #разработка #webdev #development

0 Пользователей и 1 Гость просматривают эту тему.
  • 15 Ответов
  • 4177 Просмотров
*

sashgera

  • Захожу иногда
  • 113
  • 0 / 0
Здравствуйте

Оформление заказа происходит на одной странице
При выборе варианта доставки "Самовывоз" - скрывается поле "Адрес получателя"
скрытие сделал JS примерно так:
Код: javascript
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
Код: php
<td><b><?php echo $VM_LANG->_($field->title)? $VM_LANG->_($field->title) : $field->title ?>:</b>

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

fsv

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

Первое, что в голову пришло. Еще можно посмотреть формирование $registrationfields до передачи в шаблон письма.
Веб-разработка: заказ. Только новая разработка.
*

sashgera

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

fsv

  • Moderator
  • 2781
  • 411 / 2
Я так понял, что поле скрывается, и его не надо в письмо только при самовывозе. Поэтому и предложил проверять в шаблоне письма на этот вид доставки, если он, поле не выводится. Там поля в цикле выводятся, в данном случае его вывод будет пропущен, хотя оно в переменной будет всегда. Почему при любом раскладе? Пробовали?
Веб-разработка: заказ. Только новая разработка.
*

sashgera

  • Захожу иногда
  • 113
  • 0 / 0
fsv, как получить переменную из $order_shipping проверить на "самовывоз" я не знаю. Сможете помочь?
Пробовал так, по значению value "Самовывоза":
Код: javascript
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
  • 2781
  • 411 / 2
но поле "Адрес получателя" в письмах скрыто, при любом варианте доставки
потому что сейчас: "если 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

  • Захожу иногда
  • 113
  • 0 / 0
fsv, спасибо, все получилось.
к Самовывозу добавил еще одно поле
повторил все тоже самое для Доставки по Москве, здесь только одно поле в письме выводить не нужно
Код: php
$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
  • 2781
  • 411 / 2
Вот это
$ship_info_arr = explode("|", $db->f("ship_method_id") );
$ship_info_arr2 = explode("|", $db->f("ship_method_id") );
масло масляное, не надо. На просмотр оба массива, и вы увидите, что они одинаковые. В каждом заказе $db одна.
Один раз получаете массив, в обоих проверках его используете.

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

Забыл, шаблон письма в utf-8 без бум, иначе проверка на совпадение с кириллической строкой не пройдет. Но раз получилось, и сами знаете.
Веб-разработка: заказ. Только новая разработка.
*

sashgera

  • Захожу иногда
  • 113
  • 0 / 0
fsv, внес изменения:
Код: php
$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;
}
ну, если вдруг приспичит изменить название доставки, то наверное, можно потом поправить в коде?
Например
Код: php
if( $ship_info_arr[1] == "Доставка по Москве" ){
на
Код: php
if( $ship_info_arr[1] == "Доставка по МО" ){
*

fsv

  • Moderator
  • 2781
  • 411 / 2
ну, если вдруг приспичит изменить название доставки, то наверное, можно потом поправить в коде?
да
Веб-разработка: заказ. Только новая разработка.
*

sashgera

  • Захожу иногда
  • 113
  • 0 / 0
fsv, спасибо, вы мне здорово помогли!
*

sashgera

  • Захожу иногда
  • 113
  • 0 / 0
fsv, у меня еще вопрос, если сможете, пожалуйста, помогите
В письмах, название товара сделал ссылкой:
Код: php
<?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
<?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, 20:58:03 от sashgera »
*

fsv

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

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

Спойлер
[свернуть]

Веб-разработка: заказ. Только новая разработка.
*

sashgera

  • Захожу иногда
  • 113
  • 0 / 0
сделал так, теперь есть и ссылка товара и скрываются поля
Код: php
<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
  • 2781
  • 411 / 2
это, вроде, как ни к чему тут:
Код
$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

  • Захожу иногда
  • 113
  • 0 / 0
fsv, все понял, еще раз спасибо!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Уведомление о заказе в зависимости от варианта доставки

Автор baltazors

Ответов: 0
Просмотров: 3247
Последний ответ 07.06.2017, 11:44:10
от baltazors
Сделать название товара ссылкой в письмах о заказе

Автор sashgera

Ответов: 0
Просмотров: 1255
Последний ответ 19.10.2015, 14:15:17
от sashgera
Дополнительное поле с информацией о доставке

Автор sashgera

Ответов: 19
Просмотров: 1522
Последний ответ 10.02.2015, 20:48:38
от sashgera
[Решено]Краткая информация о товаре в письме о заказе пользователю

Автор mcross

Ответов: 1
Просмотров: 1351
Последний ответ 04.10.2012, 14:47:00
от mcross
Глюк на странице информации о заказе

Автор nextvid

Ответов: 1
Просмотров: 1491
Последний ответ 15.08.2011, 10:56:00
от d0ublezer0