Новости Joomla

SW JProjects v.2.6.1 - компонент каталога расширений для веб-приложений

👩‍💻 SW JProjects v.2.6.1 - компонент каталога расширений для веб-приложений.

Компонент позволяет сделать свой мини-Joomla Extensions Directory - каталог расширений для CMS (не только для Joomla) или файлов. Есть возможность скачивания по лицензионным ключам создания кастомных схем данных для сервера обновлений.

v.2.6.1. Что нового?

  • Правки наследования схем серверов обновлений. Улучшена логика наследования схем серверов обновлений для проектов компонент - категория - проект.
  • Не стабильные релизы в сервере обновлений. Теперь в данные сервера обновлений попадают все версии (alpha, beta и т.д.), а не только stable.
  • Косметические изменения. В шаблоне по умолчанию сделаны замены некоторых CSS-классов, уточнено присвоение атрибутов loading=lazy и fetchpriority.
  • Рефакторинг и правки кода. Текущее обновление кодовой базы.
  • Исправление ошибок.

Больше спасибо за помощь в тестировании участникам нашего сообщества Александру Новикову (@pro_portal) и Александру Судьбинову (@alexrevo).

Событие Pizza, Bugs & Fun - 29-30 января 2026 года.

Событие Pizza, Bugs & Fun  - 29-30  января 2026 года.

Уже несколько лет в мире Joomla проводятся мероприятия "Pizza, Bugs & Fun" (#PBF), где каждый может посвятить несколько часов своего мозгового времени тому, чтобы наша любимая CMS стала ближе к идеалу.

Ссылки на видео и статьи из этого поста рассказывает об организационных вопросах, которые пригодятся для участия в PBF, а так же что и как делать.

В рамках события PBF все желающие могут собираться в общий онлайн чат, обсудить вопросы Joomla и приложить к их разрешению свою руку. Самый классный вариант, когда эта встреча происходит оффлайн: тогда организовывается пицца, напитки по вкусу и несколько часов совместного творчества.

Каждый помогает тем, что он умеет:

  • кто-то пишет недостающую документацию,
  • кто-то пишет код,
  • кто-то тестирует как исправлены ошибки или сделан новый функционал.

На сайте события есть карта, можно "захостить" свою локацию. Практически все движки в мире развиваются за счёт спонсирующих их компаний. Joomla одна из немногих, где развитие идёт только усилиями международного сообщества энтузиастов.

https://www.youtube.com/watch?v=a-FuVKXg_Uw 

На момент написания данного поста в репозитории Joomla 810 открытых Issue (как правило это баги) и 236 Pull request (PR, исправление багов и новый функционал). Все PR обязательно тестируются минимум двумя участниками сообщества, дабы в конечный код движка не проскочила ошибка.

Если каждый из участников только нашего сообщества сделает даже одно тестирование, то, боюсь, PR и Issue на всех не хватит 😀 И ничего не останется нашим коллегам из международных Joomla-чатов.

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

SeBun

  • BanMaster
  • 4030
  • 259 / 5
  • @SeBun48
Re: JoomShopping + SMS
« Ответ #210 : 14.10.2016, 17:03:01 »
Если в 3 строке ошибка тогда как правильно вызвать $this->order->payment_id ?

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

Код: php
$text .= JText::_(_JSHOP_ORDER_NUMBER).": ".$this->order->order_number."\n";
$text .= JText::_(_JSHOP_TOTAL).": ".number_format($this->order->order_total, 0, '.', ' ')." ".$this->order->currency_code."\n";
var_dump($this->order->payment_id); die("Пипец где то тут");
$text .= JText::_($this->order->payment_id)."\n";
$text .= "Заказ принят";

Ну и какой текст ошибки то?
Оказываю услуги по Joomla | Миграция/Обновление | Сопровождение | IT-аутсорсинг | Недорогие домены и хостинг
*

kit2m2

  • Живу я здесь
  • 3372
  • 276 / 0
  • Беру сайты на полное сопровождение
Re: JoomShopping + SMS
« Ответ #211 : 14.10.2016, 17:05:13 »
Если в 3 строке ошибка тогда как правильно вызвать $this->order->payment_id ?
Читаю, уже которое сообщение муссируется одно и этоже... По моему так:
Код
$text .= JText::_(_JSHOP_ORDER_NUMBER).": ".$this->order->order_number."\n";
$text .= JText::_(_JSHOP_TOTAL).": ".number_format($this->order->order_total, 0, '.', ' ')." ".$this->order->currency_code."\n";
$text .= $this->order->payment_id)."\n";
$text .= "Заказ принят";

