Новости Joomla

Человек на GitHub ускорил Joomla в 600 раз на объёме 150к+ материалов в 1700+ категориях

Человек на GitHub ускорил Joomla в 600 раз на объёме 150к+ материалов в 1700+ категориях

👩‍💻 Человек на GitHub ускорил Joomla в 600 раз на объёме 150к+ материалов в 1700+ категориях. На старте его сайт на Joomla 3 вообще не смог обновиться на Joomla 5. Пришлось делать экспорт/импорт материалов. Проделав всё это он запустил-таки этот объём данных на Joomla 5. Тестовый скрипт грузил 200 материалов из этого объёма всего за 94 секунды ))) А главная страница с категориями грузилась 20 секунд. Добавив индекс для таблицы #__content

CREATE INDEX idx_catid_state ON #__content (catid, state);
он сократил время загрузки категорий до 1 секунды. Затем наш герой решил поковырять SQL-запрос в ArticleModel, который отвечает за выборку материалов. И решил заменить тип JOIN на STRAIGHT_JOIN для категорий.
// ->from($db->quoteName('#__content', 'a'))->from(    $db->quoteName('#__content', 'a')    . ' STRAIGHT_JOIN ' . $db->quoteName('#__categories', 'c')    . ' ON ' . $db->quoteName('c.id') . ' = ' . $db->quoteName('a.catid'))// ->join('LEFT', $db->quoteName('#__categories', 'c'), $db->quoteName('c.id') . ' = ' . $db->quoteName('a.catid'))
Что сократило загрузку 200 материалов из 150к с 94 секунд до 5. К слову сказать, боевой сайт на Joomla 3 крутится на 12CPU 64GB рамы. А все манипуляции с кодом он делает на базовом 1CPU 1GB сервере и замеры скорости даны именно для базового сервера. Но это всё в дискуссии, хотя в идеале должно вылиться в Pull Requests. Мы - Open Source сообщество, где никто никому ничего не должен. Джунгли. Но человек ищет пути оптимизации Joomla и предлагает решения. Если оказать поддержку и предложить помощь хотя бы с тестированием самых разнообразных сценариев, то возможно эти улучшения смогут войти в ядро. Пусть не быстро, пусть через несколько лет, пусть не все, но войдут. Достаточно предложить руку помощи и приложить немного усилий.
Дискуссию на GitHub можно почитать здесь.@joomlafeed#joomla #community #php

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

Перевод и публикация интервью на греческом портале Joomla 🇬🇷

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

Недавно я взял интервью у Билла (Василиса) Коциаса - руководителя студии, читающего лекции в университете и популяризатора Joomla в Греции. Это интервью из журнала NorrNext, в оригинале на английском, теперь доступно на греческом языке и опубликовано на портале joomla.gr. 🎉

До чего же приятно… 😇😊 Работа замечена и с ней посчитали необходимым ознакомить аудиторию страны, в которой Билл читает лекции. И это солнечная Греция - страна, страна, с которой Россию многое связывает. 🇬🇷🇷🇺🕊

Смотрю на греческий алфавит и тут же рисуются картины белоснежных зданий в окружении винограда и амфор, красивых женщин в сандалиях и мужественных воинов, охраняющих покой полисов, в которых ученые мужи работают над трудами, позже вошедшими в века. Красиво! 😇Но вернемся к интервью.

Из него вы узнаете, что в Греции доля Joomla среди CMS занимает порядка 30-40%. По моему мнению это - самый высокий показатель во всем мире. Также чтение лекций о Joomla в университетах позволит привести новых пользователей и к тому же молодое поколение. Ну и огромное кол-во сертификтатов Билла на стене (смотрим фото в статье) свидетельствует о том, что Joomla может применяться как профессиональный инструмент.

🌐 Оригинальное интервью (на английском)
🇬🇷 Интервью на греческом портале (joomla.gr)

