Форум пользователей Impera CMS
Impera CMS - отличный движок для лёгкого создания интернет магазина.
Обладает невероятным количеством функций, необходимых в онлайн торговле.

Следить
Главная
22:41
13 фев
#
?
написал:

Подскажите, как для всех картинок на сайте сгенерировать: width и height ?

Например:

Сейчас во всех шаблонах размер не указан вовсе. Где брать данные о размере картинки?

14:46
18 фев
#
написал:

Так как в 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, а механизм действия функции такой:

  • превращаем входной url в имя файла относительно корневой папки магазина
  • если такой файл не существует или он не jpg-gif-png-картинка, возвращаем пустую строку
  • иначе извлекаем из файла сведения о высоте-ширине картинки
  • возвращаем строку вида width="ЧИСЛО" height="ЧИСЛО"


Теперь покажу исходный код файла 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) . '"';
        }
    }
?>
13:05
20 фев
#
?
написал:

Спасибо за развернутый ответ! Теперь все свойства фото проставляются замечательно!

В некоторых местах шаблона фото выводится меньшего размера чем физический, за счет ограничения внешним контейнером. В таких случаях допустимо задавать размеры картинок через max-height и max-width. То есть если внешний контейнер, например <div>, в CSS имеет размер 150х150px, то и параметры картинки в нем должны содержать свойства max-height:150px; и max-width:150px; или меньше, в зависимости от дизайна. В этом случае пропорции изображения останутся естественными, так как оно будет вписано в эти параметры.

Написание ответа

Перед публикацией рекомендуется использовать Предпросмотр, чтобы увидеть конечный вид сообщения.


Обратите внимание! Для противодействия спаму новые посты форума проявляются с задержкой от нескольких минут, пока не пройдут модерацию.