$text .= JText::_( Здесь должна быть языковая константа, а не переменная );
Расширения для JoomShopping | Ссылка на Телеграм-канал | Сайты и магазины под ключ: Дизайн, Верстка, Программирование (расширения на заказ), СЕО-оптимизация, Сопровождение, Перенос на Joomla 4+ (5+) и JoomShopping 5+
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: JoomShopping + SMS
« Ответ #212 : 14.10.2016, 17:06:53 »
что такое
как правильно вызвать $this->order->payment_id
? $this->order->payment_id - это id способа заказа. целое число. а не дух :) куда и зачем вы его хотите вызвать?

напишите что вы в итоге хотите получить, пример текста
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

SeBun

  • BanMaster
  • 4030
  • 259 / 5
  • @SeBun48
Re: JoomShopping + SMS
« Ответ #213 : 14.10.2016, 17:14:13 »
$text .= JText::_( Здесь должна быть языковая константа, а не переменная );
Не обязательно. Вот ссылка на док.
Лично мне интересно, что у ТС в $this->order->payment_id содержится. Константа ведь тоже содержит данные, как и переменная, но эти данные взяты из языкового файла.
Оказываю услуги по Joomla | Миграция/Обновление | Сопровождение | IT-аутсорсинг | Недорогие домены и хостинг
*

SeBun

  • BanMaster
  • 4030
  • 259 / 5
  • @SeBun48
Re: JoomShopping + SMS
« Ответ #214 : 14.10.2016, 17:15:50 »
что такое? $this->order->payment_id - это id способа заказа. целое число. а не дух
strval?
Если так, то целое должно пристыковываться к строке и автоматом преобразовываться в строку. Или я старею?
Оказываю услуги по Joomla | Миграция/Обновление | Сопровождение | IT-аутсорсинг | Недорогие домены и хостинг
*

Qverty2012

  • Захожу иногда
  • 107
  • 0 / 0
Re: JoomShopping + SMS
« Ответ #215 : 14.10.2016, 18:53:17 »

Кстати как  правильно вывести через echo все значения кот. нужно передать в SMS? Т.к. после выполнения этот файла сразу переходит на страницу - Заказ выполнен.

И о главном продолжаю дальше во всем разбираться  - обьясните пож. - как происходит переход с одной формы оформления заказа на другую  (с файлами разобрался - address.php, payments.php т.д.) не могу понять как со страницы оформления данных заказчика переходим на выбор оплаты- далее доставки - и тд.

Вот ввесь код файла ordermail.php
Задача получить значение - Вид оплаты, если выбран предоплата - сделать отправку дополнительного SMS с картой для оплаты. Вот на получении значения вида оплаты  получился ступор. То что в получении значения payment  - ошибка  это я понимаю, да и payment id нужен на самом деле а payment_description - короче вот здесь непонятно.
Код
/**
* @version      4.11.2 18.12.2014
* @author       MAXXmarketing GmbH
* @package      Jshopping
* @copyright    Copyright (C) 2010 webdesigner-profi.de. All rights reserved.
* @license      GNU/GPL
*/

defined('_JEXEC') or die();

