Новости Joomla

Как тестировать Joomla PHP-разработчику? Компонент Patch tester.

👩‍💻 Как тестировать Joomla PHP-разработчику? Компонент Patch tester.Joomla - open source PHP-фреймворк с готовой админкой. Его основная разработка ведётся на GitHub. Для того, чтобы международному сообществу разработчиков было удобнее тестировать Pull Requests был создан компонент Patch Tester, который позволяет "накатить" на текущую установку Joomla именно те изменения, которые необходимо протестировать. На стороне инфраструктуры Joomla для каждого PR собираются готовые пакеты, в которых находится ядро + предложенные изменения. В каждом PR обычно находятся инструкции по тестированию: куда зайти, что нажать, ожидаемый результат. Тестировщики могут предположить дополнительные сценарии, исходя из своего опыта и найти баги, о которых сообщить разработчику. Или не найти, и тогда улучшение или исправление ошибки быстрее войдёт в ядро Joomla. Напомню, что для того, чтобы PR вошёл в ядро Joomla нужны минимум 2 положительных теста от 2 участников сообщества, кроме автора. Видео на YouTubeВидео на VK ВидеоВидео на RuTubeКомпонент на GitHub https://github.com/joomla-extensions/patchtester@joomlafeed#joomla #php #webdev #community

Вышел релиз Revo PageBuilder Toolkit for YOOtheme Pro 1.6

Вышел релиз Revo PageBuilder Toolkit for YOOtheme Pro 1.6.2PageBuilder Toolkit - это специализированный плагин для конструктора страниц Yootheme Pro, содержит набор различных утилит для ускорения процесса работы и отладки макета, множественные улучшения в интерфейсе, включая поддержку dark mode, подсказки, быстрая смена разрешения в окне просмотра и много чего еще.v.1.6.2 Что нового?- Индикатор статусов: теперь не просто показывает состояние запросов, но и делает автоматические попытки их отправки при кратковременных сбоях в сети, а если это не помогло, то переводит конструктор в ручной режим, что позволяет сохранит макет и настройки темы прежде чем вы потеряете все, что было сделано с момента последнего сохранения- Подсветка ошибок в макете: плагин анализирует код страницы и может автоматически подсвечивать data атрибуты с кучей мусора, которые попадают в код страницы при копипасте из Figma в TinyMCE (пригодится для старых макетов, в текущей работе плагин сам очищает код мусора). Также есть подсветка семантических ошибок сборки - дубли h1 тега на странице и вложенных друг в друга заголовков.- Улучшена поддержка будущего релиза Yootheme Pro 5 и редактора CodeMirror 6Плагин для русскоязычных пользователей доступен в каталоге расширений SovMart и распространяется за символическую плату (100р). Разработчики Joomla расширений и партнеры автора могут получить плагин бесплатно.Для работы плагина необходим конструктор страниц Yootheme Pro.Разработчик плагина - участник нашего сообщества Александр Судьбинов (@alexrevo), член официальной группы поддержки Yootheme Pro. Страница расширенияОписание на сайте автора@joomlafeed#joomla #yootheme

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

bombapiter

  • Захожу иногда
  • 71
  • 0 / 0
Добрый день, подскажите, после установки com_virtuemart и com_virtuemart_aio, версии 3.4.5.10063, перестает работать скрипт генерирующий YML. При запуске скрипта выводится ошибка: Error: Call to undefined method Error::get(): Class ‘vmVersion’ not found.


Такая же ошибка... Можно ли как исправить?
*

zikkuratvk

  • Глобальный модератор
  • 4822
  • 346 / 2
  • Обслуживаем проекты - дорого.
Можете просто использовать бесплатный компонент https://joomline.net/ru/extensions/yandex-market-xml.html поддержка virtuemart 3 и выше присутствует.
Хочется уникальное расширение? ===>>>> JoomLine - Разрабатываем расширения под заказ.
Использую хостинг TimeWeb и Reg
*

russss

  • Новичок
  • 1
  • 0 / 0
хочу сказать спасибо разработчику за этот плагин!
а во вторых написать решение проблем, с которыми могут столкнуться пользователи при обновлении компонента VirtueMart. (по мотивам моего общения с Сергеем)
Итак, после обновления версии выйдет ошибка: Class 'vmVersion' not found
Во-первых, переносим файлы скрипта в корень.
Далее вносим изменения в сам скрипт
заменяем $version = substr(vmVersion::$RELEASE, 0, 1);
 на
$version = 3;
и  правим пути
define('JPATH_BASE', dirname(FILE).DS.'..');
заменяем на
define('JPATH_BASE', dirname(FILE));

