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

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

В 06.03.2021 в 14:55, daramal сказал:

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

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

Поставил по инструкции, далее изменил добавил ...

1. /resize/resize.php ищем комментарий /* new */

<?php

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

$filename = $_GET['file'];
$token = $_GET['token'];
/* new */
$is_banners = $_GET['is_banners'];
/* new */

$simpla = new Simpla();

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

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

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

2. в .htaccess заменить

# Ресайз картинок на лету
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^files/products/(.+) resize/resize.php?file=$1&token=%{QUERY_STRING}
#RewriteCond %{THE_REQUEST} ^GET\ (.*)files/products/(.*)\?([A-z0-9]*) 
#RewriteRule ^files/products/(.+) resize/resize.php?file=%2&token=%3 [L,NE]

на 

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

3. создаем папку preview в files/banners, должно быть так

files/banners/

files/banners/preview/

4. идем в api/Design.php после 

$this->smarty->registerPlugin('modifier', 'resize',		array($this, 'resize_modifier'));

добавить 

$this->smarty->registerPlugin('modifier', 'resize_banners',  array($this, 'resize_banners_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_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.'?'.$this->config->token($resized_filename);
    }

5. идем в api/Image.php

меняем 

	function resize($filename)
	{

на 

	function resize($filename, $is_banners = 0)
	{

далее меняем

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

на 

		// Пути к папкам с картинками
		
		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;
        }

6. идем в config/config.php 

после 

;Изображения брендов
brands_images_dir = files/brands/;

добавляем 

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

7. идем в simpla/design/html/banners.add.edit.tpl

строка 59

<td id="imageThumb">{if $banner->image}<img src="/{$config->banners_images_dir}{$banner->image}" alt="">{else}БАННЕР<span>изображение отсутсвует</span>{/if}</td>

меняем на 

<td id="imageThumb">{if $banner->image}<img src="{$banner->image|resize_banners:500:500}" alt="">{else}БАННЕР<span>изображение отсутсвует</span>{/if}</td>

8. идем в simpla/design/html/banners.show.list.tpl

строка 48

					<div class="banner">
						{if $banner->image}
						<img src="/{$banners_images_dir}{$banner->image}" alt="">
						{/if}
					</div>

меняем на 

					<div class="banner">
						{if $banner->image}
						<img src="{$banner->image|resize_banners:500:500}" alt="">
						{/if}
					</div>

 

Изменено пользователем alexivchenko
Ссылка на сообщение
Поделиться на другие сайты
1 hour ago, alexivchenko said:

Поставил по инструкции, далее изменил добавил ...

1. /resize/resize.php ищем комментарий /* new */



<?php

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

$filename = $_GET['file'];
$token = $_GET['token'];
/* new */
$is_banners = $_GET['is_banners'];
/* new */

$simpla = new Simpla();

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

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

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

2. в .htaccess заменить



# Ресайз картинок на лету
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^files/products/(.+) resize/resize.php?file=$1&token=%{QUERY_STRING}
#RewriteCond %{THE_REQUEST} ^GET\ (.*)files/products/(.*)\?([A-z0-9]*) 
#RewriteRule ^files/products/(.+) resize/resize.php?file=%2&token=%3 [L,NE]

на 



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

3. создаем папку preview в files/banners, должно быть так

files/banners/

files/banners/preview/

4. идем в api/Design.php после 



$this->smarty->registerPlugin('modifier', 'resize',		array($this, 'resize_modifier'));

добавить 



$this->smarty->registerPlugin('modifier', 'resize_banners',  array($this, 'resize_banners_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_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.'?'.$this->config->token($resized_filename);
    }

5. идем в api/Image.php

меняем 



	function resize($filename)
	{

на 



	function resize($filename, $is_banners = 0)
	{

далее меняем



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

на 



		// Пути к папкам с картинками
		
		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;
        }

6. идем в config/config.php 

после 



;Изображения брендов
brands_images_dir = files/brands/;

добавляем 



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

7. идем в simpla/design/html/banners.add.edit.tpl

строка 59



<td id="imageThumb">{if $banner->image}<img src="/{$config->banners_images_dir}{$banner->image}" alt="">{else}БАННЕР<span>изображение отсутсвует</span>{/if}</td>

меняем на 



<td id="imageThumb">{if $banner->image}<img src="{$banner->image|resize_banners:500:500}" alt="">{else}БАННЕР<span>изображение отсутсвует</span>{/if}</td>

8. идем в simpla/design/html/banners.show.list.tpl

строка 48



					<div class="banner">
						{if $banner->image}
						<img src="/{$banners_images_dir}{$banner->image}" alt="">
						{/if}
					</div>

меняем на 



					<div class="banner">
						{if $banner->image}
						<img src="{$banner->image|resize_banners:500:500}" alt="">
						{/if}
					</div>

 

Огромное спасибо. Ресайз создается! ))

 

Изменено пользователем daramal
Ссылка на сообщение
Поделиться на другие сайты
29 минут назад, daramal сказал:

Огромное спасибо. Ресайз создается! ))

 

	public function get_banners_plugin($params, &$smarty)
	{
		if($params['group'])
		{
			$filter['show_all_pages'] = true;//Обязательный параметр
			$filter['group'] = (int)$params['group'];
			
			@$category = $this->design->smarty->getTemplateVars('category');
			@$brand = $this->design->smarty->getTemplateVars('brand');
			@$page = $this->design->smarty->getTemplateVars('page');
			
			$filter['category'] = !empty($category)?$category->id:'';
			$filter['brand']    = !empty($brand)   ?$brand->id:'';
			$filter['page']     = !empty($page)    ?$page->id:'';
			
			list($banners,$count) = $this->banners->get_banners($filter);
			foreach($banners as $key=>$value)
				$banners[$key]->image = $banners[$key]->image;
			
			$smarty->assign('banners', $banners);
		}
	}