class jshopOrderMail extends jshopBase{

private $order_id;
private $manuallysend;
private $order;
private $show_percent_tax;
private $hide_subtotal;
private $order_email_descr;
private $order_email_descr_end;
private $text_total;
private $file_generete_pdf_order;
private $config_fields;
private $count_filed_delivery;
private $listVendors;
private $vendors_send_message;
private $vendor_send_order_admin;
private $vendor_send_order;
private $admin_send_order;
private $payment;


public function setData($order_id, $manuallysend = 0){
$this->order_id = $order_id;
$this->manuallysend = $manuallysend;
$this->loadOrderData();
}

public function getOrderId(){
return $this->order_id;
}

public function getManuallysend(){
return $this->manuallysend;
}

public function getPayment(){
return $this->payment;
}


public function getMessage($type, $products = null, $show_customer_info = 1, $show_weight_order = 1, $show_total_info = 1, $show_payment_shipping_info = 1){
$jshopConfig = JSFactory::getConfig();
$dispatcher = JDispatcher::getInstance();
$liveurlhost = JURI::getInstance()->toString(array("scheme",'host', 'port'));

if ($type=='client'){
$client = 1;
}else{
$client = 0;
}
if (is_null($products)){
$products = $this->order->products;
}

$view = $this->getView('checkout');
$view->setLayout("orderemail");
$view->assign('client', $client);
$view->assign('show_customer_info', $show_customer_info);
$view->assign('show_weight_order', $show_weight_order);
$view->assign('show_total_info', $show_total_info);
$view->assign('show_payment_shipping_info', $show_payment_shipping_info);
$view->assign('config_fields', $this->config_fields);
$view->assign('count_filed_delivery', $this->count_filed_delivery);
$view->assign('order_email_descr', $this->order_email_descr);
$view->assign('order_email_descr_end', $this->order_email_descr_end);
$view->assign('config', $jshopConfig);
$view->assign('order', $this->order);
$view->assign('products', $products);
$view->assign('show_percent_tax', $this->show_percent_tax);
$view->assign('hide_subtotal', $this->hide_subtotal);
$view->assign('noimage', $jshopConfig->noimage);
$view->assign('text_total',$this->text_total);
$view->assign('liveurlhost',$liveurlhost);
if ($type=='vendor'){
$dispatcher->trigger('onBeforeCreateTemplateOrderPartMail', array(&$view));
}else{
$dispatcher->trigger('onBeforeCreateTemplateOrderMail', array(&$view));
}
return $view->loadTemplate();
}

public function send(){
$jshopConfig = JSFactory::getConfig();
$dispatcher = JDispatcher::getInstance();

$dispatcher->trigger('onBeforeSendEmailsOrder',
array(&$this->order, &$this->listVendors, &$this->file_generete_pdf_order, &$this->admin_send_order, &$this));

$message_client = $this->getMessage('client');
$message_admin = $this->getMessage('admin');
$this->loadMessageForListVendors();

if ($this->getGeneretePdf()){
$this->order->generatePdf($this->file_generete_pdf_order);
}

$send = array();

//send mail client
if ($this->order->email){
$send['client'] = $this->sendMail('client', $this->order->email, $message_client);
}

//send mail admin
if ($this->admin_send_order){
$send['admin'] = $this->sendMail('admin', $jshopConfig->getAdminContactEmails(), $message_admin);
}

//send message mail vendors
if ($this->vendors_send_message || $this->vendor_send_order){
foreach($this->listVendors as $k=>$vendor){
$send['vendormessage:'.$vendor->id] = $this->sendMail('vendormessage', $vendor->email, $vendor->message, $vendor);
}
}

//send order vendors
if ($this->vendor_send_order_admin){
foreach($this->listVendors as $k=>$vendor){
$send['vendor:'.$vendor->id] = $this->sendMail('vendor', $vendor->email, $message_admin, $vendor);
}
}
//отправляем SMS
if ($this->order->mobil_phone != "") {
$client = new SoapClient ('http://turbosms.in.ua/api/wsdl.html');
$auth = Array (
'login' => 'login',
'password' => 'password'
);
$result = $client->Auth ($auth);

$text .= JText::_(_JSHOP_ORDER_NUMBER).": ".$this->order->order_number."\n";
$text .= JText::_(_JSHOP_TOTAL).": ".number_format($this->order->order_total, 0, '.', ' ')." ".$this->order->currency_code."\n";
/* $text .= $this->payment."\n"; */
$text .= "Заказ принят";
$sms = Array (
'sender' => 'Teh-Shop',
'destination' => $this->order->mobil_phone,
'text' => $text
);

$result = $client->SendSMS ($sms);
                                                 }


public function getSubjectMail($type, $order){
if ($type=='vendormessage'){
$subject = sprintf(_JSHOP_NEW_ORDER_V, $order->order_number, "");
}else{
$subject = sprintf(_JSHOP_NEW_ORDER, $order->order_number, $order->f_name." ".$order->l_name);
}
extract(js_add_trigger(get_defined_vars(), "after"));
return $subject;
}

public function sendMail($type, $recipient, $message, $vendor = null){
$app = JFactory::getApplication();
$jshopConfig = JSFactory::getConfig();
$dispatcher = JDispatcher::getInstance();

$mailfrom = $app->getCfg('mailfrom');
$fromname = $app->getCfg('fromname');
$pdfsend = $this->getPdfSend();
$manuallysend = $this->getManuallysend();
$subject = $this->getSubjectMail($type, $this->order);
$pdfsendtype = $this->getPdfSendType($type);

$mailer = JFactory::getMailer();
$mailer->setSender(array($mailfrom, $fromname));
$mailer->addRecipient($recipient);
$mailer->setSubject($subject);
$mailer->setBody($message);
if ($pdfsendtype){
$mailer->addAttachment($jshopConfig->pdf_orders_path."/".$this->order->pdf_file);
}
$mailer->isHTML(true);
$dispatcher->trigger($this->getSendMailTriggerType($type),
array(&$mailer, &$this->order, &$manuallysend, &$pdfsend, &$vendor, &$this->vendors_send_message, &$this->vendor_send_order));
return $mailer->Send();
}

protected function loadOrderData(){
$jshopConfig = JSFactory::getConfig();

$this->order = JSFactory::getTable('order', 'jshop');
$this->order->load($this->getOrderId());
$this->order->prepareOrderPrint('', 1);
$this->show_percent_tax = $this->order->getShowPercentTax();
$this->hide_subtotal = $this->order->getHideSubtotal();
$this->order->fixConfigShowWeightOrder();
$this->order_email_descr = $this->order->getStaticText('order_email_descr');
if ($this->getManuallysend()){
$order_email_descr_manually = $this->order->getStaticText('order_email_descr_manually');
if (trim($order_email_descr_manually)!=''){
$this->order_email_descr = $order_email_descr_manually;
}
}
$this->order_email_descr_end = $this->order->getStaticText('order_email_descr_end');
$this->text_total = $this->order->getTextTotal();

$this->file_generete_pdf_order = $jshopConfig->file_generete_pdf_order;        
$this->config_fields = $jshopConfig->getListFieldsRegisterType('address');
$this->count_filed_delivery = $jshopConfig->getEnableDeliveryFiledRegistration('address');

$this->listVendors = $this->getListVendors($this->order);
$this->vendors_send_message = $this->getVendorsSendMessage();
$this->vendor_send_order_admin = $this->getVendorSendOrderAdmin($this->order);
$this->vendor_send_order = $this->getVendorSendOrder($this->order);
$this->admin_send_order = $this->getAdminSendOrder($this->order, $this->listVendors);
}

protected function loadMessageForListVendors(){
if ($this->vendors_send_message || $this->vendor_send_order){
foreach($this->listVendors as $k=>$vendor){
if ($this->vendors_send_message){
$show_customer_info = 0;
$show_weight_order = 0;
$show_total_info = 0;
$show_payment_shipping_info = 0;
}
if ($this->vendor_send_order){
$show_customer_info = 1;
$show_weight_order = 0;
$show_total_info = 0;
$show_payment_shipping_info = 1;
}
$vendor_order_items = $this->order->getVendorItems($vendor->id);

$this->listVendors[$k]->message = $this->getMessage(
'vendor', $vendor_order_items, $show_customer_info, $show_weight_order, $show_total_info, $show_payment_shipping_info
);
}
}
}

protected function getPdfSend(){
$pdfsend = 1;
if (JSFactory::getConfig()->send_invoice_manually && !$this->getManuallysend()){
$pdfsend = 0;
}
return $pdfsend;
}

protected function getGeneretePdf(){
return $this->getPdfSend() && JSFactory::getConfig()->generate_pdf;
}

protected function getListVendors($order){
if (JSFactory::getConfig()->admin_show_vendors){
$listVendors = $order->getVendors();
}else{
$listVendors = array();
}
return $listVendors;
}

protected function getVendorsSendMessage(){
return  JSFactory::getConfig()->vendor_order_message_type==1;
}

protected function getVendorSendOrderAdmin($order){
$jshopConfig = JSFactory::getConfig();
return (($jshopConfig->vendor_order_message_type==2 && $order->vendor_type == 0 && $order->vendor_id) || $jshopConfig->vendor_order_message_type==3);
}

protected function getVendorSendOrder($order){
$jshopConfig = JSFactory::getConfig();
$vendor_send_order = $jshopConfig->vendor_order_message_type==2;        
if ($this->getVendorSendOrderAdmin($order)){
$vendor_send_order = 0;
}
return $vendor_send_order;
}

protected function getAdminSendOrder($order, $listVendors){
$admin_send_order = 1;
if (JSFactory::getConfig()->admin_not_send_email_order_vendor_order && $this->getVendorSendOrderAdmin($order) && count($listVendors)){
$admin_send_order = 0;
}
return $admin_send_order;
}

protected function getPdfSendType($type){
$jshopConfig = JSFactory::getConfig();
$pdfsend = $this->getPdfSend();
if ($type=='client'){
$pdfsendtype = $pdfsend && $jshopConfig->order_send_pdf_client;
}
if ($type=='admin'){
$pdfsendtype = $pdfsend && $jshopConfig->order_send_pdf_admin;
}
if ($type=='vendormessage'){
$pdfsendtype = 0;
}
if ($type=='vendor'){
$pdfsendtype = $pdfsend && $jshopConfig->order_send_pdf_admin;
}
return $pdfsendtype;
}

protected function getSendMailTriggerType($type){
if ($type=='client'){
$trigger = 'onBeforeSendOrderEmailClient';
}
if ($type=='admin'){
$trigger = 'onBeforeSendOrderEmailAdmin';
}
if ($type=='vendormessage'){
$trigger = 'onBeforeSendOrderEmailVendor';
}
if ($type=='vendor'){
$trigger = 'onBeforeSendOrderEmailVendorOrder';
}
return $trigger;
}

}


*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: JoomShopping + SMS
« Ответ #216 : 14.10.2016, 23:45:03 »
strval?
Если так, то целое должно пристыковываться к строке и автоматом преобразовываться в строку. Или я старею?
все так. оно и пристыковывается наверняка :) просто ТС-у нужно не id метода, а название
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: JoomShopping + SMS
« Ответ #217 : 15.10.2016, 00:41:23 »
Вот на получении значения вида оплаты  получился ступор.
не очень понимаю, в чем именно ступор? $this->order->payment_id у вас есть, это id способа оплаты. проверяйте, совпадает ли он с нужным, и если да - отправляйте.
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