Если хотите, чтобы XML файл формировался также в папке /market/
в конце редактируем эту строчку и правим путь.

   $xml_file = fopen('market/vm2_market.xml', 'w+');

Проверено на virtuemart 3.6.10 10211 и joomla 3.9.14
« Последнее редактирование: 06.01.2020, 09:48:59 от russss »
*

bgg87

  • Захожу иногда
  • 164
  • 2 / 0
  • Истина где-то рядом...
Можете просто использовать бесплатный компонент https://joomline.net/ru/extensions/yandex-market-xml.html поддержка VirtueMart 3 и выше присутствует.

После обновления и с этим компонентом возникает проблема:

Цитировать
revision: 6470735; Build date: 2020-03-10T15:46:26.000000Z (строка 0, столбец 0)
categories type: Unmmaped (строка 13, столбец 32)
20 has parent_id 128 which is not an existing category id. This parent_id will be removed. (строка 15, столбец 42)
scheme: delivery-options (строка 19, столбец 24)

Joomla! ‎3.9.12
VirtueMart 3.6.10 10211
Yandex Market XML Версия: 2.0.0
*

Pizzadox

  • Осваиваюсь на форуме
  • 34
  • 0 / 0
Добрый день, не подскажите как у товаров брать description и доп поля товаров и если они пустые, то оставлять пустым значение
Сейчас у меня не используется на сайте description для товаров, так оно и не отображается в выводе файла.
« Последнее редактирование: 01.05.2020, 16:59:25 от Pizzadox »
*

qcsbs-n

  • Новичок
  • 6
  • 0 / 0
Здравствуйте.
Как добавить в выгрузку цвет товара (Маркет начал требовать указание цвета)?
Например, я сделал дополнительное поле на сайте (виртуэмарт 2х..) с переменной color2. Как мне ее добавить в выгрузку, чтобы она отображалась в прайс-листе?
*

WooSuuP

  • Захожу иногда
  • 235
  • 11 / 1
  • Ословед Интерсвязи
Скачать
Срок регистрации домена кончился. Перезалей в облако пожалуйста!
*

djed9

  • Захожу иногда
  • 116
  • 2 / 0
Ребята, подскажите, как в выгрузке сделать, что бы товары не выгружались по производителям, что бы все товары определенного производителя выпадали из выгрузки?
*

icom

  • Давно я тут
  • 830
  • 202 / 4
Срок регистрации домена кончился. Перезалей в облако пожалуйста!
Скачать

Старая версия

*

GeezMore

  • Новичок
  • 2
  • 0 / 0
Скопировал файл в корень. Попробовал обратиться к нему через браузер, ошибка 500.
Цитирую:
Цитировать
Произошла критическая ошибка
The server returned a "500 - Whoops, looks like something went wrong."
J! 4, VM4
В консоли следующее вижу:
Цитировать
Failed to load resource: the server responded with a status of 500 () v,4_market.php:1
Подскажите, что я делаю не так?
С уважением, Олег
*

anantaya

  • Новичок
  • 4
  • 0 / 0
Благодарю!
*

strongest

  • Новичок
  • 6
  • 0 / 0
Скачать

Старая версия



для Joomla 4 есть? 500 ошибка при вызове скрипта.


UPD вопрос решил, вот код если кому нужно

Код
<?php
/**
 * version 4
 * author Sergey Bordyzhan (bordyzhan@gmail.com)
 *
 * Donate:
 * Z272730060230 вебмани
 * 410011118020069 Юmoney
 */

define('NAME', 'Название организации'); // название организации (не должно превышать 20 символов)
define('DESC', 'Описание организации'); // описание организации
define('CURRENCY', 'USD'); // валюта магазина (RUB, USD, EUR, UAH, KZT)
define('DELIVERY', 'false'); // наличие доставки в магазине (true - есть, false - нет)
define('EXCLUDE_CAT', '0'); // id категорий которые нужно исключить из выгрузки, перечислить через запятую, например define('EXCLUDE_CAT', '2,8,54,5')
define('EXCLUDE_PROD', '0'); // id товаров которые нужно исключить из выгрузки, перечислить через запятую, например define('EXCLUDE_PROD', '2,8,54,5')
define('FILE', 0); // 1 если нужно cоздать файл vm4_market.xml, 0 - выввод xml в браузер

define('_JEXEC', 1);

if (!defined('_JDEFINES'))
{
define('JPATH_BASE', dirname(__FILE__));
require_once JPATH_BASE . '/includes/defines.php';
}
require_once JPATH_BASE . '/includes/framework.php';