Что насчет перевода на русский? Увы, времени всего 24 часа в сутках. Я продолжаю готовить новые интервью. Возможно, после завершения выпуска журнала, рассмотрю перевод некоторых интервью на русский. Но я об этом не говорил. 😊 В блоге @eugenius_blog публикую анонсы интересных событий из мира Joomla, интервью, уроки и полезные советы, а также делюсь мыслями:, связанными с разработкой и веб-дизайном.

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

st_jimmy96

  • Осваиваюсь на форуме
  • 47
  • 5 / 0
Больше года я не пользовался ВиртуМартом и тут приспичило. Какой все-даки он ущербный... Ну да ладно не об этом.
Меня всегда напрягал способ изменения количества товара, при оформлении, в корзине. Это ж как не удобно надо сначала ввести количество, а потом кнопку жать.
Решил проблему по своему:
идем в components\com_virtuemart\views\cart\tmpl\default_pricelist.php
Ищем там:
Код
<input type="text"
   onblur="Virtuemart.checkQuantity(this,<?php echo $step?>,'<?php echo vmText::_ ('COM_VIRTUEMART_WRONG_AMOUNT_ADDED')?>');"
   onclick="Virtuemart.checkQuantity(this,<?php echo $step?>,'<?php echo vmText::_ ('COM_VIRTUEMART_WRONG_AMOUNT_ADDED')?>');"
   onchange="Virtuemart.checkQuantity(this,<?php echo $step?>,'<?php echo vmText::_ ('COM_VIRTUEMART_WRONG_AMOUNT_ADDED')?>');"
   onsubmit="Virtuemart.checkQuantity(this,<?php echo $step?>,'<?php echo vmText::_ ('COM_VIRTUEMART_WRONG_AMOUNT_ADDED')?>');"
   title="<?php echo  vmText::_('COM_VIRTUEMART_CART_UPDATE')?>" class="quantity-input js-recalculate" size="3" maxlength="4" name="quantity[<?php echo $pkey; ?>]" value="<?php echo $prow->quantity ?>" />
Дописываем перед ним: <span class="plusminus"><a class="prplus">+</a>
после него: <a class="prminus">-</a>
И после кнопок:
<button type="submit" class="vmicon vm2-add_quantity_cart" name="updatecart.<?php echo $pkey ?>" title="<?php echo  vmText::_ ('COM_VIRTUEMART_CART_UPDATE')?>" />
<button type="submit" class="vmicon vm2-remove_from_cart" name="delete.<?php echo $pkey ?>" title="<?php echo vmText::_ ('COM_VIRTUEMART_CART_DELETE')?>" />
Закрываем наш спан: </span>
Далее в удобном месте шаблона прописываем код:
Код
	$(function(){
$('a.prminus').click(function() {
var $input = $(this).parent(this).children("input");
var count = parseInt($input.val()) - 1;
$(this).parent(this).children("input").val(count);
$(this).parent(this).children(".vm2-add_quantity_cart").click();
});
$('a.prplus').click(function() {
var $input = $(this).parent(this).children("input");
var count = parseInt($input.val()) + 1;
$(this).parent(this).children("input").val(count);
$(this).parent(this).children(".vm2-add_quantity_cart").click();
});
});
CSSом допиливаем по своему усмотрению.
*

fsv

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

st_jimmy96

  • Осваиваюсь на форуме
  • 47
  • 5 / 0
Действительно скрипт можно поправить. На счет проверки на ноль - нет необходимости, при значении меньше 1, товар удаляется из корзины. :)
*

fsv

  • Moderator
  • 2782
  • 411 / 2
На счет проверки на ноль - нет необходимости, при значении меньше 1, товар удаляется из корзины.
Вот так юзер решит почпокать кнопочками, разгонится и промажет, товар удалится, ему расстройство и закрытие вкладки вашего сайта, вам не полученная прибыль. Проверка на ">=1", удаляет (если захочет) кнопкой.
Веб-разработка: заказ. Только новая разработка.
*