Qverty2012

  • Захожу иногда
  • 107
  • 0 / 0
Re: JoomShopping + SMS
« Ответ #218 : 15.10.2016, 21:01:04 »
Сложно сказать, не видя всего кода. Попробуйте вставить вывод содержимого, и увидите, в чем ошибка.

Код: php
$text .= JText::_(_JSHOP_ORDER_NUMBER).": ".$this->order->order_number."\n";
$text .= JText::_(_JSHOP_TOTAL).": ".number_format($this->order->order_total, 0, '.', ' ')." ".$this->order->currency_code."\n";
var_dump($this->order->payment_id); die("Пипец где то тут");
$text .= JText::_($this->order->payment_id)."\n";
$text .= "Заказ принят";

Ну и какой текст ошибки то?

Вот -  NULL Пипец РіРґРµ то тут
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: JoomShopping + SMS
« Ответ #219 : 15.10.2016, 22:13:18 »
$this->order->payment_method_id
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

Qverty2012

  • Захожу иногда
  • 107
  • 0 / 0
Re: JoomShopping + SMS
« Ответ #220 : 15.10.2016, 22:46:42 »
string(1) "6" result
*

Qverty2012

  • Захожу иногда
  • 107
  • 0 / 0
Re: JoomShopping + SMS
« Ответ #221 : 15.10.2016, 22:48:05 »
Как получить не номер по порядку, а именно строковое значение?
P.s как избавиться от крякозябров?
« Последнее редактирование: 15.10.2016, 22:53:07 от Qverty2012 »
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: JoomShopping + SMS
« Ответ #222 : 15.10.2016, 23:10:40 »
это и не номер по порядку. это id метода оплаты. его и сравнивайте с нужным. для чего вам строковое значение?