в шаблоне так же для ресайза

<div class="head-slider" id="Slide-{$group}">
	<ul>
	{foreach $banners as $banner}
		<li>
			<a href="{$banner->url}" title="{$banner->name|escape}">
				<img src="{$banner->image|resize_banners:500:500}" alt="">
			</a>
		</li>
	{/foreach}
	</ul>
</div>

и без него 

<div class="head-slider" id="Slide-{$group}">
	<ul>
	{foreach $banners as $banner}
		<li>
			<a href="{$banner->url}" title="{$banner->name|escape}">
				<img src="{$config->banners_images_dir}{$banner->image}" alt="">
			</a>
		</li>
	{/foreach}
	</ul>
</div>

 

Изменено пользователем alexivchenko
Ссылка на сообщение
Поделиться на другие сайты
6 minutes ago, alexivchenko said:



	public function get_banners_plugin($params, &$smarty)
	{
		if($params['group'])
		{
			$filter['show_all_pages'] = true;//Обязательный параметр
			$filter['group'] = (int)$params['group'];
			
			@$category = $this->design->smarty->getTemplateVars('category');
			@$brand = $this->design->smarty->getTemplateVars('brand');
			@$page = $this->design->smarty->getTemplateVars('page');
			
			$filter['category'] = !empty($category)?$category->id:'';
			$filter['brand']    = !empty($brand)   ?$brand->id:'';
			$filter['page']     = !empty($page)    ?$page->id:'';
			
			list($banners,$count) = $this->banners->get_banners($filter);
			foreach($banners as $key=>$value)
				$banners[$key]->image = $banners[$key]->image;
			
			$smarty->assign('banners', $banners);
		}
	}

в шаблоне так же




<div class="head-slider" id="Slide-{$group}">
	<ul>
	{foreach $banners as $banner}
		<li>
			<a href="{$banner->url}" title="{$banner->name|escape}">
				<img src="{$banner->image|resize_banners:500:500}" alt="">
			</a>
		</li>
	{/foreach}
	</ul>
</div>

 

  Еще раз благодарю за поддержку. Ресайз создается, НО остался нюанс с выводом.

Так как Вы указали ресайз в админке 500:500 - это ок. Но как вывести на сайт с другим размером, чуть по-больше? Так как этот модуль с группами баннеров, то соответственно будут разные группы баннеров со своими размерами.

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

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