lalalag

  • Захожу иногда
  • 162
  • 0 / 3
Далее в удобном месте шаблона прописываем код:
Код
	$(function(){
$('a.prminus').click(function() {
var $input = $(this).parent(this).children("input");
var count = parseInt($input.val()) - 1;
$(this).parent(this).children("input").val(count);
$(this).parent(this).children(".vm2-add_quantity_cart").click();
});
$('a.prplus').click(function() {
var $input = $(this).parent(this).children("input");
var count = parseInt($input.val()) + 1;
$(this).parent(this).children("input").val(count);
$(this).parent(this).children(".vm2-add_quantity_cart").click();
});
});
CSSом допиливаем по своему усмотрению.

Подскажите пож-та. где именно надо прописывать.
Вписал после span - не работает.
*

st_jimmy96

  • Осваиваюсь на форуме
  • 47
  • 5 / 0
Перед кодом напишите <script> а после </script> и будет счастье
*

lalalag

  • Захожу иногда
  • 162
  • 0 / 3
сделал. и ничего не работает
*

st_jimmy96

  • Осваиваюсь на форуме
  • 47
  • 5 / 0
Вставлять скрипт нужно перед <span>
Попробуйте вставить в шапку (<head></head>). Проверьте подключен ли у Вас jquery
*

lalalag

  • Захожу иногда
  • 162
  • 0 / 3
Вставлять скрипт нужно перед <span>
Попробуйте вставить в шапку (<head></head>). Проверьте подключен ли у Вас jquery
прописал в head. jquery прописал.
udodobno.ru - вот тут на сайте посмотрите пож-та.
*

st_jimmy96

  • Осваиваюсь на форуме
  • 47
  • 5 / 0
Все дело в том, что Вы вставили код ДО подключения JQuery. Переместите кусок кода в конец поля head
*

st_jimmy96

  • Осваиваюсь на форуме
  • 47
  • 5 / 0
Должен заметить, этот скрипт может менять количество товара на 1 единицу. К примеру у Вас задан шаг 500шт.. Я бы переделал это таким образом:
заказ 1 упаковка = 500шт. Минимальный заказ 4 упаковки.
*

lalalag

  • Захожу иногда
  • 162
  • 0 / 3
Все дело в том, что Вы вставили код ДО подключения JQuery. Переместите кусок кода в конец поля head
Поставил. и ничего не изменилось.
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Поставил. и ничего не изменилось.
Не удивительно, у вас же другой шаблон.
Код: javascript
$(function(){
$('.quantity-plus,.quantity-minus').on('click',function() {
var
signs={'quantity-plus':1,'quantity-minus':-1},
            el=$(this).parent().prev().find('.quantity-input'),
            step=el.attr('step') || 1,
cls=$(this).attr('class'),
cl=cls.substring(cls.indexOf(' ')).trim(),
val=parseInt(el.val())+signs[cl]*step
;
val=val<step?step:val;
el.val(val);
});
});
http://jsfiddle.net/n_robert/uyqh8j9a
st_jimmy96, что за "parent(this)"?
« Последнее редактирование: 29.10.2015, 13:44:57 от robert »
Не будь паразитом, сделай что-нибудь самостоятельно!
*

lalalag

  • Захожу иногда
  • 162
  • 0 / 3
Не удивительно, у вас же другой шаблон.
Код: javascript
$(function(){
$('.quantity-plus,.quantity-minus').on('click',function() {
var
signs={'quantity-plus':1,'quantity-minus':-1},
el=$(this).parent().prev().find('.quantity-input'),
cls=$(this).attr('class'),
cl=cls.substring(cls.indexOf(' ')).trim(),
val=parseInt(el.val())+signs[cl]
;
val=val<0?0:val;
el.val(val);
});
});
http://jsfiddle.net/n_robert/uyqh8j9a
st_jimmy96, что за "parent(this)"?

