Jump to content

Recommended Posts

Приветствую, друзья.

Установлен модуль баннеров, не знаю кто автор, там еще баннеры идут в группе.

Хочу применить к загруженным баннерам сам resize. Пытаюсь сделать по аналогии Блога, но к сожалению, не выходит.

На сайте видно по пути файла, что якобы картинка идет уже с ресайзом, на самом деле эта картинка не создалась в папке.

Правки вносил в Image.php, Design.php, .htaccess и в шаблоне слайдера.

Может еще где править нужно. Подскажите, пожалуйста.

 

Спасибо за любую информацию.

 

Edited by daramal
Link to post
Share on other sites
2 minutes ago, phukortsin said:

В Okay реализован ресайз изображений для любых сущностей. Пробуйте по аналогии...

Спасибо! Увы с Okay не знаком.

Link to post
Share on other sites
32 минуты назад, phukortsin сказал:

В Okay реализован ресайз изображений для любых сущностей. Пробуйте по аналогии...

Реализован через одно место...

Link to post
Share on other sites
5 часов назад, daramal сказал:

Приветствую, друзья.

Установлен модуль баннеров, не знаю кто автор, там еще баннеры идут в группе.

Хочу применить к загруженным баннерам сам resize. Пытаюсь сделать по аналогии Блога, но к сожалению, не выходит.

На сайте видно по пути файла, что якобы картинка идет уже с ресайзом, на самом деле эта картинка не создалась в папке.

Правки вносил в Image.php, Design.php, .htaccess и в шаблоне слайдера.

Может еще где править нужно. Подскажите, пожалуйста.

 

Спасибо за любую информацию.

 

в папке resize то упустили момент?

Link to post
Share on other sites
13 minutes ago, Kami said:

в папке resize то упустили момент?

в папке resize  создал файл resizebanners.php и внес в него следующее:

<?php

require_once('../api/Simpla.php');

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

$simpla = new Simpla();

if(!$simpla->config->check_token($filename, $token))
	exit('bad token');		

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

if(is_readable($resized_filename))
{
	header('Content-type: image');
	print file_get_contents($resized_filename);
}

$webp_filename = preg_replace('/\.[^.]+$/','',$resized_filename).".webp";
$info = getimagesize($resized_filename);
if (file_exists($webp_filename)) {
} else {
	if ($info['mime'] == 'image/jpeg') {
		$imagetoconvert = imagecreatefromjpeg($resized_filename);  
		imagewebp($imagetoconvert, $webp_filename, 80);
		imagedestroy($resized_filename);
	} elseif ($info['mime'] == 'image/png') {
		$imagetoconvert = imagecreatefrompng($resized_filename);  
		imagewebp($imagetoconvert, $webp_filename, 80);
		imagedestroy($resized_filename);
	}
}