файлы ресайза отлично создаются в папке preview, а далее интересное происходит: При первом обновлении страницы сайта, ресайзные баннеры подтягиваются, но если после этого обновить в админке, то после этого и на сайте, и в админке все пропадает.

Как будто происходит конфликт между файлами и система не понимает какой файл выводить ))

Как быть в этом случае?

Благодарю!

Изменено пользователем daramal
Ссылка на сообщение
Поделиться на другие сайты
16 минут назад, daramal сказал:

  Еще раз благодарю за поддержку. Ресайз создается, НО остался нюанс с выводом.

Так как Вы указали ресайз в админке 500:500 - это ок. Но как вывести на сайт с другим размером, чуть по-больше? Так как этот модуль с группами баннеров, то соответственно будут разные группы баннеров со своими размерами.

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


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

файлы ресайза отлично создаются в папке preview, а далее интересное происходит: При первом обновлении страницы сайта, ресайзные баннеры подтягиваются, но если после этого обновить в админке, то после этого и на сайте, и в админке все пропадает.

Как будто происходит конфликт между файлами и система не понимает какой файл выводить ))

Как быть в этом случае?

Благодарю!

Давайте попробуем для начала удалять ресайз картинки после их изменения в админке

зайдите в api/Banners.php и замените 

	/******
	Удаление изображения баннера
	*********/
	function delete_image($imageFileName)
	{
		if($imageFileName!='' && file_exists($this->config->root_dir.$this->config->banners_images_dir.$imageFileName))
			@unlink($this->config->root_dir.$this->config->banners_images_dir.$imageFileName);
		return true;
	}

на 

	/******
	Удаление изображения баннера
	*********/
	function delete_image($imageFileName)
	{
		if($imageFileName!='' && file_exists($this->config->root_dir.$this->config->banners_images_dir.$imageFileName))
		
		        $file = pathinfo($imageFileName, PATHINFO_FILENAME);
                $ext = pathinfo($imageFileName, PATHINFO_EXTENSION);
        
                // Удалить все ресайзы
                $rezised_images = glob($this->config->root_dir.$this->config->resized_banners_images_dir.$file."*.".$ext);
                if(is_array($rezised_images)) {
                    foreach (glob($this->config->root_dir.$this->config->resized_banners_images_dir.$file."*.".$ext) as $f) {
                        @unlink($f);
                    }
                }
		
			@unlink($this->config->root_dir.$this->config->banners_images_dir.$imageFileName);
		return true;
	}

 

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

не смог воспроизвести вашу ошибку, создал 4 группы по 4 картинки в каждой, размеры разные

500х500

600х600

700х700

800х800

Все картинки и группы отображаются 

Ссылка на сообщение
Поделиться на другие сайты
3 minutes ago, alexivchenko said:

не смог воспроизвести вашу ошибку, создал 4 группы по 4 картинки в каждой, размеры разные

500х500

600х600

700х700

800х800

Все картинки и группы отображаются 

смотрите, в шаблоне в админке указал, как Вы и привели 500:500.

далее в шабоне, создал файл для вывода 1 группы баннеров и указал:

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

обновил страницу сайта, Ресайзные баннеры с папки preview отобразились.

После этого, обновляю страницу в админке (в модули Баннеры), превьюшки тоже создаются.

Далее обновляю страницу на сайте, и тут начинается глюк. Баннеры пропали, перехожу в амдминку, также обновляю страницу и превьюшки тоже исчезли, хотя путь к файлам правильный (у каждого ресайзного файла свой размер) и наводя на путь пишет:

"Coul not load the image".

Копирую путь вставляю в новую вкладку браузера, страница выдает:

"bad token"

 

Ссылка на сообщение
Поделиться на другие сайты
15 минут назад, daramal сказал:

смотрите, в шаблоне в админке указал, как Вы и привели 500:500.

далее в шабоне, создал файл для вывода 1 группы баннеров и указал:


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

обновил страницу сайта, Ресайзные баннеры с папки preview отобразились.

После этого, обновляю страницу в админке (в модули Баннеры), превьюшки тоже создаются.

Далее обновляю страницу на сайте, и тут начинается глюк. Баннеры пропали, перехожу в амдминку, также обновляю страницу и превьюшки тоже исчезли, хотя путь к файлам правильный (у каждого ресайзного файла свой размер) и наводя на путь пишет:

"Coul not load the image".

Копирую путь вставляю в новую вкладку браузера, страница выдает:

"bad token"

 

Тут что-то индивидуальное

Мне кажется, вы как-то не верно выводите группы на сайте 

Ссылка на сообщение
Поделиться на другие сайты
38 minutes ago, alexivchenko said:

Тут что-то индивидуальное

Мне кажется, вы как-то не верно выводите группы на сайте 

Большое спасибо. Причину глюка нашел.

У меня в файле resize.php идет код для формирования файлов в .webp. Эти файлы создаются параллельно с ресайзными баннерами. Но вот как его подкорректировать под нашу нужду?

$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);
	}
}

Без него конечно все работает отлично, за что Вам ОГРОМНОЕ СПАСИБО!

Но в данном случае .webp очень нужен

Изменено пользователем daramal
Ссылка на сообщение
Поделиться на другие сайты

Да, и предварительно в .htaccess добавил:

AddType image/webp .webp
<IfModule mod_rewrite.c>
RewriteCond %{HTTP_ACCEPT} image/webp
RewriteCond %{DOCUMENT_ROOT}/$1.webp -f
RewriteRule (.+)\.(jpe?g|png)$ $1.webp [T=image/webp,E=accept:1]
</IfModule>
<IfModule mod_headers.c>
Header append Vary Accept env=REDIRECT_accept 
</IfModule>

 

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

Заметил, что при нахождении копии ресайз-файла в .webp в папке preview, картинки исчезают с сайта.

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

Странно все как-то.

Решил проделать тоже самое с брендами, та же история: первый раз показываются, а потом уже нет, хотя ресайзы отлично создаются.

Например, фото товаров отображаются нормально в .webp, а вот с баннерами и брендами все печально.

Изменено пользователем daramal
Ссылка на сообщение
Поделиться на другие сайты
13 часов назад, daramal сказал:

Например, фото товаров отображаются нормально в .webp, а вот с баннерами и брендами все печально.

Ошибки такого плана - это вполне ожидаемое следствие принципиально неверного подхода. Ведь сейчас, кроме стандартного резайза для товаров, создано еще два - для блога и для баннеров. И создано дублированием кода, что, как известно, дает риск дополнительных ошибок.

Надо бы создавать резайз как единый функционал, для всех или по крайней мере некоторых сущностей. Именно так сделано в Okay. Один товарищ выше в начале темы высказал мысль, что там плохо реализовано. Конечно, недостатки и там есть. Но тутошний метод по сравнению с тем, что у Okay, неизмеримо хуже. А тот товарищ про это пока не сообщает, видимо, двойные стандарты в действии...

Причем если реализовывать единым функционалом, и разработка упростится, и работа станет более обозримой, и широта применения возрастет - одни плюсы. Тем более реально для этого почти все нужные функции в Simpla почти готовы...

Ссылка на сообщение
Поделиться на другие сайты
2 hours ago, phukortsin said:

Ошибки такого плана - это вполне ожидаемое следствие принципиально неверного подхода. Ведь сейчас, кроме стандартного резайза для товаров, создано еще два - для блога и для баннеров. И создано дублированием кода, что, как известно, дает риск дополнительных ошибок.

Надо бы создавать резайз как единый функционал, для всех или по крайней мере некоторых сущностей. Именно так сделано в Okay. Один товарищ выше в начале темы высказал мысль, что там плохо реализовано. Конечно, недостатки и там есть. Но тутошний метод по сравнению с тем, что у Okay, неизмеримо хуже. А тот товарищ про это пока не сообщает, видимо, двойные стандарты в действии...

Причем если реализовывать единым функционалом, и разработка упростится, и работа станет более обозримой, и широта применения возрастет - одни плюсы. Тем более реально для этого почти все нужные функции в Simpla почти готовы...

Да, полностью согласен с Вами. Все как-то частично реализовано, приходится колдовать.

Было бы конечно здорово реализовать единый ресайз для всех картинок. А то получается всегда, что-то доделаешь, другое ломается ))

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

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

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

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

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

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

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

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

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

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