Все прописал опять же. И не работают кнопки. Может потому что в вашем случае шаг в 1 ед товара. а у меня настроены другие?
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Добавил учет шага.
Мой пример взят из вашего кода, и он работает.
Попробуйте заменить "$" на "jQuery".

P.S. Только сейчас заметил: у вас и так уже все работает, зачем еще что-то менять?
« Последнее редактирование: 29.10.2015, 13:42:40 от robert »
Не будь паразитом, сделай что-нибудь самостоятельно!
*

lalalag

  • Захожу иногда
  • 162
  • 0 / 3
Добавил учет шага.
Мой пример взят из вашего кода, и он работает.
Попробуйте заменить "$" на "jQuery".

P.S. Только сейчас заметил: у вас и так уже все работает, зачем еще что-то менять?

Вы в корзине это смотрите ?
Потому что у меня не работает
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Вы в корзине это смотрите ?
Нет, не в корзине :(.
Исправил:
Код: javascript
$(function(){
$('.quantity-plus,.quantity-minus').on('click',function() {
var
signs={'quantity-plus':1,'quantity-minus':-1},
el=$(this).parent().prev('.quantity-input'),
step=parseInt(el.attr('onblur').replace(/[^\d]/g,'')) || 1,
cls=$(this).attr('class'),
cl=cls.substring(cls.indexOf(' ')).trim(),
val=parseInt(el.val())+signs[cl]*step
;
val=val<step?step:val;
el.val(val);
$(this).parent().nextAll('span').filter('.vm2-add_quantity_cart').first().click();
});
});
« Последнее редактирование: 29.10.2015, 15:19:16 от robert »
Не будь паразитом, сделай что-нибудь самостоятельно!
*

lalalag

  • Захожу иногда
  • 162
  • 0 / 3
Нет, не в корзине :(.
Исправил:
Код: javascript
$(function(){
$('.quantity-plus,.quantity-minus').on('click',function() {
var
signs={'quantity-plus':1,'quantity-minus':-1},
el=$(this).parent().prev('.quantity-input'),
step=parseInt(el.attr('onblur').replace(/[^\d]/g,'')) || 1,
cls=$(this).attr('class'),
cl=cls.substring(cls.indexOf(' ')).trim(),
val=parseInt(el.val())+signs[cl]*step
;
val=val<step?step:val;
el.val(val);
$('#checkoutForm').submit();
});
});

а проблема как раз с изменением количества в корзине)
этот скрипт прописал. и не работает (
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Чуть-чуть изменил последнюю строку.
Пример работает, у вас, видимо конфликт скриптов.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

lalalag

  • Захожу иногда
  • 162
  • 0 / 3
Чуть-чуть изменил последнюю строку.
Пример работает, у вас, видимо конфликт скриптов.

не могли бы вы посмотреть на сайте в чем проблема? плз. можно по скапу связаться с вами. за оплату допилить эту мелочь?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Не открываются некоторые карточки товаров

Автор Vatag

Ответов: 5
Просмотров: 4176
Последний ответ 04.12.2022, 13:26:04
от Evgen Kulibin
Вывод всех товаров на Главную

Автор Akeksandr

Ответов: 1
Просмотров: 2738
Последний ответ 28.12.2021, 14:48:23
от Akeksandr
Вывод модуля рекомендуемых товаров

Автор sergspb

Ответов: 0
Просмотров: 2736
Последний ответ 06.11.2020, 09:59:01
от sergspb
Как убрать показ дополнительного изображения в категории товаров?

Автор ElenaNova

Ответов: 0
Просмотров: 2903
Последний ответ 22.04.2020, 13:13:27
от ElenaNova
Вывод краткого описания товара в корзине

Автор PavelK

Ответов: 2
Просмотров: 3191
Последний ответ 04.04.2020, 16:34:10
от PavelK