Новости 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 Гость просматривают эту тему.
  • 12 Ответов
  • 3009 Просмотров
*

Godod

  • Осваиваюсь на форуме
  • 18
  • 0 / 0
Здравствуйте. Пытаюсь сделать, чтобы в зависимости от категории выбиралось определенный input, там где количество. Мне просто надо сделать ширину и длину товара. Объясню чуток не так:
1) В подробном описании товара есть Количество и пункт, где можно выбирать его.
2) Я пытаюсь сделать так, чтобы в определенной категории этот пункт заменился на select.
Что я пытаюсь делать:
1) Есть код, который узнает номер категории родителя:
Код: php
$pathRootCategory = array();
$pathRootCategory = $pathway['0'];
$URLParent = $pathRootCategory->link;
$uri = new JURI();
$uri->parse($URLParent);
$categoryID = $uri->getVar('category_id');
$categoryID - это номер root category.
Но как правильно узнавать, я не знаю. Если его расположить в ps_product_attribute.php, потому что там на 1111 строке передается все переменные в quantity_box_general.tpl.php и потом его вызвать из упомянутого файла, то ничего не происходит. Подскажите, где правильно сделать данное?

p.s. написал конечно же... Передача идет так:
1) в ps_product_attribute.php написать $tpl->set( 'categoryID' , $categoryID);
2) а в quantity_box_general.tpl.php уже по categoryID узнавать, какая категория.
*

fsv

  • Moderator
  • 2781
  • 411 / 2
Мне просто надо сделать ширину и длину товара.
Атрибутами?

Я пытаюсь сделать так, чтобы в определенной категории этот пункт заменился на select.
В шаблоне получаете текущую категорию:
$_GET[category_id]
Веб-разработка: заказ. Только новая разработка.
*

Godod

  • Осваиваюсь на форуме
  • 18
  • 0 / 0
Атрибутами?
В шаблоне получаете текущую категорию:
$_GET[category_id]
Вместо количество, чтобы выставлялось ширина и длина. Я знаю, как получить текущую категорию, а мне надо было рут категорию, т.е. есть Категория1--ПодКатегория1--ПодПодКатегория1 и мне надо узнать id Категории1
*

fsv

  • Moderator
  • 2781
  • 411 / 2
мне надо было рут категорию, т.е. есть Категория1--ПодКатегория1--ПодПодКатегория1 и мне надо узнать id Категории1

Не сразу понял. Зачем? Селект выводить всем товарам всех вложенных категорий, принадлежащей одной родительской? Может, проще взять неиспользуемое поле в товаре (или сделать свое), там проставлять признак ("1"), в шаблоне проверять значение этой заглушки, и выводить/не выводить селект.
Если "не проще", то можно что-то вроде:

Код: php
$query="SELECT c.category_id, cmx.category_parent_id FROM #__vm_category c LEFT JOIN #__vm_category_xref cmx ON cmx.category_child_id = c.category_id";
$db =& JFactory::getDBO();
$db->setQuery($query);
$result = $db->loadAssocList();

$cats = array();
for ($i=0; $i<count($result); $i++) {
$cats[$result[$i]['category_id']] =  $result[$i]['category_parent_id'];
}

$category_id = $_GET['category_id'];
$category_parent_id = $_GET['category_id'];

while ($category_parent_id = 0) {
$category_parent_id = $cat[$category_id];
$category_id = $category_parent_id;
$category_root_id = $category_parent_id ;
}
$category_id = $_GET['category_id'];
echo $category_root_id ;
Не проверял, сейчас на ходу написал. Наверняка, рихтовать надо будет. Но смысл примерно такой.
Веб-разработка: заказ. Только новая разработка.
*

Godod

  • Осваиваюсь на форуме
  • 18
  • 0 / 0