use \Joomla\CMS\Factory;


// Boot the DI container
$container = \Joomla\CMS\Factory::getContainer();
$container->alias('session.web', 'session.web.site')
->alias('session', 'session.web.site')
->alias('JSession', 'session.web.site')
->alias(\Joomla\CMS\Session\Session::class, 'session.web.site')
->alias(\Joomla\Session\Session::class, 'session.web.site')
->alias(\Joomla\Session\SessionInterface::class, 'session.web.site');
// Instantiate the application.
$app = $container->get(\Joomla\CMS\Application\SiteApplication::class);
// $session = $container->get(\Joomla\CMS\Session\Session::class);

// Set the application as global app
\Joomla\CMS\Factory::$application = $app;
$app->createExtensionNamespaceMap();

// $app->initialise();
require_once(JPATH_ADMINISTRATOR.'/components/com_virtuemart/helpers/config.php');
require_once(JPATH_ADMINISTRATOR.'/components/com_virtuemart/helpers/calculationh.php');

VmConfig::loadConfig();

require_once(JPATH_ADMINISTRATOR.'/components/com_virtuemart/models/product.php');
$model = new VirtueMartModelProduct();
$lang = VmConfig::$defaultLang;

$db = Factory::getContainer()->get('DatabaseDriver');
$live_site = trim(Joomla\CMS\Uri\Uri::root(), '/');
$calculator = calculationHelper::getInstance();

function getImages($id) {

global $db, $live_site;

$query = 'SELECT a.file_url FROM #__virtuemart_medias a JOIN #__virtuemart_product_medias b ON b.virtuemart_media_id = a.virtuemart_media_id WHERE a.published = 1 AND b.virtuemart_product_id = '.$id.' ORDER BY b.ordering, b.id LIMIT 10';
$db->setQuery($query);
$rows = $db->loadObjectList();

$media = '';

if ($rows) {
foreach ($rows as $row) {
$media .= '<picture>'.$live_site.'/'.htmlspecialchars(str_replace(' ', '%20', $row->file_url)).'</picture>'."\n";
}
}

return $media;
}

if (!FILE) {
ob_start('ob_gzhandler', 9);
header('Content-Type: application/xml; charset=utf-8');
} else {
header('Content-Type: text/html; charset=UTF-8');
}

$xml = '<?xml version="1.0" encoding="utf-8"?>'."\n";
$xml .= '<yml_catalog date="'.date('Y-m-d H:i').'">'."\n";
$xml .= '<shop>'."\n";
$xml .= '<name>'.htmlspecialchars(NAME, 0, 20, 'UTF-8').'</name>'."\n";
$xml .= '<company>'.htmlspecialchars(DESC).'</company>'."\n";
$xml .= '<url>'.$live_site.'</url>'."\n";
$xml .= '<currencies>'."\n";
$xml .= '<currency id="'.CURRENCY.'" rate="1"/>'."\n";
$xml .= '</currencies>'."\n";
$xml .= '<categories>'."\n";

$query = 'SELECT a.category_parent_id, a.category_child_id, b.category_name FROM #__virtuemart_category_categories a RIGHT JOIN #__virtuemart_categories_'.$lang.' b ON b.virtuemart_category_id = a.category_child_id WHERE a.category_child_id NOT IN ('.EXCLUDE_CAT.') ORDER BY a.category_child_id';
$db->setQuery($query);
$rows = $db->loadObjectList();

$exclude_cat_arr = explode(',', EXCLUDE_CAT);

foreach ($rows as $row) {
$cat_parent_id = $row->category_parent_id;
$cat_child_id = $row->category_child_id;
$cat_name = htmlspecialchars(trim(strip_tags($row->category_name)));

if ($cat_parent_id == 0 || in_array($cat_parent_id, $exclude_cat_arr)) {
$xml .= '<category id="'.$cat_child_id.'">'.$cat_name.'</category>'."\n";
} else {
$xml .= '<category id="'.$cat_child_id.'" parentId="'.$cat_parent_id.'">'.$cat_name.'</category>'."\n";
}
}

$xml .= '</categories>'."\n";
$xml .= '<offers>'."\n";

