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

Fanamura

  • Осваиваюсь на форуме
  • 21
  • 0 / 0
Думаю, кто тусует на Хабре поймут сразу. Хоробы реализовать для зарегистрированных такую фичу: если за время отсутствия человека добавились новые комментарии то они каким-либо образом выделяются :) Если использовать древо как форму вывода комментариев, то получится очень и очень удобно
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Re: Непрочитанные комментарии
« Ответ #1 : 12.04.2009, 22:59:21 »
Ну по идее это можно реализовать не затрагивая код компонента - на уровне шаблона комментариев посредством использования cookies. Т.е. при открытии какой-либо страницы с комментариями, прямо в шаблоне устанавливать время последнего просмотра. А при отображении - для комментариев, у которых дата больше, чем считанное из cookie значение, добавлять некий дополнительный стиль CSS.
*

abbyevg

  • Захожу иногда
  • 82
  • 6 / 0
  • эвилпанда
Re: Непрочитанные комментарии
« Ответ #2 : 30.11.2010, 09:41:12 »
Хотел узнать, не реализовывал ли кто?

Smart, там скорее не даты а количество просмотренных комментариев хранить нужно.
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Re: Непрочитанные комментарии
« Ответ #3 : 30.11.2010, 12:35:43 »
Smart, там скорее не даты а количество просмотренных комментариев хранить нужно.
даты - проще, ибо нет никакого 100% способа узнать, просмотрел ли пользователь комментарий или нет, а вот предположить, что если он на этой странице был такого-то числа, то он прочитал все, что там есть - можно.
*

abbyevg

  • Захожу иногда
  • 82
  • 6 / 0
  • эвилпанда
Re: Непрочитанные комментарии
« Ответ #4 : 30.11.2010, 13:33:51 »
Мы немного о разных вещах говорим. Отмечать новые комментарии при их просмотре тоже интересная идея, но наиболее востребована, как мне кажется и что подтверждено просьбами пользователей, функция отметки о наличии новых комментариев при просмотре материалов в виде блога (списка) (либо при открытии главной страницы компонента MyBlog).


Чтобы не трогать базу, я пробую идею с куками.
При просмотре списка материалов достаточно просто считать куки и добавить нужный стиль в темплейт. А вот сохранить куку (при просмотре материала) не так просто. Дело в том, что в самом шаблоне этого сделать нельзя (кука должна сохраняться до вывода контента в браузер). Поэтому, как вариант, я предлагаю использовать к примеру, системный плагин JComments (раз уж это имеет дело к jcomments).

Хотел бы спросить у Сергея лучшее место в плагине для того, чтобы установить эту куку. Разумеется, в этом месте кода желательно получить данные о:
id пользователя
названии объекта (компонента)
id материала

Очень жду ответа
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Re: Непрочитанные комментарии
« Ответ #5 : 30.11.2010, 14:02:15 »
Дело в том, что в самом шаблоне этого сделать нельзя (кука должна сохраняться до вывода контента в браузер).
Ну так процесс формирования страницы и вывода ее в браузер - разные процессы, и никаких проблем установить cookies из шаблона сайта или шаблона комментариев нет. Тут другая проблема, что если включено кэширование, то код формирования страницы вызваться не будет, и соотв. делать это на уровне шаблона сайта не получится, а вот на уровне шаблона комментариев (например в tpl_tree.php) - можно.
*

abbyevg

  • Захожу иногда
  • 82
  • 6 / 0
  • эвилпанда
Re: Непрочитанные комментарии
« Ответ #6 : 01.12.2010, 19:10:05 »
Спасибо Сергей, все получилось. Правда, пришлось обработать тот случай, если сам пользователь добавляет комментарий. Тогда счетчик просмотренных комментариев (если комментарий не клеится к предыдущему) должен увеличиться.

Я предлагаю включить эту функциональность в стандарт. Все исправления (их совсем немного) могу скинуть сюда.

*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Re: Непрочитанные комментарии
« Ответ #7 : 01.12.2010, 19:58:27 »
Скинь на почту, я посмотрю, обсудим и может быть включу, если не возникнет каких-то принципиальных (на мой взгляд) проблем. А можно в принципе и тут опубликовать, в принципе без разницы.
*

abbyevg

  • Захожу иногда
  • 82
  • 6 / 0
  • эвилпанда
Re: Непрочитанные комментарии
« Ответ #8 : 01.12.2010, 21:58:06 »
Сергей, спасибо что откликнулся.

Запоминаем количество просмотренных пользователей комментариев:
файл шаблона tpl_tree.php, функция render(), добавить в начало
 (время жизни и название куки, возможно, требует пересмотра)
Код
		$object_id = $this->getVar('comment-object_id');
$object_group = $this->getVar('comment-object_group');

$count = JComments::getCommentsCount($object_id, $object_group);
$user =& JFactory::getUser();

if ($user->id != 0) setcookie ($user->id.$object_group.$object_id, $count, time() + 3600*24*60,'/');




Если пользователь добавляет комментарий, учитываем это
jcomments.ajax.php, function addComment, строка 520 добавить:

Код
		if ($comment->userid != 0) setcookie ($comment->userid.$comment->object_group.$comment->object_id, $count, time() + 3600*24*60,'/'); 



У меня настроен свой вывод комментариев, но скорее всего для стандартного отображения изменяем tpl_links.php, function getCommentsLink()
строка 92, заменяем
Код