Не сразу понял. Зачем? Селект выводить всем товарам всех вложенных категорий, принадлежащей одной родительской? Может, проще взять неиспользуемое поле в товаре (или сделать свое), там проставлять признак ("1"), в шаблоне проверять значение этой заглушки, и выводить/не выводить селект.
Если "не проще", то можно что-то вроде.
Не проверял, сейчас на ходу написал. Наверняка, рихтовать надо будет. Но смысл примерно такой.
Объясню картину в целом. Это объединит несколько тем
1) В зависимости от категории выводить "Заказ" с "количеством" либо "Заказ" с "Длиной и Шириной".
2) Это все посылать в корзину, где пользователь может заполнить форму, но она не работает, дальше не идет.
3) В админке все это показывается.
Вот и вся картинка. А теперь по порядку:
1) Чтобы проставлять знак принадлежности, а-ля неиспользуемое поле в товаре, надо знать рут категорию.
2) Нужно перемножать ширину на длину(и подставлять значение в количество?) и узнать конечную цену.
3) Передать в корзину, где показывались бы значение ширини и длины.
4) И в администраторской части тоже показывались.
*

Godod

  • Осваиваюсь на форуме
  • 18
  • 0 / 0
Вопрос все еще открыт
*

Godod

  • Осваиваюсь на форуме
  • 18
  • 0 / 0
У меня возник вопрос. Вот мы выбираем какое количество добавлять в корзину, т.е. сколько мы хотим купить. Написали цифру и нажимаем купить. Что происходит дальше? Как я понимаю это происходит так:
1) значение value в input посылается в определенный файл (файл корзины)
2) и оттуда берется количество и умножается на цену, которая тоже передалась.
3) показывается общая сумма.
У меня возник вопрос - в какой файл(класс или модель) передается значение value input'a и где обрабатывается(контроллер).
Для чего это нужно. Как написано выше нужна ширина и длина. Я хочу их умножать и передавать дробное число, количество, в данный файл. Но вот какой значение передастся в случае одновременной передачи двух значений? Или как передать значение количество (ширина умноженная на длину)?
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Все данные передаются в $_SESSION['cart'], оттуда извлекается все что кому нужно. Читай документацию VM.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

Godod

  • Осваиваюсь на форуме
  • 18
  • 0 / 0
Все данные передаются в $_SESSION['cart'], оттуда извлекается все что кому нужно. Читай документацию VM.
Уже прочитал. Вот что содержиться:
Код
[cart] ⇒ Array ( 
            [idx] ⇒ 1
            [0] ⇒ Array (
                     [quantity] ⇒ 1
                     [product_id] ⇒ 10
                     [description] ⇒ Size:big; Power:100W
                   )
           )
Меня больше интересует, какой файл берет количество и откуда (по какому признаку) он берет?
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Код
[cart] ⇒ Array ( 
            [idx] ⇒ 1
            [0] ⇒ Array (
                     [quantity] ⇒ 1
                     [product_id] ⇒ 10
                     [description] ⇒ Size:big; Power:100W
                   )
           )
Меня больше интересует, какой файл берет количество и откуда (по какому признаку) он берет?
Это только наглядный пример. На самом деле в массиве намного больше элементов. Смотрите #__vm_cart.cart_content.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

Godod

  • Осваиваюсь на форуме
  • 18
  • 0 / 0
Как я понял из доков, передается в функцию add в файле ps_product, но перед этим происходит проверка (вызов функции validate()). Кусочки кода:
Код: php
if (!$this->validate($d)) {
return false;
}
Потом заноситься в базу и если запрос не выполняется возвращается false, но перед этим еще подключается файл ps_cart, т.к. оттуда берется некоторые значения, в частности, product_in_stock, quantity_option и т.д. Значит надо копать в ps_cart... Сколько не смотрел, но не мог понять, по какому признаку он берет количество.
« Последнее редактирование: 03.03.2013, 21:07:51 от Godod »
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Вам лучше вместо субъективного рассуждения поискать внешнюю инфо. Совсем запутались.
Сколько не смотрел, но не мог понять, по какому признаку он берет количество.
чего? Если это количество товара в корзине, то я вам уже говорил, все хранится в сессии. После окончания сессии неоформленная корзина сохраняется в #__vm_cart и в cookies бразера, а сама сессия обнуляется.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

Godod

  • Осваиваюсь на форуме
  • 18
  • 0 / 0
В общем может быть кому-то пригодиться. Я делал ширину и длину и добавлял в количество.
Так-с, делаем ширину и длину.
1) в administrator/components/com_virtuemart/clases/ps_product_attribute.php
на ~1058 строке будет функция show_quantity_box и на ~ 1069 строке вставляет код:
   
