При работе с кодом хорошим тоном разработки считается наглядность кода, которая обеспечивает лёгкость его восприятия. Обычно это называют "чистый, читаемый код". Согласитесь, понимать следующую запись не всегда бывает удобно:
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
В 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-скриптов специально для этого использовать не хочется. Первое, что пришло в голову - анимировать свойство
Для меня выходом стала анимация свойства
И CSS
Скорость анимации регулируется параметром времени свойства
Тут выхода наверное 3: либо брать всё-таки скрипт на JS, либо использовать более мудрёное решение на CSS3, либо накрутить расстояния и время до таких значений, до которых их никто не будет просматривать )) Не думаю, что кто-то будет тупить на эту анимацию больше 50 секунд ))) Но это не точно )
#webdev #html #joomla #css #animation
@webtolkru
В последнее время всё больше работаю с 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.
Полезная статья попалась на Хабре, где пригодился неизвестный мне доселе атрибут
Читать целиком на Хабре.
@webtolkru
#joomla #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