Подскажите, как для всех картинок на сайте сгенерировать: 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; или меньше, в зависимости от дизайна. В этом случае пропорции изображения останутся естественными, так как оно будет вписано в эти параметры.