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

ProtectYourSite

  • Живу я здесь
  • 2368
  • 139 / 4
  • Безопасность вебсайтов
Не знаю, в какой раздел лучше, если что перенесите.
Итак, мое решение проблем с полями Publisher, Image, Даты публикаций/модификаций и непонятного mainEntityOfPage.
На основе шаблона Protostar
Редактируем файл шаблона /html/com_content/article/default.php
В область php где-то после defined('_JEXEC') or die; и перед ?> вставляем код обработки изображений. Внимание! Изображения у меня находятся в самой статье, если у вас не так, то стоит модифицировать в этом направлении.
Сам код:
Код
$myimage=$this->item->introtext;
preg_match_all('/<img[^>]+>/i', $myimage, $result);
preg_match_all('/(src)=("[^"]*")/i',$result[0][0], $img);
$timag=$img[2][0];
if(!empty($timag)){
 $timage=str_replace("\"","",$timag);}
 else
{
  $timage= 'images/logo.png';
}
$timage=JURI::base().$timage;
$size = getimagesize($timage);
Здесь же можно добавить OpenGraph разметку для соцсетей:
Код
$doc = JFactory::getDocument();
$doc->addCustomTag( '
<meta property="og:locale" content="ru_RU">
<meta property="og:type" content="article">
<meta property="og:title" content="'.$this->escape($this->item->title).'">
<meta property="og:site_name" content="Защита сайтов ProtectYourSite">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:site" content="@Protect_Site">
<meta name="twitter:creator" content="@Protect_Site">
<meta property="og:url" content="'.JURI::current().'">
<meta property="og:description" content="'.$doc->getDescription().'">
<meta property="og:image" content="'.$timage.'">
');
Необходимые поля надо заменить на свои значения.
Дальше ищем, где у нас объявлен блок микроразметки  itemtype="http://schema.org/Article"
Я вставлял после
Код
	<meta itemprop="inLanguage" content="<?php echo ($this->item->language === '*')? JFactory::getConfig()->get('language') : $this->item->language; ?>" />
И вставляем после следующие блоки
Код
	<meta itemscope itemprop="mainEntityOfPage"  itemtype="https://schema.org/WebPage" itemid="<?php echo JURI::current(); ?>"/>
<meta itemprop="dateModified" content="<?php echo $this->item->modified; ?>">
              <meta itemprop="datePublished" content="<?php echo $this->item->publish_up; ?>">
<span style="display:none;" itemprop="image" itemscope itemtype="https://schema.org/ImageObject">
<img itemprop="url" src="<?php echo $timage;?>">
<meta itemprop="image" content="<?php echo $timage;?>">
<meta itemprop="width" content="<?php echo $size[0];?>">
<meta itemprop="height" content="<?php echo $size[1];?>">
</span>
<span itemprop="publisher" itemscope itemtype="https://schema.org/Organization">
<meta itemprop="name" content="Защита сайтов ProtectYourSite">
    <span itemprop="logo" itemscope itemtype="https://schema.org/ImageObject">
        <img itemprop="url" src="https://protectyoursite.ru/images/logo.png" style="display:none;"/>
        <meta itemprop="image" content="https://protectyoursite.ru/images/logo.png">
        <meta itemprop="width" content="141">
        <meta itemprop="height" content="160">
    </span>
</span>
Аналогично заменяя на свои значения в нужных местах. После этого сохраняем, очищаем кеш и смотрим полученный результат. Если всё правильно, то мы должны успешно проходить валидацию микроразметки

Стал проверять микроразметку по блогу, в итоге вылезло:
Необходимо указать значение для поля headline.
Необходимо указать значение для поля image.
Необходимо указать значение для поля publisher.

Рекомендуется заполнять поле mainEntityOfPage. Укажите значение, если оно известно.

Решил я это всё на основании того же стандартного шаблона и последней Joomla так:
Создаем в папке шаблона файл /html/layouts/joomla/content/blog_style_default_item_title.php и вставляем туда следующий код:

Код
<?php
/**
 * @package     Joomla.Site
 * @subpackage  Layout
 *
 * [member=126442]copyright[/member]   Copyright (C) 2005 - 2016 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('JPATH_BASE') or die;

// Create a shortcut for params.
$params = $displayData->params;
$canEdit = $displayData->params->get('access-edit');
JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html');
$myimage=$displayData->introtext;
preg_match_all('/<img[^>]+>/i', $myimage, $result);
preg_match_all('/(alt|title|src)=("[^"]*")/i',$result[0][0], $img);
$timag=$img[2][1];
if(!empty($timag)){
 $timage=str_replace("\"","",$timag);}
 else
{
  $timage= 'images/logo.png';
}
$timage=JURI::base().$timage;
$size = getimagesize($timage);
?>

<?php if ($params->get('show_title') || $displayData->state == 0 || ($params->get('show_author') && !empty($displayData->author ))) : ?>
<div class="page-header">
<meta itemscope itemprop="mainEntityOfPage"  itemtype="https://schema.org/WebPage" itemid="<?php echo JRoute::_(
ContentHelperRoute::getArticleRoute($displayData->slug, $displayData->catid, $displayData->language)
); ?>"/>
<span style="display:none;" itemprop="image" itemscope itemtype="https://schema.org/ImageObject">
<img itemprop="url" src="<?php echo $timage;?>">
<meta itemprop="image" content="<?php echo $timage;?>">
<meta itemprop="width" content="<?php echo $size[0];?>">
<meta itemprop="height" content="<?php echo $size[1];?>">
</span>
<span itemprop="publisher" itemscope itemtype="https://schema.org/Organization">
<meta itemprop="name" content="Защита сайтов ProtectYourSite">
    <span itemprop="logo" itemscope itemtype="https://schema.org/ImageObject">
        <img itemprop="url" src="https://protectyoursite.ru/images/logo.png" style="display:none;"/>
        <meta itemprop="image" content="https://protectyoursite.ru/images/logo.png">
        <meta itemprop="width" content="141">
        <meta itemprop="height" content="160">
    </span>
</span>
<?php if ($params->get('show_title')) : ?>
<h2 itemprop="headline">
<?php if ($params->get('link_titles') && ($params->get('access-view') || $params->get('show_noauth', '0') == '1')) : ?>
<a href="<?php echo JRoute::_(
ContentHelperRoute::getArticleRoute($displayData->slug, $displayData->catid, $displayData->language)
); ?>" itemprop="url">
<?php echo $this->escape($displayData->title); ?>
</a>
<?php else : ?>
<?php echo $this->escape($displayData->title); ?>
<?php endif; ?>
</h2>
<?php endif; ?>

<?php if ($displayData->state == 0) : ?>
<span class="label label-warning"><?php echo JText::_('JUNPUBLISHED'); ?></span>
<?php endif; ?>

<?php if (strtotime($displayData->publish_up) > strtotime(JFactory::getDate())) : ?>
<span class="label label-warning"><?php echo JText::_('JNOTPUBLISHEDYET'); ?></span>
<?php endif; ?>

<?php if ((strtotime($displayData->publish_down) < strtotime(JFactory::getDate()))
&& $displayData->publish_down != JFactory::getDbo()->getNullDate()) : ?>
<span class="label label-warning"><?php echo JText::_('JEXPIRED'); ?></span>
<?php endif; ?>
</div>
<?php endif; ?>

Заменив логотип на своё значение.
После этих манипуляций блог стал проходить проверку микроразметки

Если есть комментарии по разметке, пишите)
« Последнее редактирование: 05.08.2018, 21:58:01 от ProtectYourSite »
*

Филипп Сорокин

  • Завсегдатай
  • 1918
  • 160 / 4
  • разработчик.москва
Это чё за комбаин? Фреймворком у продвинутых мастеров ныне пользоваться не в моде?
*

ChaosHead

  • Гуру
  • 5242
  • 451 / 13
Спасибо, полезно на самом деле, т.к. у Joomla уже неправильная разметка, после того как Google ввёл новые изменения.
Кстати говоря больше всего бесит, что картинки теперь требуется размечать так:

Цитировать
<span style=display:none; itemprop=image itemscope itemtype=https://schema.org/ImageObject>
<img itemprop=url src=https://yoursite.ru/images/news/Google_recaptcha_exploit.jpg>
<meta itemprop=image content=https://yoursite.ru/images/news/Google_recaptcha_exploit.jpg>

я не понимаю кому это нужно...

Кстати аккуратнее с display:none в разметке, можно схлопотать санкции - она перестанет отображаться для сайта и таких примеров не мало.
*

Missile

  • Завсегдатай
  • 1116
  • 90 / 1
Я после тщетных попыток угодить и Яндексу, и Гуглю просто забила на это дело.
Мне кажется. вебмастерам пора устраивать акции сопротивления, потому что веб идёт куда-то не туда. Если бы, к примеру, все разом отказались от микроразметки, то в мозгу у поисковиков (точнее, у тех, кто за ними стоит) наверняка бы что-то щёлкнуло.
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
Ну я немного попарился и сделал и для Яндекс и для Google.  
Насчёт дисплей ноне.  Я просто сделал класс со стилем.
Display block
Width 0
Height 0
Font-size 0
Line-height 0
Overflow hidden
Да и все.
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

Vasiliy111

  • Захожу иногда
  • 248
  • 5 / 0
А если шаблон используется beez-3. В этом шаблоне нет папки content. Куда в этом случае сбрасывать blog_style_default_item_title.php?

Я уже и в корень папки Joomla ложил, и создавал отдельную папку content - ничего не меняется
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
Создаем в папке шаблона файл /html/layouts/joomla/content/blog_style_default_item_title.php
Папка HTML есть в шаблоне, если нет- создайте
*

Vasiliy111

  • Захожу иногда
  • 248
  • 5 / 0
В шаблоне по указанному пути есть: /html/layouts/joomla/system/message.php

Я ж говорю сбрасывал и в папку Joomla и в ней создавал папку content никаких изменений
*

ProtectYourSite

  • Живу я здесь
  • 2368
  • 139 / 4
  • Безопасность вебсайтов
автора выставлено показывать в настройках материалов?
*

Vasiliy111

  • Захожу иногда
  • 248
  • 5 / 0
Да, автор есть.

Еще интересный момент, добавляю в /html/com_content/article/default.php код:
 
Цитировать
$myimage=$this->item->introtext;
preg_match_all('/<img[^>]+>/i', $myimage, $result);
preg_match_all('/(alt|title|src)=("[^"]*")/i',$result[0][0], $img);
$timag=$img[2][1];
if(!empty($timag)){
 $timage=str_replace("\"","",$timag);}
 else
{
  $timage= 'images/logo.png';
}
$timage=JURI::base().$timage;
$size = getimagesize($timage);

Вылазит ошибка
Warning: getimagesize(http://moy-sayt/kak vyrastit arbuz na balkone): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /templates/beez3/html/com_content/article/default.php on line 24

в строке 24 такой код:
$size = getimagesize($timage);




Причем на хостинге все изображения проименовыны через дефиз, т.е. kak-vyrastit-arbuz-na-balkone.jpg

В исходном коде страницы такая же ерунда
Цитировать
<span style="display:none;" itemprop="image" itemscope itemtype="https://schema.org/ImageObject">
<img itemprop="url" src="http://moy-sayt/kak vyrastit arbuz na balkone">
<meta itemprop="image" content="http://moy-sayt/kak vyrastit arbuz na balkone">
<meta itemprop="width" content="">
<meta itemprop="height" content="">
</span>
« Последнее редактирование: 31.07.2018, 21:14:25 от Vasiliy111 »
*

Mehanick

  • Давно я тут
  • 846
  • 5 / 0
в к2 уже включена вся разметка
*

Vasiliy111

  • Захожу иногда
  • 248
  • 5 / 0
Если установить данный код под строкой <meta itemprop="inLanguage" content=

Код
<meta itemscope itemprop="mainEntityOfPage"  itemtype="https://schema.org/WebPage" itemid="<?php echo JURI::current(); ?>"/>
<meta itemprop="dateModified" content="<?php echo $this->item->modified; ?>">
              <meta itemprop="datePublished" content="<?php echo $this->item->publish_up; ?>">
<span style="display:none;" itemprop="image" itemscope itemtype="https://schema.org/ImageObject">
<img itemprop="url" src="<?php echo $timage;?>">
<meta itemprop="image" content="<?php echo $timage;?>">
<meta itemprop="width" content="<?php echo $size[0];?>">
<meta itemprop="height" content="<?php echo $size[1];?>">
</span>
<span itemprop="publisher" itemscope itemtype="https://schema.org/Organization">
<meta itemprop="name" content="Защита сайтов ProtectYourSite">
    <span itemprop="logo" itemscope itemtype="https://schema.org/ImageObject">
        <img itemprop="url" src="https://protectyoursite.ru/images/logo.png" style="display:none;"/>
        <meta itemprop="image" content="https://protectyoursite.ru/images/logo.png">
        <meta itemprop="width" content="141">
        <meta itemprop="height" content="160">
    </span>
</span>

Валидатор микроразметки не ругается (ошибок нет) но считаю что в моем случае это условие не совсем правильно:

Код
<img itemprop="url" src="<?php echo $timage;?>">
<meta itemprop="image" content="<?php echo $timage;?>">
<meta itemprop="width" content="<?php echo $size[0];?>">
<meta itemprop="height" content="<?php echo $size[1];?>">

Так как в исходном коде в строках:

<img itemprop="url" - "отображается ссылка на главную страницу"
<meta itemprop="image" - пусто
<meta itemprop="width" - пусто
<meta itemprop="height" - пусто

Помогите решить проблему. Думаю решение уже совсем близко.
*

ProtectYourSite

  • Живу я здесь
  • 2368
  • 139 / 4
  • Безопасность вебсайтов
А картинки есть в материале ? Они в тексте материала прописаны ? И лучше привести полный код файла.
*

Vasiliy111

  • Захожу иногда
  • 248
  • 5 / 0
Да картинки в материале (статье) есть и не одна. Выводятся обычным способом <img src="" alt="" " title="" />

А какой именно код файла нужен default.php?
*

ProtectYourSite

  • Живу я здесь
  • 2368
  • 139 / 4
  • Безопасность вебсайтов
Где вставляли микроразметку
*

Vasiliy111

  • Захожу иногда
  • 248
  • 5 / 0
Правил шаблон/html/com_content/article/default.php

Спойлер
[свернуть]

С данным кодом в исходном файле страницы имею:

Код
<span style="display:none;" itemprop="image" itemscope itemtype="https://schema.org/ImageObject">
<img itemprop="url" src="/">
<meta itemprop="image" content="">
<meta itemprop="width" content="">
<meta itemprop="height" content="">
</span>
*

ProtectYourSite

  • Живу я здесь
  • 2368
  • 139 / 4
  • Безопасность вебсайтов
Так надо допиливать блок с изображением, которое у вас выдавало ошибку. Пробуйте после:
Код
preg_match_all('/<img[^>]+>/i', $myimage, $result); 
preg_match_all('/(alt|title|src)=("[^"]*")/i',$result[0][0], $img);
добавить
Код
var_dump($result);var_dump($img);die();
и смотреть, что приходит
*

Vasiliy111

  • Захожу иногда
  • 248
  • 5 / 0
Нееее, так вообще белый экран и отблик изображения

Код
array(1) { [0]=> array(1) { [0]=> string(295) "


*

Vasiliy111

  • Захожу иногда
  • 248
  • 5 / 0
Спасибо ProtectYourSite за помощь с микроразметкой. Всем у кого будут проблемы обращайтесь к нему.
*

kern.USR

  • Давно я тут
  • 827
  • 68 / 1
Всем у кого будут проблемы обращайтесь к нему.
Звучит, как проклятие  :dry:
*

Vasiliy111

  • Захожу иногда
  • 248
  • 5 / 0
А что у Google изменились какие то требования? Обнаружил что появилось две ошибки (раньше не было). На сайте изменений ни каких не происходило.

1.BreadcrumbList (хлебные крошки) - item   Необходимо указать значение для поля item.

2. Article - Атрибут logo.height имеет недопустимое значение.



*

ProtectYourSite

  • Живу я здесь
  • 2368
  • 139 / 4
  • Безопасность вебсайтов
Та же фигня, баг зафиксировали и обещали исправить.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Архив статей – в чём суть?

Автор Gerostrat

Ответов: 3
Просмотров: 929
Последний ответ 14.03.2024, 21:03:48
от sivers
Перестал работать просмотр блога категории

Автор selmax

Ответов: 1
Просмотров: 816
Последний ответ 01.12.2022, 21:41:07
от NewUsers
Массовый импорт статей из Excel в Joomla

Автор koskanalya

Ответов: 1
Просмотров: 966
Последний ответ 05.11.2022, 14:15:34
от antony2606
Как получить ссылку на материал для использования в макете блога?

Автор Chigolberi

Ответов: 19
Просмотров: 5910
Последний ответ 10.06.2022, 00:27:40
от Леон
Навигация внутри &quot;Блога категории&quot;

Автор RomanA

Ответов: 8
Просмотров: 676
Последний ответ 12.04.2022, 15:46:01
от marksetter