не помогло ((

Link to post
Share on other sites
4 минуты назад, daramal сказал:

в папке resize  создал файл resizebanners.php и внес в него следующее:


<?php

require_once('../api/Simpla.php');

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

$simpla = new Simpla();

if(!$simpla->config->check_token($filename, $token))
	exit('bad token');		

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

if(is_readable($resized_filename))
{
	header('Content-type: image');
	print file_get_contents($resized_filename);
}

$webp_filename = preg_replace('/\.[^.]+$/','',$resized_filename).".webp";
$info = getimagesize($resized_filename);
if (file_exists($webp_filename)) {
} else {
	if ($info['mime'] == 'image/jpeg') {
		$imagetoconvert = imagecreatefromjpeg($resized_filename);  
		imagewebp($imagetoconvert, $webp_filename, 80);
		imagedestroy($resized_filename);
	} elseif ($info['mime'] == 'image/png') {
		$imagetoconvert = imagecreatefrompng($resized_filename);  
		imagewebp($imagetoconvert, $webp_filename, 80);
		imagedestroy($resized_filename);
	}
}

не помогло ((

Ну как вариант, 

Есть тема где ресайз изображения блога, попробуйте по аналогии. Скорей всего если у вас баннеры с групировкой то это решение симпламаркета?

Link to post
Share on other sites
2 hours ago, Kami said:

Ну как вариант, 

Есть тема где ресайз изображения блога, попробуйте по аналогии. Скорей всего если у вас баннеры с групировкой то это решение симпламаркета?

судья по коду, у меня как раз такой блог и реализован. Я по нему и делаю. Но увы, безуспешно.

Странно, пытаюсь сделать ресайз и для категорий по данной инструкции:

https://forum.simplacms.ru/topic/2172-resize-картинки-с-брендом/?do=findComment&comment=57913&_rid=1193

также ничего не происходит. Ссылка сама появляется, а вот ресайзенный файл не создается вообще.

 

Link to post
Share on other sites
2 hours ago, Kami said:

Скорей всего если у вас баннеры с групировкой то это решение симпламаркета

вполне возможно. Точно не могу сказать. 

Link to post
Share on other sites
25 минут назад, daramal сказал:

судья по коду, у меня как раз такой блог и реализован. Я по нему и делаю. Но увы, безуспешно.

Странно, пытаюсь сделать ресайз и для категорий по данной инструкции:

https://forum.simplacms.ru/topic/2172-resize-картинки-с-брендом/?do=findComment&comment=57913&_rid=1193

также ничего не происходит. Ссылка сама появляется, а вот ресайзенный файл не создается вообще.

 

я бы начал логи ошибок смотреть. Там что то интересное должно быть, нам пишите, а мы подскажем что да как.

Link to post
Share on other sites
13 minutes ago, Kami said:

я бы начал логи ошибок смотреть. Там что то интересное должно быть, нам пишите, а мы подскажем что да как.

не знаю, поможет ли. у меня на OpenServer-e показывает:

m-mobile.local: 127.0.0.1 [05/Mar/2021:21:33:14 +0200] "GET /files/banners/5-5-a80.970x400.jpg?3f75641debee8fadc495900b4be97cc4 HTTP/1.1" 200 233 "http://m-mobile.local/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0"
m-mobile.local: 127.0.0.1 [05/Mar/2021:21:33:14 +0200] "GET /files/banners/6-6-mi9t.970x400.jpg?a7a54cbb0db8da7e39b190604485f7ba HTTP/1.1" 200 234 "http://m-mobile.local/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0"
m-mobile.local: 127.0.0.1 [05/Mar/2021:21:33:14 +0200] "GET /files/banners/79-xs.970x400.jpg?5b8590f5aa3dec14b12b2ff843238aea HTTP/1.1" 200 231 "http://m-mobile.local/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0"
m-mobile.local: 127.0.0.1 [05/Mar/2021:21:33:14 +0200] "GET /files/products/2_77.220x220.webp?892f633d65942b3768f3d22dde7b7492 HTTP/1.1" 304 - "http://m-mobile.local/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0"
m-mobile.local: 127.0.0.1 [05/Mar/2021:21:33:14 +0200] "GET /files/banners/76-note7.970x400.jpg?44a75c97702b6198df0ea2a4f5839c8e HTTP/1.1" 200 234 "http://m-mobile.local/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0"

видно, что ссылка создается правильно, но самого файла нет. ресайз не создается.

Link to post
Share on other sites
2 минуты назад, daramal сказал:

не знаю, поможет ли. у меня на OpenServer-e показывает:


m-mobile.local: 127.0.0.1 [05/Mar/2021:21:33:14 +0200] "GET /files/banners/5-5-a80.970x400.jpg?3f75641debee8fadc495900b4be97cc4 HTTP/1.1" 200 233 "http://m-mobile.local/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0"
m-mobile.local: 127.0.0.1 [05/Mar/2021:21:33:14 +0200] "GET /files/banners/6-6-mi9t.970x400.jpg?a7a54cbb0db8da7e39b190604485f7ba HTTP/1.1" 200 234 "http://m-mobile.local/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0"
m-mobile.local: 127.0.0.1 [05/Mar/2021:21:33:14 +0200] "GET /files/banners/79-xs.970x400.jpg?5b8590f5aa3dec14b12b2ff843238aea HTTP/1.1" 200 231 "http://m-mobile.local/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0"
m-mobile.local: 127.0.0.1 [05/Mar/2021:21:33:14 +0200] "GET /files/products/2_77.220x220.webp?892f633d65942b3768f3d22dde7b7492 HTTP/1.1" 304 - "http://m-mobile.local/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0"
m-mobile.local: 127.0.0.1 [05/Mar/2021:21:33:14 +0200] "GET /files/banners/76-note7.970x400.jpg?44a75c97702b6198df0ea2a4f5839c8e HTTP/1.1" 200 234 "http://m-mobile.local/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0"

видно, что ссылка создается правильно, но самого файла нет. ресайз не создается.

логи ошибок нужны, выдает что то сервер? 

Link to post
Share on other sites

Вообще опишу что я сделал. Посмотрите, пожалуйста, где допущена ошибка или еще где пропустил.

1. в api/Design.php добавил:

$this->smarty->registerPlugin('modifier', 'resizebanners', array($this, 'resize_modifier_banners'));

2. там же добавил:

public function resize_modifier_banners($filename, $width=0, $height=0, $set_watermark=false,$crop = false)
	{
		$resized_filename = $this->image->add_resize_params($filename, $width, $height, $set_watermark, $crop);
		$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->banners_images_dir.$resized_filename_encoded.'?'.$this->config->token($resized_filename);
	}

3. в api/Image.php добавил функцию:

function resizebanners($filename)
    {
        list($source_file, $width , $height, $set_watermark) = $this->get_resize_params($filename);

        // Если вайл удаленный (http://), зальем его себе
        if(substr($source_file, 0, 7) == 'http://')
        {    
            // Имя оригинального файла
            if(!$original_file = $this->download_image($source_file))
                return false;
            
            $resized_file = $this->add_resize_params($original_file, $width, $height, $set_watermark);            
        }    
        else
        {
            $original_file = $source_file;
        }
        
        $resized_file = $this->add_resize_params($original_file, $width, $height, $set_watermark);                    
    
        // Пути к папкам с картинками
        $originals_dir = $this->config->root_dir.$this->config->original_images_dir;
        $preview_dir = $this->config->root_dir.$this->config->banners_images_dir;
        
        // Убрал водяные знаки намерено, кто захочет вернет сам :)
        if(class_exists('Imagick') && $this->config->use_imagick)
            $this->image_constrain_imagick($originals_dir.$original_file, $preview_dir.$resized_file, $width, $height);
        else
            $this->image_constrain_gd($originals_dir.$original_file, $preview_dir.$resized_file, $width, $height);
        
        return $preview_dir.$resized_file;
    }

4. создал файл resizebanners.php в папке resize и вложил туда:

<?php
chdir('..');
require_once('api/Simpla.php');

$filename = $_GET['file'];
$token = $_GET['token'];
$filename = str_replace('%2F', '/', $filename);

if(substr($filename, 0, 6) == 'http:/')
    $filename = 'http://'.substr($filename, 6);
    
$simpla = new Simpla();
if(!$simpla->config->check_token($filename, $token))
    exit('bad token');        

if(is_readable($simpla->config->banners_images_dir.$filename))
    $resized_filename = $simpla->config->banners_images_dir.$filename;
else
    $resized_filename = $simpla->image->resizebanners($filename);
    
if(is_readable($resized_filename))
{
    header('Content-type: image');
    print file_get_contents($resized_filename);
}

$webp_filename = preg_replace('/\.[^.]+$/','',$resized_filename).".webp";
$info = getimagesize($resized_filename);
if (file_exists($webp_filename)) {
} else {
	if ($info['mime'] == 'image/jpeg') {
		$imagetoconvert = imagecreatefromjpeg($resized_filename);  
		imagewebp($imagetoconvert, $webp_filename, 80);
		imagedestroy($resized_filename);
	} elseif ($info['mime'] == 'image/png') {
		$imagetoconvert = imagecreatefrompng($resized_filename);  
		imagewebp($imagetoconvert, $webp_filename, 80);
		imagedestroy($resized_filename);
	}
}

5. В .htaccess добавил:

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

6. В шаблон добавил вывод:

{$banner->image|resizebanners:970:400}

 

Что не так или еще где пропустил?! Сам файл ресайз не создается.

Edited by daramal
Link to post
Share on other sites
52 minutes ago, Kami said:

логи ошибок нужны, выдает что то сервер? 

там ничего особенного:

[05-Mar-2021 23:19:59 Europe/Moscow] PHP Warning:  Division by zero in W:\domains\m-mobile.local\compiled\mmobile_new\28377d9c976ab40e1990483b21926ab71bb9ea1a.file.product_iteam.tpl.php on line 49
[05-Mar-2021 23:19:59 Europe/Moscow] PHP Warning:  Division by zero in W:\domains\m-mobile.local\compiled\mmobile_new\28377d9c976ab40e1990483b21926ab71bb9ea1a.file.product_iteam.tpl.php on line 49
[05-Mar-2021 23:19:59 Europe/Moscow] PHP Warning:  Division by zero in W:\domains\m-mobile.local\compiled\mmobile_new\28377d9c976ab40e1990483b21926ab71bb9ea1a.file.product_iteam.tpl.php on line 49

 

Edited by daramal
Link to post
Share on other sites

Обратите внимание на строки

        // Пути к папкам с картинками
        $originals_dir = $this->config->root_dir.$this->config->original_images_dir;
        $preview_dir = $this->config->root_dir.$this->config->banners_images_dir;
  

Там у Вас в первом случае явно неправильно, во втором неопределенно...

 

Link to post
Share on other sites
3 hours ago, phukortsin said:

Обратите внимание на строки



        // Пути к папкам с картинками
        $originals_dir = $this->config->root_dir.$this->config->original_images_dir;
        $preview_dir = $this->config->root_dir.$this->config->banners_images_dir;
  

Там у Вас в первом случае явно неправильно, во втором неопределенно...

 

Сделал по аналогии Блога. Такие же строки и там (вместо banners_images_dir идет post_images_dir), правда картинки блога не загружаются в эту папку, а в общую ))

Проблема не в том, где должен лежать ресайз, а в том, что вообще не создается (в случае с баннерами).

Edited by daramal
Link to post
Share on other sites

1. Добавить или изменить в /resize/resize.php 

<?php

require_once('../api/Simpla.php');

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

$simpla = new Simpla();

if (!$simpla->config->check_token($filename, $token)) {
    header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
    exit('bad token');
}

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

if(is_readable($resized_filename))
{
    header('Content-type: image');
    print file_get_contents($resized_filename);
}

2. Добавить в .htaccess

# Ресайз картинок слайдер
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^files/slides/preview/(.+) resize/resize.php?file=$1&is_banners=1&token=%{QUERY_STRING}

3. Добавить в config/config.php

;Изображения баннеров
banners_images_dir = files/slides/;
resized_banners_images_dir = files/slides/preview/;

4. Создать папки /files/slides и /files/slides/preview

5. Добавить в api/Design.php

$this->smarty->registerPlugin('modifier', 'resize_banners',  array($this, 'resize_banners_modifier'));

и 

public function resize_banners_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_banners_images_dir.$resized_filename_encoded;
   }

6. Добавить и изменить в api/Image.php 

// Пути к папкам с картинками
if($is_banners == 1) {
    $originals_dir = $this->config->root_dir.$this->config->banners_images_dir;
    $preview_dir = $this->config->root_dir.$this->config->resized_banners_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;
}

7. Вывод

{$banner->image|resize_banners:970:400}

Edited by alexivchenko
Link to post
Share on other sites
49 minutes ago, alexivchenko said:

1. Добавить или изменить в /resize/resize.php 


<?php

require_once('../api/Simpla.php');

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

$simpla = new Simpla();

if (!$simpla->config->check_token($filename, $is_banners, $token)) {
    header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
    exit('bad token');
}

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

if(is_readable($resized_filename))
{
    header('Content-type: image');
    print file_get_contents($resized_filename);
}

2. Добавить в .htaccess


# Ресайз картинок слайдер
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^files/slides/preview/(.+) resize/resize.php?file=$1&is_banners=1&token=%{QUERY_STRING}

3. Добавить в config/config.php


;Изображения баннеров
banners_images_dir = files/slides/;
resized_banners_images_dir = files/slides/preview/;

4. Создать папки /files/slides и /files/slides/preview

5. Добавить в api/Design.php


$this->smarty->registerPlugin('modifier', 'resize_banners',  array($this, 'resize_banners_modifier'));

и 


public function resize_banners_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_banners_images_dir.$resized_filename_encoded;
   }

