Новости Joomla

Перевод и публикация интервью на греческом портале Joomla Утро, просматриваешь входящие письма и...

Перевод и публикация интервью на греческом портале Joomla 🇬🇷Утро, просматриваешь входящие письма и изучаешь новости и внезапно обнаруживаешь, что инициатива, которую ты начал, подхватывается другими людьми. 🎉Недавно я взял интервью у Билла (Василиса) Коциаса - руководителя студии, читающего лекции в университете и популяризатора Joomla в Греции.Это интервью из журнала NorrNext, в оригинале на английском, теперь доступно на греческом языке и опубликовано на портале joomla.gr. 🎉До чего же приятно… 😇😊 Работа замечена и с ней посчитали необходимым ознакомить аудиторию страны, в которой Билл читает лекции. И это солнечная Греция - страна, страна, с которой Россию многое связывает. 🇬🇷🇷🇺🕊Смотрю на греческий алфавит и тут же рисуются картины белоснежных зданий в окружении винограда и амфор, красивых женщин в сандалиях и мужественных воинов, охраняющих покой полисов, в которых ученые мужи работают над трудами, позже вошедшими в века. Красиво! 😇Но вернемся к интервью. Из него вы узнаете, что в Греции доля Joomla среди CMS занимает порядка 30-40%. По моему мнению это - самый высокий показатель во всем мире. Также чтение лекций о Joomla в университетах позволит привести новых пользователей и к тому же молодое поколение. Ну и огромное кол-во сертификтатов Билла на стене (смотрим фото в статье) свидетельствует о том, что Joomla может применяться как профессиональный инструмент. 🇬🇷 Интервью на греческом портале (joomla.gr)🌐 Оригинальное интервью (на английском)Что насчет перевода на русский? Увы, времени всего 24 часа в сутках. Я продолжаю готовить новые интервью. Возможно, после завершения выпуска журнала, рассмотрю перевод некоторых интервью на русский. Но я об этом не говорил. 😊 В блоге @eugenius_blog публикую анонсы интересных событий из мира Joomla, интервью, уроки и полезные советы, а также делюсь мыслями:, связанными с разработкой и веб-дизайном.

Обработка HTTP ответа в Joomla 6+. Изменения по сравнению с Joomla 3 - Joomla 5

👩‍💻 Обработка HTTP ответа в Joomla 6+. Изменения по сравнению с Joomla 3 - Joomla 5.В Joomla для выполнения внешних запросов из PHP к сторонним API используется класс Joomla\Http\Http напрямую или же Joomla\Http\HttpFactory, который возвращает для работы преднастроенный по умолчанию класс Http. О работе с HTTP-запросами подробно рассказывалось в статье 2021 года Создание внешних запросов с использованием HttpFactory (Joomla). Некоторые изменения касаются работы с ответами на запросы. Например, наш запрос:
use Joomla\Http\HttpFactory;$http = (new HttpFactory)->getHttp($options, ['curl', 'stream']);$response = $http->get('https://any-url.ru/api/any/endpoint');
Раньше можно было получить код ответа или тело ответа как свойство $response - $response->code или $response->body. Однако, Joomla, начиная с Joomla 4 во многом переходит на стандарты PSR. В частности для работы с HTTP-ответами - на PSR-7. Также хорошая статья на Хабре о PSR-7: PSR-7 в примерах.
Прямое обращение к свойствам code, headers, body объявлено устаревшим в Joomla 6.0.0 и обещают удалить в Joomla 7.0.0.
Вместо этого нужно работать с HTTP-ответом по стандартам PSR-7. Код ответа.Было $response->code. Стало $response->getStatusCode().Заголовки ответа.Было $response->headers. Стало $response->getHeaders().Тело ответа.Было $response->body. Стало (string)$response->getContents().В тело ответа теперь приходит не строка, а поток - объект класса Laminas\Diactoros\Stream. Поэтому его нужно привести к строке (если это json, к примеру): (string)$response->getContents(). Чаще всего в коде Joomla встречается именно такой вариант. Однако, есть и вариант с перемещением указателя чтения на начало потока:
// Получили ответ в виде потока$stream = $response->getBody();// "перемотали" на начало$stream->rewind();// Получили строковый ответ$json = $stream->getContents();
В итоге результат одинаковый.@joomlafeed#joomla #разработка #php

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

bgg87

  • Захожу иногда
  • 164
  • 2 / 0
  • Истина где-то рядом...
Всем привет!
Уже сутки пытаюсь вывести кнопку "Купить" (добавить в корзину) в "Сопутствующие товары" (похожие товары), но ничего не выходит, где только не искал и что только не делал.
VirtueMart 3.0.6.4

