Jump to content

Recommended Posts

В 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>

 

Edited by alexivchenko
Link to post
Share on other sites
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>

 

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

 

Edited by daramal
Link to post
Share on other sites
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>

 

Edited by alexivchenko
Link to post
Share on other sites
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, а далее интересное происходит: При первом обновлении страницы сайта, ресайзные баннеры подтягиваются, но если после этого обновить в админке, то после этого и на сайте, и в админке все пропадает.

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

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

Благодарю!

Edited by daramal
Link to post
Share on other sites
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;
	}

 

Link to post
Share on other sites

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

500х500

600х600

700х700

800х800

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

Link to post
Share on other sites
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"

 

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

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

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


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

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

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

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

"Coul not load the image".

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

"bad token"

 

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

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

Link to post
Share on other sites
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 очень нужен

Edited by daramal
Link to post
Share on other sites

Да, и предварительно в .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>

 

Link to post
Share on other sites

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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...