6. Добавить и изменить в api/Image.php 


// Пути к папкам с картинками
if($is_banners == 1) {
    $originals_dir = $this->config->root_dir.$this->config->banners_images_dir;
    $preview_dir = $this->config->root_dir.$this->config->resized_banners_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;
}

 

Спасибо. К сожалению, не работает. Я подобное решение применял и для категории. Ресайз вообще не создается (

Link to post
Share on other sites
2 минуты назад, daramal сказал:

Спасибо. К сожалению, не работает. Я подобное решение применял и для категории. Ресайз вообще не создается (

Скиньте мне инструкцию по которой вы делали вывод баннеров. Так как шаги выше я проверил и все вывелось. 

Link to post
Share on other sites
12 minutes ago, alexivchenko said:

Скиньте мне инструкцию по которой вы делали вывод баннеров. Так как шаги выше я проверил и все вывелось. 

Не могу прикрепить сюда файл. Выдает ошибку.

Поэтому залил к себе: SlideBanner>>

Link to post
Share on other sites

Скажите, а зачем?

Что там такого, что "вам нужно срочно его менять на другой" - есть критические уязвимости?

Или что?

Link to post
Share on other sites
7 hours ago, alexivchenko said:

1. Добавить или изменить в /resize/resize.php 


<?php

require_once('../api/Simpla.php');

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

$simpla = new Simpla();

if (!$simpla->config->check_token($filename, $token)) {
    header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
    exit('bad token');
}

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

if(is_readable($resized_filename))
{
    header('Content-type: image');
    print file_get_contents($resized_filename);
}

2. Добавить в .htaccess


# Ресайз картинок слайдер
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^files/slides/preview/(.+) resize/resize.php?file=$1&is_banners=1&token=%{QUERY_STRING}

3. Добавить в config/config.php


;Изображения баннеров
banners_images_dir = files/slides/;
resized_banners_images_dir = files/slides/preview/;

4. Создать папки /files/slides и /files/slides/preview

5. Добавить в api/Design.php


$this->smarty->registerPlugin('modifier', 'resize_banners',  array($this, 'resize_banners_modifier'));

и 


public function resize_banners_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_banners_images_dir.$resized_filename_encoded;
   }

6. Добавить и изменить в api/Image.php 


// Пути к папкам с картинками
if($is_banners == 1) {
    $originals_dir = $this->config->root_dir.$this->config->banners_images_dir;
    $preview_dir = $this->config->root_dir.$this->config->resized_banners_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;
}

7. Вывод

{$banner->image|resize_banners:970:400}

пробовал и вот еще проверил этот метод для создания ресайза брендов. Тоже не создается ((

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...