switch($style) {
case -1:
return '<span class="' . $css . '">' . $text . '</span>';
break;
default:

return '<a href="' . $link . '#comments" class="' . $css . '">' . $text . '</a>';
break;
}

на

Код

$object_id = $this->getVar('comment-object_id');
$object_group = $this->getVar('comment-object_group');

$user =& JFactory::getUser();

if ($user->id != 0) {
$sessioncount=(int) $_COOKIE[$user ->id.$object_group.$object_id];
$css .= ((int)$count > $sessioncount)? ' newcomments' : '';
$newcommentsTitle = ((int)$count > $sessioncount)? JTEXT::_('NEW COMMENTS') : JTEXT::_('NO NEW COMMENTS'); //для добавления в титл ссылки
}

switch($style) {
case -1:
return '<span class="' . $css .$newcomments '"  title=".$newcommentsTitle.">' . $text . '</span>';
break;
default:

return '<a href="' . $link . '#comments" class="' . $css . '" title=".$newcommentsTitle.">' . $text . '</a>';
break;
}

Последнее - не проверял, но должно работать.
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Re: Непрочитанные комментарии
« Ответ #9 : 02.12.2010, 15:46:47 »
Вместо строчки:
Код
		$count = JComments::getCommentsCount($object_id, $object_group);
лучше сделать вот так:
Код
		$count = $this->getVar('comments-count', 0);

И еще, если убрать из имени cookie идентификатор пользователя, то это все будет работать и для гостей. Мне кажется, что это будет правильнее.
*

abbyevg

  • Захожу иногда
  • 82
  • 6 / 0
  • эвилпанда
Re: Непрочитанные комментарии
« Ответ #10 : 02.12.2010, 17:46:42 »
Спасибо за поправку! Если убрать идентификатор, то разные пользователи сайта, заходящие с одного браузера , будут видеть ошибочный результат.
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Re: Непрочитанные комментарии
« Ответ #11 : 02.12.2010, 18:19:21 »
Согласен, идентификатор оставим, а вот проверку, на авторизованного пользователя - уберем. Тогда 2 разных авторизованных пользователя в одном браузере увидят разное, а гости - сами виноваты.
*

abbyevg

  • Захожу иногда
  • 82
  • 6 / 0
  • эвилпанда
Re: Непрочитанные комментарии
« Ответ #12 : 02.12.2010, 21:59:43 »
И все-таки, это может поставить гостей в тупик  ::)  :dry:
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Re: Непрочитанные комментарии
« Ответ #13 : 03.12.2010, 14:00:24 »
И все-таки, это может поставить гостей в тупик  ::)  :dry:
ну гостей многое может поставить в тупик, например тот факт, что введенное имя и e-mail сохраняются в cookies... но за 2 года жалоб на это можно сказать не было - один раз только спросили как это отключить.
*

abbyevg

  • Захожу иногда
  • 82
  • 6 / 0
  • эвилпанда
Re: Непрочитанные комментарии
« Ответ #14 : 03.12.2010, 18:24:30 »
Я скорее не про сам факт хранения куки, а про изменение стиля на их основе. Вот сел ты за компьютер, открыл сайт, а там у половины материалов стоит подсветка "новых комментариев", при том, что ты не прошел авторизацию.
*

abbyevg

  • Захожу иногда
  • 82
  • 6 / 0
  • эвилпанда
Re: Непрочитанные комментарии
« Ответ #15 : 07.02.2011, 21:57:11 »
Уточнение, использование переменной, имя которой начинается с цифры нежелательно. К тому же, судя по всему, для этого лучше использовать массив.
*

oocamba

  • Осваиваюсь на форуме
  • 10
  • 0 / 0
Re: Непрочитанные комментарии
« Ответ #16 : 15.07.2012, 13:28:36 »
Скажите, а в самом шаблоне тогда что поменять, в файле category_item? Сейчас так выводится
Код
<div style="width:650px; margin-left:0px; margin-top:8px; float:left;">	
<td class="sectiontableheader">
<font color="#6D7C82"><strong>Комментариев:</strong></font>
</td>

<td>
<font color="#FE7098"><strong>
        <?php
            global $mainframe;
                $comments = $mainframe->getCfg('absolute_path'). '/components/com_jcomments/jcomments.php';
                if (file_exists($comments))
                    {
                      require_once($comments);
                      $count = JComments::getCommentsCount($this->item->id, 'com_k2');
                      echo $count;
                      }
        ?>
</strong></font>
</td>
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Возможность загрузки изображений в комментарии

Автор luzzzana

Ответов: 21
Просмотров: 11309
Последний ответ 11.09.2020, 07:03:12
от AlexB
Древовидные комментарии. Порядок отображения

Автор smart

Ответов: 69
Просмотров: 52871
Последний ответ 29.11.2018, 14:35:59
от igorsuccess
JComments + Вконтакте комментарии...

Автор AlexanderKiselev

Ответов: 67
Просмотров: 38961
Последний ответ 30.03.2014, 00:09:53
от Opsan
Выбрать все комментарии без ответов

Автор eozee

Ответов: 0
Просмотров: 2390
Последний ответ 28.11.2012, 11:45:04
от eozee
Видят ли комментарии ПС?

Автор Garun

Ответов: 59
Просмотров: 33100
Последний ответ 02.11.2012, 13:03:40
от ChaosHead