WebTolkRu
99 subscribers
618 photos
72 videos
2 files
643 links
Joomla-разработчик. Контрибьютер ядра Joomla. https://web-tolk.ru. Разработка Joomla на заказ. Также пишу в @JoomlaFeed.
@sergeytolkachyov Хабр: https://habr.com/ru/users/sergeytolkachyov/posts/
Download Telegram
👩‍💻 Совет по Joomla: использовать HTMLHelper для рендера ссылок, изображений и т.д.
При работе с кодом хорошим тоном разработки считается наглядность кода, которая обеспечивает лёгкость его восприятия. Обычно это называют "чистый, читаемый код". Согласитесь, понимать следующую запись не всегда бывает удобно:
echo '<a href="index.php?option='.$option.'&view='.$view.'&id='.$id.'" target="'.$target.'">'.$link_title.'</a>';

или пример из стандартного шаблона JoomShopping:
<a class="lightbox" id="main_image_full_<?php print $image->image_id?>" href="<?php print $this->image_product_path?>/<?php print $image->image_full;?>" <?php if ($k!=0){?>style="display:none"<?php }?> title="<?php print htmlspecialchars($image->img_title)?>">

Наглядностью и лёгкостью чтения, к сожалению, и не пахнет.

В API Joomla есть довольно богатый инструмент - класс HTMLHelper. В нём довольно много полезных фич, приведу пример для рендера ссылок как самого простого элемента. Метод HTMLHelper::link() принимает 3 аргумента:
- $url - формируем его программно заранее и передаем как параметр
- $text - собственно текст ссылки. Это может быть любое HTML-содержимое: картинка, код и т.д. - как в вёрстке.
- $attribs - самые разные атрибуты ссылки: class, target, onclick, кастомные data-атрибуты и т.д.
Согласитесь, так гораздо нагляднее. И порядок в коде.
use Joomla\CMS\HTML\HTMLHelper;

$url = 'index.php?option=' . $option . '&view=' . $view . '&id=' . $id;
$link_title = HTMLHelper::image('images/headers/raindrops.jpg', 'Alt attrib for image');
$target = '_blank';
$linkAttribs = [
'target' => $target,
'class' => 'btn btn-primary',
'onclick' => 'alert(123);',
'data-link-id' => '4a5d7f6a455sf8',
];

echo HTMLHelper::link($url, $link_title, $linkAttribs);

Частично ознакомиться с методами класса HTMLHelper можно в файле libraries/src/HTML/HTMLHelper.php.

#joomla #php #development #разработка #html #cookbook
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2🙏1
👩‍💻 Совет по Joomla: метод HTMLHelper::image() для рендера изображений
В API Joomla есть довольно богатый инструмент - класс HTMLHelper. С его помощью можно выводить различные HTML-элементы с нужными параметрами: модальные окна, аккордеоны, табы, изображения и т.д.

Наглядности и чистоты кода ради стоит использовать этот метод, дабы не делать бесконечную конкатенацию HTML с PHP кодом и не потерять глаза в поисках утерянной кавычки.

Самый простой способ рендера изображений - с 2-мя аргументами:
- $img - путь к изображению
- $alt - текст для атрибута alt изображения
3-й необязательный параметр - массив или строка с атрибутами изображения: class, title, различные data-атрибуты, onclick, loading и т.д. Я предпочитаю удобно и наглядно собрать атрибуты в массив, использовать условия в PHP, а не HTML коде.
use Joomla\CMS\HTML\HTMLHelper;

$img_src = 'images/banner.webp';
$img_attribs = [
'loading' => 'lazy',
'class'=>'img-fluid',
'data-custom-attr'=>'your-custom-data-attr-value',
'title'=> 'Title attribute for image'
];

echo HTMLHelper::image($img_src,'Alt text for image', $img_attribs);

Если изображение найдено - получим HTML-разметку <img src="..."/> с нашими данными. Если не найдено - null.
Ещё 2 параметра, которые используются реже и связаны с одной из главных фишек Joomla - функционалом переопределений.
$relative bool - 4-й параметр, логический флаг относится ли данный путь к media-файлам шаблона. На примере шаблона Cassiopeia: в вашем шаблоне есть папка images, где лежат какие-то картинки. Путь к этим картинкам довольно длинный: media/templates/site/cassiopeia/images/banners/banner.jpg. Если вы укажете параметр relative как true, то можно передать в HTMLHelper::image(), просто banners/banner.jpg, а остальное Joomla добавит сама. Так читабельнее.