Методом тыка выяснил что шаблон находится тут:
/components/com_virtuemart/sublayouts/related.php
Код
<?php defined('_JEXEC') or die('Restricted access');
$related = $viewData['related'];
$customfield = $viewData['customfield'];
$thumb = $viewData['thumb'];
//juri::root() For whatever reason, we used this here, maybe it was for the mails
echo JHtml::link (JRoute::_ ('index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' . $related->virtuemart_product_id . '&virtuemart_category_id=' . $related->virtuemart_category_id), $thumb   . $related->product_name, array('title' => $related->product_name,'target'=>'_blank'));
if($customfield->wPrice){
$currency = calculationHelper::getInstance()->_currencyDisplay;
echo $currency->createPriceDiv ('salesPrice', 'COM_VIRTUEMART_PRODUCT_SALESPRICE', $related->prices);
}
if($customfield->wDescr){
echo '<p class="product_s_desc">'.$related->product_s_desc.'</p>';
}

очень прошу подскажите пожалуйста что делать.
Да и в PHP я ноль! :)
*

neogeek

  • Захожу иногда
  • 196
  • 21 / 2
Должно помочь -
Код
<?php echo shopFunctionsF::renderVmSubLayout('addtocart',array('product'=>$product,'row'=>0)); ?>
*

neogeek

  • Захожу иногда
  • 196
  • 21 / 2
Хотя немного не так, там другая переменная же вместо product должно быть related
вот так точно выведет кнопку купить:
Код
<?php echo shopFunctionsF::renderVmSubLayout('addtocart',array('product'=>$related,'row'=>0)); ?>
*

bgg87

  • Захожу иногда
  • 164
  • 2 / 0
  • Истина где-то рядом...
Огромное человеческое спасибо!
Ваша помощь неоценима - вопрос решен!  :D

P.S. оказывается в PHP я не полный ноль. При добавлении вашего кода показал белый экран, немного подумав и сравнив с PHP товаров увидел что нет закрывающего тега ?>
В итоге код выглядит так
Код
<?php defined('_JEXEC') or die('Restricted access');

$related = $viewData['related'];
$customfield = $viewData['customfield'];
$thumb = $viewData['thumb'];

//juri::root() For whatever reason, we used this here, maybe it was for the mails
echo JHtml::link (JRoute::_ ('index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' . $related->virtuemart_product_id . '&virtuemart_category_id=' . $related->virtuemart_category_id), $thumb   . $related->product_name, array('title' => $related->product_name,'target'=>'_blank'));
if($customfield->wPrice){
$currency = calculationHelper::getInstance()->_currencyDisplay;
echo $currency->createPriceDiv ('salesPrice', 'COM_VIRTUEMART_PRODUCT_SALESPRICE', $related->prices);
}
if($customfield->wDescr){
echo '<p class="product_s_desc">'.$related->product_s_desc.'</p>';

}
?>
<?php echo shopFunctionsF::renderVmSubLayout('addtocart',array('product'=>$related,'row'=>0)); ?>
*

stydent

  • Захожу иногда
  • 150
  • 1 / 0
  • vlad-link.ru
Должно помочь -
Код
<?php echo shopFunctionsF::renderVmSubLayout('addtocart',array('product'=>$product,'row'=>0)); ?>
А почему сейчас в версии 3.0.13.4 сопутствующие товары выводит customfields.php, при этом шаблон related.php существует.
В шаблоне товара идет такой код
Цитировать
echo shopFunctionsF::renderVmSubLayout('customfields',array('product'=>$this->product,'position'=>'related_products','class'=> 'product-related-products','customTitle' => true ));
Как же тогда заюзать related.php? В вызове функции шаблон менять пробовал, просто переставало выводить.
*

stydent

  • Захожу иногда
  • 150
  • 1 / 0
  • vlad-link.ru
Извиняюсь. все выводит, не доглядел.
Может знаете как вывести еще настраиваемые поля у сопутствующих, т.к. они на цену влияют.
« Последнее редактирование: 29.02.2016, 23:33:33 от stydent »
*

gartes

  • Завсегдатай
  • 1859
  • 142 / 6
  • Е = mс²
Цитировать
Может знаете как вывести еще настраиваемые поля у сопутствующих, т.к. они на цену влияют.

Ну так так и выводите...
Код: php
<?= shopFunctionsF::renderVmSubLayout('customfields',array('product'=>$this->product,'position'=>'related_products','class'=> 'product-related-products','customTitle' => true )); ?>
Тут есть несколько моментов :
1.  'customfields'= это название шаблона для вывода настраиваемых полей. этот шаблон находится в /components/com_virtuemart/sublayouts/customfields.php

2. 'product'=>$this->product, тет передается объект продукта.. в разных местах VirtueMart он может быть в разных переменных.
к примеру в related он так записан $related.
Соответственно что бы из related вызвать customfields то строка
'product'=>$this->product, -
должна быть записана как
'product'=> $related,

