Closed mediafoks closed 10 months ago
Странно... Проверка на индексацию в плагине есть. https://github.com/sergeytolkachyov/WT-Content-Image-Gallery/blob/bd3c3ca75f0f775cdf3876b468a2cfe1bc39685f/wtcontentimagegallery/src/Extension/Wtcontentimagegallery.php#L73C7-L73C7 Можете колстак ошибки скинуть?
Странно... Проверка на индексацию в плагине есть. https://github.com/sergeytolkachyov/WT-Content-Image-Gallery/blob/bd3c3ca75f0f775cdf3876b468a2cfe1bc39685f/wtcontentimagegallery/src/Extension/Wtcontentimagegallery.php#L73C7-L73C7 Можете колстак ошибки скинуть?
А колстак ,где его взять?
Прошу прощение за качество видео и х1.5 скорость, иначе на гитхаб не умещается.
Я понял где начинается проблема.
Вот смотрите. У меня есть custom field типа "Editor". В материале, в это поле я вставляю код галереи {gallery}...{/gallery}, на сайте галерея выводится, всё работает прекрасно.
Та вот, при таком раскладе индексация выдаёт ошибку. Но если просто временно это поле снять с публикации, то индексация проходит отлично. Иными словами галерея в custom_field - editor что-то барахлит.
Очень интересно )) Нужно смотреть с каким контекстом запускается индексация полей. ЧуднО )
Причем в параметрах поля выбрано "Недоступно для поиска". Если поставить "Доступно", то все равно ошибка индексации. И так, и так, разницы никакой.
А попробуйте туда любой другой контент плагин вставить, вместо моего. Видео с ютуба какое-нибудь с помощью AllVideos - будет такая же ошибка?
Начал копать дальше. Простите, оказалось, что это мой косяк. Со стандартным шаблоном галереи всё работает прекрасно. Но у меня свой шаблон, и вот с ним какая-то проблема. В своем шаблоне из БД я получаю заголовок материала ,чтобы вставить его в ALT картинки, только и всего. Может подскажете где я накосячил?
/**
* @package WT Content Image gallery
* @version 1.0.0
* @Author Sergey Tolkachyov, https://web-tolk.ru
* @copyright Copyright (C) 2023 Sergey Tolkachyov
* @license GNU/GPL http://www.gnu.org/licenses/gpl-3.0.html
* @since 1.0.0
*/
use Joomla\CMS\HTML\HTMLHelper;
defined('_JEXEC') or die;
/**
* Note! This is a demo layout that shows how to access the list of images in PHP.
* It is not intended for use on websites and serves simply as a sample.
*
* @var $context string Like 'com_content.article'
* @var $images array Images array
* @var $iterator int regex iterator - 0, 1, 2 etc. Shortcode number
*
* For your images gallery layouts your can make unique id or data-attributes
* combining $context and $iterator.
* For example: <img src="'.$image['img_src'].'" id="'.$context.'-'.$iterator.'" />
* You will receive: <img src="images/you-image.webp" id="com_content.article-0" />
*/
/**
* @var $unique string Unique string for unique id.
*/
// Достаем данные материала из базы данных
use Joomla\CMS\Factory;
$db = Factory::getContainer()->get('DatabaseDriver');
if ($context === 'com_contact.contact') {
$query = $db
->getQuery(true)
->select('name')
->from('#__contact_details')
->where('id' . ' = ' . Factory::getApplication()->input->get('id'));
} else {
$query = $db
->getQuery(true)
->select('title')
->from('#__content')
->where('id' . ' = ' . Factory::getApplication()->input->get('id'));
};
$db->setQuery($query);
$current_title = $db->loadResult();
$page_title = Factory::getDocument()->getTitle();
// если есть заголовок материала, то выводим его, иначе выводим заголовок страницы
$img_alt = $current_title ? $current_title : $page_title;
// END Достаем данные материала из базы данных
$unique = str_replace(['-', '.'], '_', $context) . '_' . $iterator;
?>
<div class="gallery gallery-length-<?php echo count($images); ?>">
<?php foreach (array_reverse($images) as $image) : ?>
<a href="<?php echo $image['img_src']; ?>" target="_blank" title="<?php echo $img_alt; ?>" data-lightgallery="photo">
<?php
$img_attribs = [
'loading' => 'lazy',
'decoding' => 'async',
];
echo HTMLHelper::image($image['img_src'], $img_alt, $img_attribs);
?>
</a>
<?php endforeach; ?>
</div>```
Не надо напрямую из базы дёргать. Нужно брать из модели (Model - MVC), тогда лишнего запроса в базу не будет и работать всё будет нормально. Посмотрите, как я в плагине сео шаблонов это делаю
Нейспейсы только нужные подключить
Спасибо! Заголовок страницы я получил таким образом:
use Joomla\CMS\Factory;
$app = Factory::getApplication();
$model = $app->bootComponent('com_content')->getMVCFactory()->createModel('Article', 'Site', ['ignore_request' => false]);
$article = $model->getItem($id);
$article_title = $article->title;
Но вот теперь при индексации получаю ошибку: "Call to undefined method Joomla\CMS\Application\AdministratorApplication::getParams()"
Индексация идёт из Приложения Администратора, а не Сайта. id нужно откуда-то брать...
Огромное спасибо за помощь. Больше у меня ума не хватает, оставлю как есть.
Начал копать дальше. Простите, оказалось, что это мой косяк. Со стандартным шаблоном галереи всё работает прекрасно. Но у меня свой шаблон, и вот с ним какая-то проблема. В своем шаблоне из БД я получаю заголовок материала ,чтобы вставить его в ALT картинки, только и всего. Может подскажете где я накосячил?
/** * @package WT Content Image gallery * @version 1.0.0 * @Author Sergey Tolkachyov, https://web-tolk.ru * @copyright Copyright (C) 2023 Sergey Tolkachyov * @license GNU/GPL http://www.gnu.org/licenses/gpl-3.0.html * @since 1.0.0 */ use Joomla\CMS\HTML\HTMLHelper; defined('_JEXEC') or die; /** * Note! This is a demo layout that shows how to access the list of images in PHP. * It is not intended for use on websites and serves simply as a sample. * * @var $context string Like 'com_content.article' * @var $images array Images array * @var $iterator int regex iterator - 0, 1, 2 etc. Shortcode number * * For your images gallery layouts your can make unique id or data-attributes * combining $context and $iterator. * For example: <img src="'.$image['img_src'].'" id="'.$context.'-'.$iterator.'" /> * You will receive: <img src="images/you-image.webp" id="com_content.article-0" /> */ /** * @var $unique string Unique string for unique id. */ // Достаем данные материала из базы данных use Joomla\CMS\Factory; $db = Factory::getContainer()->get('DatabaseDriver'); if ($context === 'com_contact.contact') { $query = $db ->getQuery(true) ->select('name') ->from('#__contact_details') ->where('id' . ' = ' . Factory::getApplication()->input->get('id')); } else { $query = $db ->getQuery(true) ->select('title') ->from('#__content') ->where('id' . ' = ' . Factory::getApplication()->input->get('id')); }; $db->setQuery($query); $current_title = $db->loadResult(); $page_title = Factory::getDocument()->getTitle(); // если есть заголовок материала, то выводим его, иначе выводим заголовок страницы $img_alt = $current_title ? $current_title : $page_title; // END Достаем данные материала из базы данных $unique = str_replace(['-', '.'], '_', $context) . '_' . $iterator; ?> <div class="gallery gallery-length-<?php echo count($images); ?>"> <?php foreach (array_reverse($images) as $image) : ?> <a href="<?php echo $image['img_src']; ?>" target="_blank" title="<?php echo $img_alt; ?>" data-lightgallery="photo"> <?php $img_attribs = [ 'loading' => 'lazy', 'decoding' => 'async', ]; echo HTMLHelper::image($image['img_src'], $img_alt, $img_attribs); ?> </a> <?php endforeach; ?> </div>```
Можно класть рядом с картинками labels.txt посмотрите по документации как он называться должен. И туда альты писать.
Можно класть рядом с картинками labels.txt посмотрите по документации как он называться должен. И туда альты писать.
Да, можно и я так делаю, всё отлично работает. Но не всегда это удобно. Вот представьте, новостной сайт, куча статей, в статье бывает галерея на 50 фото, а то и больше. В таком случае вовсе не требуется прописывать ALT для каждой фотографии. Это неудобно. Гораздо проще всем фото указать в качестве ALT - заголовок материала. Что я и пытался сделать. Как видно, не очень получилось.
Вот бы в настройках галереи была возможность указать единый ALT для всех фото, типа {gallery tmpl=default alt=блабла}
Либо в labels.txt написать что-то типа *|блабла
Вот бы в настройках галереи была возможность указать единый ALT для всех фото, типа
{gallery tmpl=default alt=блабла}
Либо в labels.txt написать что-то типа*|блабла
Это будет неправильно с точки зрения СЕО. Атрибут alt должен описывать данную конкретную картинку. Причем там не ключевики нужно писать, а конкретно то, что на ней изображено. Описывать картинку так, как будто незрячему описываете или обучаете ИИ.
Для этой картинки правильный alt будет не "Заказать торт на день рождения в Москве от ХХХХ рублей", а "бисквитный торт крупным планом, политый коричневым кремом и обильно украшенный ягодами малиной, голубикой, ещё какой-то ягодой. добавлено немного зефира. На шоколадной пластинке белая надпись С днём рождения."
Joomla 5 чистая, PHP 8.2.8, MySQL 8. Установлен плагин WT Content Image Gallery. При индексации выдается ошибка "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3". Оказалось, что из-за плагина WT Content Image Gallery. Отключил плагин, индексация заработала. Проиндексировал, потом включил плагин опять. PS: плагин - бомба. Спасибо за разработку.