Подскажите, как для всех картинок на сайте сгенерировать: width и height ?
Например:
Сейчас во всех шаблонах размер не указан вовсе. Где брать данные о размере картинки?
Подскажите, как для всех картинок на сайте сгенерировать: width и height ?
Например:
Сейчас во всех шаблонах размер не указан вовсе. Где брать данные о размере картинки?
Так как в Impera CMS поддерживается файл emulator.php в папке шаблона, можете закодировать в этом файле необходимую шаблонизационную функцию, например назовем ее img_WH.
Сначала покажу, как эта функция будет применяться в шаблоне. Предположим, на странице товара product.tpl в каком-то месте страницы у нас выводилась картинка товара следующим образом:
{* получаем url большой картинки товара *} {$url = $product->large_image|default:'/files/images/no-photo.png'} {* выводим картинку *} <img src="{$url|escape}" />
Теперь тот же код с применением обозначенной выше функции, которую я пометил в коде таким цветом:
{* получаем url большой картинки товара *} {$url = $product->large_image|default:'/files/images/no-photo.png'} {* выводим картинку *} <img src="{$url|escape}" {img_WH image = $url} />
Как видно, внутри тега картинки происходит вызов некоей шаблонизационной функции img_WH, которой в ее параметре image сообщается url картинки товара.
Программный код функции как раз размещен в файле http://сайт/design/ваш_шаблон/html/emulator.php, а механизм действия функции такой:
Теперь покажу исходный код файла emulator.php:
<?php class TemplateEmulator { // объект движка public $cms = null; // =================================================================== /** * Конструктор класса * * ------------------------------------------------------------------- * * @access public * @param object $cms объект движка * @return void */ // =================================================================== public function __construct ( & $cms ) { // запоминаем выход на объект движка $this->cms = & $cms; // подключаем наши функции и модификаторы Smarty $this->setSmartyPlugins($cms); } // =================================================================== /** * Подключение наших функций и модификаторов в шаблонизатор Smarty * * ------------------------------------------------------------------- * * @access protected * @param object $cms объект движка * @return void */ // =================================================================== protected function setSmartyPlugins ( & $cms ) { // регистрируем шаблонизационную функцию img_WH $cms->smarty->registerPlugin('function', 'img_WH', array($this, 'img_WH_handler')); } // =================================================================== /** * Обработчик шаблонизационной функции img_WH * * ------------------------------------------------------------------- * * @access public * @param array $params массив параметров, указанных в вызове * @param object $smarty объект шаблонизатора Smarty * @return string ответ, помещаемый в точку вызова */ // =================================================================== public function img_WH_handler ( $params, & $smarty ) { // проверяем, что нам сообщили строковой параметр image if (!isset($params['image']) || !is_string($params['image'])) return ''; // превращаем в имя файла $file = trim($params['image']); $file = preg_replace('!^([a-z]+:)?//[^/]/!i', '', $file); // убрали http://сайт/ $file = preg_replace('/[\?#].*$/', '', $file); // убрали ?парам или #хеш if ($file == '') return ''; // если такого файла нет if (!file_exists($file) || !is_file($file) || !is_readable($file)) return ''; // если файл не jpg-gif-png if (!preg_match('/\.(jpe?g|gif|png)$/i', $file)) return ''; // извлекаем сведения о ширине-высоте try { if (!function_exists('getimagesize')) return ''; list($w, $h) = @ getimagesize($file); if (!isset($w) || !isset($h) || !is_numeric($w) || !is_numeric($h)) return ''; } catch (Exception $e) { return ''; } // строка ответа return ' width="' . intval($w) . '" height="' . intval($h) . '"'; } } ?>
Спасибо за развернутый ответ! Теперь все свойства фото проставляются замечательно!
В некоторых местах шаблона фото выводится меньшего размера чем физический, за счет ограничения внешним контейнером. В таких случаях допустимо задавать размеры картинок через max-height и max-width. То есть если внешний контейнер, например <div>, в CSS имеет размер 150х150px, то и параметры картинки в нем должны содержать свойства max-height:150px; и max-width:150px; или меньше, в зависимости от дизайна. В этом случае пропорции изображения останутся естественными, так как оно будет вписано в эти параметры.