3. 'position'=>'related_products',
Это позиция в которой выводится кастомарное поле. Эту позицию мы указываем при создании самого поля.
Но по скольку Вы говорите что настраиваемые поля влияют на стоимость товара то скорее всего это позиция addtocart
И для того что бы выбор этого поля влиял на цену товара то вы должны выводить его в форме в которой находится кнопка КУПИТЬ.

В итоге получаем
Код: php
<?= shopFunctionsF::renderVmSubLayout('customfields',array('product'=>$related,'position'=>'addtocart')); ?>

но еще раз напомню. Позиция 'addtocart' для того что бы менялась цена в зависимости от выбора этого поля должна быть внутри блока
Код
<form method="post" class="product js-recalculate" action="#">
...
  <div class="addtocart-bar">
       <input type="submit" name="addtocart" class="addtocart-button" value="Купить" title="Купить">
  </div>
...
<?= shopFunctionsF::renderVmSubLayout('customfields',array('product'=>$related,'position'=>'addtocart')); ?>
</form>


ps Если кого то смущает такой значок то это сокращенное написание функции echo. Срабатывает в начале кода.
т.е. <?= 'текст' ?> и <?php echo 'текст' ?> равнозначны. Очень удобно когда нужно вывести значение только одной переменной.)
 
*

stydent

  • Захожу иногда
  • 150
  • 1 / 0
  • vlad-link.ru
Ну так так и выводите...
Код: php
<?= shopFunctionsF::renderVmSubLayout('customfields',array('product'=>$this->product,'position'=>'related_products','class'=> 'product-related-products','customTitle' => true )); ?>

так то я пробовал.
в
Код
<?php echo shopFunctionsF::renderVmSubLayout('addtocart',array('product'=>$related,'row'=>0)); ?>
уже есть вывод полей. но почему то $related их не имеет. Хотя если перейти прям в товар, они будут выводиться
*

gartes

  • Завсегдатай
  • 1859
  • 142 / 6
  • Е = mс²
Цитировать
но почему то $related их не имеет
по тому наверное что в $related не подключена модель кастомарных полей..

Как подключить модель кастомарных полей можно посмотреть в модели продуктов, в папке admin/components/com_virtuemart/models/product.php

Щас метод не скажу..)))

Но тут вот что может получится ... Что если  у вас полей будет много для каждого запроса... то когда страница категорий сработает или рекомендуемых продуктов.. И там товаров будет много... то может сервак начать краснеть понемногу... )))

Так что лучше все таки  это отделенный файл шаблона за бацать. и там запросом по id товара и названию кастомарного поля как то искать...
 
*

stydent

  • Захожу иногда
  • 150
  • 1 / 0
  • vlad-link.ru

Но тут вот что может получится ... Что если  у вас полей будет много для каждого запроса... то когда страница категорий сработает или рекомендуемых продуктов.. И там товаров будет много... то может сервак начать краснеть понемногу... )))
 

задумано что будет только в карточке товара так.
т.е реализовать хочу вот это https://yadi.sk/i/ehh6d8OmpjdqP
Как это в один товар запихать не знаю. поэтому предложу клиенту на сопутствующих товарах делать, т.е. кнопка купить будет у каждого размера. Один размер - один товар.
*

gartes

  • Завсегдатай
  • 1859
  • 142 / 6
  • Е = mс²
*

stydent

  • Захожу иногда
  • 150
  • 1 / 0
  • vlad-link.ru
Если так то нечего голову морочить плагин есть такой
Пакетной продажи.
Вот так выглядит...


а тут в работе

спасибо
*

gartes

  • Завсегдатай
  • 1859
  • 142 / 6
  • Е = mс²
*

stydent

  • Захожу иногда
  • 150
  • 1 / 0
  • vlad-link.ru
так может и плагин дать )))) тоже не вопрос..
уже нашел catproduct
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как вывести слово От рядом с ценой?

Автор art22

Ответов: 4
Просмотров: 1712
Последний ответ 07.04.2024, 11:19:12
от art22
Как сделать товары в 2 колонки в моб версии?

Автор art22

Ответов: 4
Просмотров: 2705
Последний ответ 06.12.2022, 11:42:56
от art22
[Решено] Если товар уже есть вкорзине изменить кнопку "Добавить в корзину"

Автор x-render

Ответов: 26
Просмотров: 12436
Последний ответ 26.11.2022, 22:38:11
от SolopoV
Как пересохранить все товары?

Автор stydent

Ответов: 1
Просмотров: 3202
Последний ответ 30.03.2022, 10:38:06
от itpremium
mod_virtuemart_product - как скрыть товары, которых нет в наличии?

Автор alexfom_16

Ответов: 40
Просмотров: 6513
Последний ответ 11.10.2021, 17:50:38
от hmr