настройте сервер на UTF-8 кодировку
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

Qverty2012

  • Захожу иногда
  • 107
  • 0 / 0
Re: JoomShopping + SMS
« Ответ #223 : 15.10.2016, 23:31:35 »
это и не номер по порядку. это id метода оплаты. его и сравнивайте с нужным. для чего вам строковое значение?

настройте сервер на UTF-8 кодировку
спс. И все же как получить строковое значение? 
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: JoomShopping + SMS
« Ответ #224 : 15.10.2016, 23:36:00 »
запрос сделайте в базу, по этому id получите название. не представляю, для чего это нужно, почему не сравнивать числа.
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

Hvaekar

  • Осваиваюсь на форуме
  • 27
  • 0 / 0
Re: JoomShopping + SMS
« Ответ #225 : 08.05.2018, 11:28:23 »
Как сделать отправку SMS при смене статуса заказ (как сделал ее я для себя) посредством turbosms. JoomShopping 4.17.0 (должно подойти начиная с 4.11.0)

Вставляем код:
Код
//send sms client
if ($order->phone != "") {

$client = new SoapClient ('http://turbosms.in.ua/api/wsdl.html');

$auth = Array (
'login' => 'Логин turbosms',
'password' => 'Пароль turbosms'
);

$order->load($order_id);

$status = JSFactory::getTable('orderStatus', 'jshop');
$status->load($order->order_status);
$lang = JSFactory::getLang();
$name = $lang->get("name");
$order->status = $status->$name;

$result = $client->Auth ($auth);
$text .= JText::_(_JSHOP_ORDER_NUMBER2).ltrim($order->order_number,'0')." ".$order->status = mb_strtolower($status->$name).".";
if ($this->include_comment && $this->comments != "") {
$text .= JText::_('\n'.$this->comments.'');
}


$sms = Array (
'sender' => 'Подпись turbosms',
'destination' => $order->phone,
'text' => $text
);

$result = $client->SendSMS ($sms);
};