Код: php
$uri = new JURI();
$uri->parse($category);
$categoryID = $uri->getVar('category_id');
и добавляем обязательный параметр $category:
1067:
Код: php
function show_quantity_box( $product_id, $prod_id, $category, $child = false, $use_parent = 'N' ) {
на строке 1112 после
Код: php
$tpl->set( 'quantity_options', $quantity_options ) ;
добавляем
Код: php
$tpl->set( 'categoryID', $categoryID ) ;

Что мы имеем на данном шаге:
Дополнительный атрибут добавлен в div "Количество" - это номер РУТ категории.

2) В файле
/components/com_virtuemart/themes/YOUR_THEME/templates/product_details/includes/addtocart_form.tpl.php добавляем и изменяем такой код:
Было:
Код: php
if ($children == "drop") {
        echo $ps_product_attribute->show_quantity_box($product_id,$product_id);
    }
Стало:
Код: php
if ($children == "drop") {
        $category = $pathway['0']->link;
        echo $ps_product_attribute->show_quantity_box($product_id,$product_id, $category);
    }
3) Если надо в категории выводить тогда в файлике
/components/com_virtuemart/themes/YOUR_THEME/templates/browse/includes/addtocart_form.tpl.php делаем точно такие же изменения.

4) В /components/com_virtuemart/themes/YOUR_THEME/templates/product_details/includes/quantity_bоx_general.tpl.php делаем такой код:
Код: php
<?php if (!defined('_VALID_MOS') && !defined('_JEXEC')) die('Direct Access to ' . basename(__FILE__). ' is not allowed.');
mm_showMyFileName(__FILE__);
/** This template is used for the quantity box arrangement of products, within the add-to-cart form */

extract($quantity_options);

$html = '';?>
<script language="javascript">
    jQuery(document).ready(function ($){
        var weight = 2;
        var height = 1;
        var quantity = 1;
$("select").change(function () {
    $("select option:selected").each(function () {
        weight = $(this).val();
        quantity = Math.round(parseFloat(height)*100 * parseFloat(weight)*100)/10000;
        reuse();
        });
    });
        $("input.inputboxquantity2").change(function () {
            height = $(this).val();
            quantity = Math.round(parseFloat(height)*100 * parseFloat(weight)*100)/10000;
            reuse();
        });
        function reuse() {
        $('input.hidden').attr('value','');
        $('input.hidden').attr('value',quantity);
    }
    });
