Перейти к содержанию
Официальный форум поддержки Simpla

Рекомендуемые сообщения

Вот так я сделал превью фото для категорий

Идем в файл config/config.php, правим строки:

;Изображения категорий
categories_images_dir = files/categories/;
resized_category_img_images_dir = files/categories/preview/;

Создаем папку previews в папке files/categories (решение хранить в originals мне не понравилось)
Идем в файл api/Design.php и регистриуем новую функцию для Smarty:

    $this->smarty->registerPlugin('modifier', 'resize', array($this, 'resize_modifier'));
    $this->smarty->registerPlugin('modifier', 'resize_catalog', array($this, 'resize_catalog_modifier'));
...
    public function resize_modifier($filename, $width=0, $height=0, $set_watermark=false)
    {
        $resized_filename = $this->image->add_resize_params($filename, $width, $height, $set_watermark);
        $resized_filename_encoded = $resized_filename;
        
        if(substr($resized_filename_encoded, 0, 7) == 'http://')
            $resized_filename_encoded = rawurlencode($resized_filename_encoded);


        $resized_filename_encoded = rawurlencode($resized_filename_encoded);


        return $this->config->root_url.'/'.$this->config->resized_images_dir.$resized_filename_encoded.'?'.$this->config->token($resized_filename);
    }
    
    public function resize_catalog_modifier($filename, $width=0, $height=0, $set_watermark=false)
    {
        $resized_filename = $this->image->add_resize_params($filename, $width, $height, $set_watermark);
        $resized_filename_encoded = $resized_filename;
        
        if(substr($resized_filename_encoded, 0, 7) == 'http://')
            $resized_filename_encoded = rawurlencode($resized_filename_encoded);


        $resized_filename_encoded = rawurlencode($resized_filename_encoded);


        return $this->config->root_url.'/'.$this->config->resized_category_img_images_dir.$resized_filename_encoded.'?'.$this->config->token($resized_filename);
    }

Теперь нужно реализовать ресайз для категорий, для этого правим .htaccess в корне

RewriteRule ^files/categories/preview/(.+) resize/resize.php?file=$1&is_category&token=%{QUERY_STRING}

Файл resize/resize.php

 

$filename = $_GET['file'];
$token = $_GET['token'];
$is_category = 0;
...
$resized_filename =  $simpla->image->resize($filename, $is_category);
 

И api/Image.php

function resize($filename, $is_category = 0)
...// Пути к папкам с картинками
        if($is_category == 1) {
            $originals_dir = $this->config->root_dir.$this->config->categories_images_dir;
            $preview_dir = $this->config->root_dir.$this->config->resized_category_img_images_dir;
        }
        else {
            $originals_dir = $this->config->root_dir.$this->config->original_images_dir;
            $preview_dir = $this->config->root_dir.$this->config->resized_images_dir;
        }

Добавляем код для удаления превью, при удалении фотографий в файле  api/Categories.php

    // Удалить изображение категории
    public function delete_image($categories_ids)
    {
        $categories_ids = (array) $categories_ids;
        $query = $this->db->placehold("SELECT image FROM __categories WHERE id in(?@)", $categories_ids);
        $this->db->query($query);
        $filenames = $this->db->results('image');
        if(!empty($filenames))
        {
            $query = $this->db->placehold("UPDATE __categories SET image=NULL WHERE id in(?@)", $categories_ids);
            $this->db->query($query);
            foreach($filenames as $filename)
            {
                $query = $this->db->placehold("SELECT count(*) as count FROM __categories WHERE image=?", $filename);
                $this->db->query($query);
                $count = $this->db->result('count');
                if($count == 0)
                {
                    $file = pathinfo($filename, PATHINFO_FILENAME);
                    $ext = pathinfo($filename, PATHINFO_EXTENSION);
            
                    // Удалить все ресайзы
                    $rezised_images = glob($this->config->root_dir.$this->config->resized_category_img_images_dir.$file."*.".$ext);
                    if(is_array($rezised_images)) {
                        foreach (glob($this->config->root_dir.$this->config->resized_category_img_images_dir.$file."*.".$ext) as $f) {
                            @unlink($f);
                        }
                    }


                    @unlink($this->config->root_dir.$this->config->categories_images_dir.$filename);
                }
            }
            unset($this->categories_tree);
            unset($this->all_categories);    
        }
    }

Теперь достаточно написать код в шаблоне вида:

{$c->image|resize_catalog:300:120}

чтобы получить отрисайзенное фото категории.

Ссылка на сообщение
Поделиться на другие сайты
  • 2 месяца спустя...

RewriteRule ^files/categories/preview/(.+) resize/resize.php?file=$1&is_category&token=%{QUERY_STRING}

 

Файл resize/resize.php

 

 

$filename = $_GET['file'];

$token = $_GET['token'];

$is_category = 0;

...

$resized_filename =  $simpla->image->resize($filename, $is_category);

 

Замечен баг, ресайз сохранялся в стандартную директорию миниатюр, а не в нужную папку.

 

Что нужно исправить:

 

RewriteRule ^files/categories/preview/(.+) resize/resize.php?file=$1&is_category=1&token=%{QUERY_STRING}

 

 

$filename = $_GET['file'];
$token = $_GET['token'];
$is_category = $_GET['is_category'];

После изменения, все заработало как нужно, работает на [2.3.6].

 

 

yakutec, спасибо за решение

Ссылка на сообщение
Поделиться на другие сайты
  • 2 недели спустя...

 

Вот так я сделал превью фото для категорий

 

Идем в файл config/config.php, правим строки:

;Изображения категорий
categories_images_dir = files/categories/;
resized_category_img_images_dir = files/categories/preview/;

Создаем папку previews в папке files/categories (решение хранить в originals мне не понравилось)

Идем в файл api/Design.php и регистриуем новую функцию для Smarty:

 

 

Замечен еще один баг:

Нужно создать папку preview а не previews

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...