в функцию "sendMail" файла /components/com_jshopping/models/orderchangestatus.php, у меня это строка 186. Код нужно вставить перед "return $mailer->Send();"
Логин, пароль, подпись поставить свои. Параметру "_JSHOP_ORDER_NUMBER2" определить значение в языковом файле.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Мы починили поиск для JoomShopping

Автор Dimidrol-Pruper

Ответов: 101
Просмотров: 35905
Последний ответ 24.06.2024, 14:20:58
от kit2m2
Плагин - Вывод значения поля из таблицы продуктов в корзине JoomShopping

Автор draff

Ответов: 3
Просмотров: 2689
Последний ответ 26.02.2024, 07:00:01
от kit2m2
Плагин - Товар на складе или Товар под заказ для JoomShopping [Скачать]

Автор kit2m2

Ответов: 58
Просмотров: 12590
Последний ответ 18.05.2023, 12:59:00
от Akeksandr
[Решено] Комплект товаров JoomShopping - конструктор

Автор vgromov

Ответов: 96
Просмотров: 32778
Последний ответ 14.12.2022, 15:21:24
от kit2m2
Функционал сравнение товаров в JoomShopping

Автор falur

Ответов: 53
Просмотров: 16357
Последний ответ 22.08.2022, 09:54:16
от kit2m2