Но на этом фишки не закончились. Если вы сделали дочерний шаблон и в нём переопределили картинку, то Joomla автоматически будет искать переопределенные картинки и показывать нужную.
Пример: на одном пункте меню основной шаблон, а на другом - дочерний шаблон. В дочерний помещаем только те файлы, которые хотим изменить, остальные берутся из основного. То есть мы можем не копировать и не изменять index.php файл основного шаблона, чтобы указать новую картинку, а просто положить её в папку с дочерним шаблоном. Теперь при переходе на 2-й пункт меню будет показываться переопределенная картинка из актуального шаблона, хотя вы как передавали путь banners/banner.jpg так и передаёте.

И последний параметр - $returnPath integer. По умолчанию - 0.
Если $returnPath = -1 - метод вернёт HTML-разметку без поиска переопределений. Если $returnPath = 0 - вернёт разметку с поиском переопределений. Если $returnPath = 1 - возвращает только путь, без разметки. То есть вы передали banners/banner.jpg, а получите /media/templates/site/cassiopeia/images/banners/banner.jpg для основного шаблона и /media/templates/site/cassiopeia_test/images/banners/banner.jpg для дочернего.

@webtolkru

#joomla #development #php #html #разработка #cookbook
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
This media is not supported in your browser
VIEW IN TELEGRAM
"Бегущая строка" - CSS3 анимация бесконечной прокрутки справа налево.
В последнее время всё больше работаю с PHP, вёрстки поменьше. Но тут встала задача сделать анимацию бесконечной прокрутки справа налево. Естественно, что никаких JS-скриптов специально для этого использовать не хочется. Первое, что пришло в голову - анимировать свойство transform: translateX(-100%). Но в поиске встречались самые разные варианты этой анимации, в большинстве случаев нужно было плодить вложенные "слайды", в то время как мне нужна была "бегущая строка" с элементом айдентики клиента.
Для меня выходом стала анимация свойства background-position. Нам нужен простой div.
<div class="scroll-container"></div>

И CSS
.wt_custom_menu_item_banner .scroll-container {
width: 100%;
background-image: url('/media/templates/site/*******/images/element.jpg');
background-repeat: repeat-x;
animation: scroll linear infinite 50s;
height: 50px;
}

@keyframes scroll {
from { background-position-x: 0; }
to { background-position-x: -500%}
}

Скорость анимации регулируется параметром времени свойства animation: 50s. Чем больше время, тем медленнее движение. Но не только этим. На скорость анимации также влияет и свойство background-position-x: -500%;. Если положение, на которое мы меняем фон меньше, то анимация будет ещё медленнее, если больше, то при том же времени скорость увеличится. В общем, задачки за 2-3 класс )). Так же при достижении конца анимации (положения -500%) происходит подёргивание фона при возврате в исходное положение.
Тут выхода наверное 3: либо брать всё-таки скрипт на JS, либо использовать более мудрёное решение на CSS3, либо накрутить расстояния и время до таких значений, до которых их никто не будет просматривать )) Не думаю, что кто-то будет тупить на эту анимацию больше 50 секунд ))) Но это не точно )

#webdev #html #joomla #css #animation

@webtolkru
👍3🔥3
Оптимизируем изображения в HTML.
Полезная статья попалась на Хабре, где пригодился неизвестный мне доселе атрибут fetchpriority для изображений. Процитирую:

Ресурсные подсказки и директивы. Один из последних и продвинутых вариантов — атрибут fetchpriority. Он подсказывает браузеру, какие изображения «важны» для взаимодействия с пользователем в начале процесса загрузки:

<img fetchpriority="high" ...>

Также свойство fetchpriority может понизить приоритет загрузки второстепенных изображений, находящихся на последующих экранах или других страницах карусели:

<div class="carousel">
<img class="slide-1" fetchpriority="high">
<img class="slide-2" fetchpriority="low">
<img class="slide-3" fetchpriority="low">
</div>


Читать целиком на Хабре.

@webtolkru

#joomla #html
👍3