$query = 'SELECT DISTINCT a.virtuemart_product_id, a.product_parent_id, a.product_sku, a.virtuemart_vendor_id, a.product_in_stock, b.product_name, b.product_desc, d.product_tax_id, d.product_discount_id, d.product_price, d.product_override_price, d.override, d.product_currency, e.mf_name, e.virtuemart_manufacturer_id, g.virtuemart_category_id FROM (#__virtuemart_product_categories g LEFT JOIN (#__virtuemart_product_prices d RIGHT JOIN ((#__virtuemart_product_manufacturers f RIGHT JOIN #__virtuemart_products a ON f.virtuemart_product_id = a.virtuemart_product_id) LEFT JOIN #__virtuemart_manufacturers_'.$lang.' e ON f.virtuemart_manufacturer_id = e.virtuemart_manufacturer_id LEFT JOIN #__virtuemart_products_'.$lang.' b ON b.virtuemart_product_id = a.virtuemart_product_id) ON d.virtuemart_product_id = a.virtuemart_product_id) ON g.virtuemart_product_id = a.virtuemart_product_id) WHERE a.published = 1 AND d.product_price > 0 AND b.product_name <> \'\' AND g.virtuemart_category_id NOT IN ('.EXCLUDE_CAT.') AND a.virtuemart_product_id NOT IN ('.EXCLUDE_PROD.') GROUP BY a.virtuemart_product_id';
$db->setQuery($query);
$rows = $db->loadObjectList();

foreach ($rows as $row) {

$product_name = htmlspecialchars(trim(strip_tags($row->product_name)));

$product_id = $row->virtuemart_product_id;
$product_cat_id = $row->virtuemart_category_id;
$row->categories = array($product_cat_id);

$model->getRawProductPrices($row, 0, array(1), 1);

$prices = $calculator->getProductPrices($row);

$type = $row->mf_name ? ' type="vendor.model"' : '';
$url = $live_site.JRoute::_('index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id='.$product_id.'&virtuemart_category_id='.$product_cat_id);

//$available = $row->product_in_stock > 0 ? 'true' : 'false';
//$xml .= '<offer'.$type.' id="'.$product_id.'" available="'.$available.'">'."\n";

$xml .= '<offer'.$type.' id="'.$product_id.'" available="true">'."\n";
$xml .= '<url>'.$url.'</url>'."\n";
$xml .= '<price>'.$prices['salesPrice'].'</price>'."\n";
$xml .= '<currencyId>'.CURRENCY.'</currencyId>'."\n";
$xml .= '<categoryId>'.$product_cat_id.'</categoryId>'."\n";

$xml .= getImages($product_id);

$xml .= '<delivery>'.DELIVERY.'</delivery>'."\n";

if ($row->mf_name) {
$xml .= '<vendor>'.htmlspecialchars($row->mf_name).'</vendor>'."\n";
$xml .= '<model>'.$product_name.'</model>'."\n";
} else {
$xml .= '<name>'.$product_name.'</name>'."\n";
}

//$xml .= '<vendorCode>'.htmlspecialchars($row->product_sku).'</vendorCode>';

if ($row->product_desc) {
$xml .= '<description><![CDATA['.$row->product_desc.']]></description>'."\n";
}

$xml .= '</offer>'."\n";
}

$xml .= '</offers>'."\n";
$xml .= '</shop>'."\n";
$xml .= '</yml_catalog>';

if (FILE) {
$xml_file = fopen('vm4_market.xml', 'w+');

if (!$xml_file) {
echo 'Ошибка открытия файла';
} else {
ftruncate($xml_file, 0);
fputs($xml_file, $xml);

echo 'Файл создан, url - <a href="'.$live_site.'/vm4_market.xml">'.$live_site.'/vm4_market.xml</a>';
}

fclose($xml_file);
} else {
echo $xml;
}
« Последнее редактирование: 03.07.2023, 10:42:25 от strongest »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

WT VirtueMart Bitrix24, плагин интеграции с CRM Битрикс24

Автор sergeytolkachyov

Ответов: 1
Просмотров: 3461
Последний ответ 17.11.2023, 10:27:16
от sergeytolkachyov
Ошибка после перехода в корзину VirtueMart

Автор max_max

Ответов: 4
Просмотров: 3079
Последний ответ 07.09.2021, 18:50:25
от max_max
Кнопки операций в VirtueMart не реагируют на клик

Автор max_max

Ответов: 0
Просмотров: 2933
Последний ответ 30.08.2021, 09:43:21
от max_max
Привязка товаров к категориям при импорте из csv

Автор max_max

Ответов: 8
Просмотров: 3570
Последний ответ 16.08.2021, 18:45:19
от max_max
csvi Pro 7.3.0. Игнорирование существующих полей пи импорте товаров

Автор Viktor

Ответов: 2
Просмотров: 3277
Последний ответ 13.12.2019, 22:44:43
от AlexB