</script>
<?php
if (!$child && $display_type != 'hide' && $categoryID != '3' && $categoryID != '38') {
    $html = '<span class="quantity" style="display:block;"><label for="quantity' . $prod_id . '" class="quantity_box">' . $VM_LANG->_('PHPSHOP_CART_QUANTITY'). ':&nbsp;</label>';
} else {
    $html = '<span class="quantity" style="display:block;"><label for="quantity' . $prod_id . '" class="quantity_box">Ширина:&nbsp;</label>';
}
if ($categoryID == '3' || $categoryID == '38') {
    $width = array('2','2.5','3','3.5','4','5');
    $code = '<select class="inputboxquantity1" class="quantity" name="quantity[]">';
    foreach($width as $v) {
        $code .= '  <option value="' . $v . '"';
        if ($v == $quantity) {
            $code .= ' selected="selected"';
        }
        $code .= '>' . $v . "</option>\n";
    }
    $code .= "</select>\n<br>";
    $code .= '<span class="quantity" style="display:block;"><label for="quantity' . $prod_id . '" class="quantity_box">Длина:&nbsp;</label><input type="text" class="inputboxquantity2" size="4" value="' . $quantity . '" />';
    $html .= $code;
} else {
    switch ($display_type) {
        case "radio" : //Radio Box
            $html .= '<input type="hidden" id="quantity' . $prod_id . '" name="quantity[]" value="' . $quantity . '" />';
            $html .= '<input type="radio" class="quantitycheckbox" id="selItem' . $prod_id . '" name="selItem" value="0" ';
            if ($quantity > 0) {
                $html .= 'checked="checked" ';
            }
            $html .= 'onclick="alterQuantity(this.form)" />';
            break;
        case "hide" : // Hide box - but set quantity to 1!
            $html .= '<input type="hidden" id="quantity' . $prod_id . '" name="quantity[]" value="1" />';
            break;
        case "check" :
            $html .= '<input type="hidden" id="quantity' . $prod_id . '" name="quantity[]" value="' . $quantity . '" style="vertical-align: middle;"/>
<input type="checkbox" class="quantitycheckbox" id ="selItem' . $id . '" name="check[]" ';
            if ($quantity > 0) {
                $html .= 'checked="checked"';
            }
            $html .= ' value="1" onclick="javascript: if(this.checked==true) document.getElementById(\'quantity' . $prod_id . '\').value = 1; else {document.getElementById(\'quantity' . $prod_id . '\').value=0;} "/> ';
            break;
        case "drop" :
            $code = '<select class="inputboxquantity" id="quantity' . $prod_id . '" name="quantity[]">';
            for ($i = $quantity_start; $i < $quantity_end + 1; $i += $quantity_step) {
                $code .= '  <option value="' . $i . '"';
                if ($i == $quantity) {
                    $code .= ' selected="selected"';
                }
                $code .= '>' . $i . "</option>\n";
            }
            $code .= "</select>\n";
            $html .= $code;
            break;
        case "none" :
        default:
            $html .= '<input type="text" class="inputboxquantity" size="4" id="quantity' . $prod_id . '" name="quantity[]" value="' . $quantity . '" />
<input type="button" class="quantity_box_button quantity_box_button_up png" onclick="var qty_el = document.getElementById(\'quantity' . $prod_id . '\'); var qty = qty_el.value; if( !isNaN( qty )) qty_el.value++;return false;" />
<input type="button" class="quantity_box_button quantity_box_button_down png" onclick="var qty_el = document.getElementById(\'quantity' . $prod_id . '\'); var qty = qty_el.value; if( !isNaN( qty ) &amp;&amp; qty > 0 ) qty_el.value--;return false;" /></span>
';
            break;
    }
}
if ($categoryID == '3' || $categoryID == '38') {
$html .= '<input type="hidden" class="hidden" size="4" id="quantity' . $prod_id . '" name="quantity[]" value="2" />';
} else {
    $html .= '<input type="hidden" class="hidden" size="4" id="quantity' . $prod_id . '" name="quantity[]" value="1" />';
}
echo $html;
?>
5)Для тех, кому тоже не применимо решение с целыми числами, рассказываю:
1) в БД в таблице jos_vm_product поле product_in_stock меняем тип int на float
2) дальше работаем с файлом
../administrator/components/com_virtuemart/classes/ps_product.php
- в функции add находим строку 'product_in_stock' => vmRequest::getInt('product_in_stock'), и меняем getInt на getFloat
- в функции update делаем тоже самое
Теперь уже можно писать в остатках на складе дробные числа. Но еще остается сделать чтоб можно было при покупке вводить дробное число.
3) в БД в таблице jos_wm_order_item поле product_quantity меняем тип int на float
4) дальше работаем с файлом ../administrator/components/com_virtuemart/classes/ps_cart.php
- в функции add находим строку $quantity = intval($quantity); и комментируем ее или удаляем
- в функции update в строке $quantity = isset($d["quantity"])? (int)$d["quantity"] : 1; меняем int на float (наверно можно просто убрать (int), но лучше наверняка :))
- и аналогично делаем в функции updateSaved

P.S. Знаю, что здесь все коряво, неправильно и вообще быдлокод, но лучше что-то, чем ничего.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

количество товаров на странице

Автор gazman

Ответов: 0
Просмотров: 3483
Последний ответ 03.03.2016, 21:50:39
от gazman
[решено] Как вывести цену за количество товара на странице категории (browse_x.php)

Автор mark1

Ответов: 3
Просмотров: 3952
Последний ответ 13.06.2015, 16:22:24
от davudo
Ограничение на количество символов в описании?

Автор elena-z

Ответов: 0
Просмотров: 1234
Последний ответ 15.08.2014, 23:15:56
от elena-z
Дополнительные фото товара в списке категории

Автор newjey

Ответов: 0
Просмотров: 1501
Последний ответ 11.07.2014, 12:27:52
от newjey
Товары с наличием 0 автоматически в конец списка категории

Автор newjey

Ответов: 4
Просмотров: 1427
Последний ответ 27.09.2013, 22:04:28
от newjey