daramal Опубликовано 6 марта, 2021 Автор Жалоба Поделиться Опубликовано 6 марта, 2021 5 minutes ago, alexivchenko said: Какая версия Simpla у вас? Версия 2.3.7 Цитата Ссылка на сообщение Поделиться на другие сайты
ps-simpla Опубликовано 7 марта, 2021 Жалоба Поделиться Опубликовано 7 марта, 2021 напишите мне, помогу вам Цитата Ссылка на сообщение Поделиться на другие сайты
daramal Опубликовано 8 марта, 2021 Автор Жалоба Поделиться Опубликовано 8 марта, 2021 On 3/7/2021 at 8:33 AM, ps-simpla said: напишите мне, помогу вам написал. пока тишина Цитата Ссылка на сообщение Поделиться на другие сайты
alexivchenko Опубликовано 9 марта, 2021 Жалоба Поделиться Опубликовано 9 марта, 2021 (изменено) В 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> Изменено 9 марта, 2021 пользователем alexivchenko Цитата Ссылка на сообщение Поделиться на другие сайты
daramal Опубликовано 9 марта, 2021 Автор Жалоба Поделиться Опубликовано 9 марта, 2021 (изменено) 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> Огромное спасибо. Ресайз создается! )) Изменено 9 марта, 2021 пользователем daramal Цитата Ссылка на сообщение Поделиться на другие сайты
alexivchenko Опубликовано 9 марта, 2021 Жалоба Поделиться Опубликовано 9 марта, 2021 (изменено) 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> Изменено 9 марта, 2021 пользователем alexivchenko Цитата Ссылка на сообщение Поделиться на другие сайты
daramal Опубликовано 9 марта, 2021 Автор Жалоба Поделиться Опубликовано 9 марта, 2021 (изменено) 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, а далее интересное происходит: При первом обновлении страницы сайта, ресайзные баннеры подтягиваются, но если после этого обновить в админке, то после этого и на сайте, и в админке все пропадает. Как будто происходит конфликт между файлами и система не понимает какой файл выводить )) Как быть в этом случае? Благодарю! Изменено 9 марта, 2021 пользователем daramal Цитата Ссылка на сообщение Поделиться на другие сайты
alexivchenko Опубликовано 9 марта, 2021 Жалоба Поделиться Опубликовано 9 марта, 2021 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; } Цитата Ссылка на сообщение Поделиться на другие сайты
alexivchenko Опубликовано 9 марта, 2021 Жалоба Поделиться Опубликовано 9 марта, 2021 не смог воспроизвести вашу ошибку, создал 4 группы по 4 картинки в каждой, размеры разные 500х500 600х600 700х700 800х800 Все картинки и группы отображаются Цитата Ссылка на сообщение Поделиться на другие сайты
daramal Опубликовано 9 марта, 2021 Автор Жалоба Поделиться Опубликовано 9 марта, 2021 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" Цитата Ссылка на сообщение Поделиться на другие сайты
alexivchenko Опубликовано 9 марта, 2021 Жалоба Поделиться Опубликовано 9 марта, 2021 15 минут назад, daramal сказал: смотрите, в шаблоне в админке указал, как Вы и привели 500:500. далее в шабоне, создал файл для вывода 1 группы баннеров и указал: {$banner->image|resize_banners:970:400} обновил страницу сайта, Ресайзные баннеры с папки preview отобразились. После этого, обновляю страницу в админке (в модули Баннеры), превьюшки тоже создаются. Далее обновляю страницу на сайте, и тут начинается глюк. Баннеры пропали, перехожу в амдминку, также обновляю страницу и превьюшки тоже исчезли, хотя путь к файлам правильный (у каждого ресайзного файла свой размер) и наводя на путь пишет: "Coul not load the image". Копирую путь вставляю в новую вкладку браузера, страница выдает: "bad token" Тут что-то индивидуальное Мне кажется, вы как-то не верно выводите группы на сайте Цитата Ссылка на сообщение Поделиться на другие сайты
daramal Опубликовано 9 марта, 2021 Автор Жалоба Поделиться Опубликовано 9 марта, 2021 (изменено) 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 очень нужен Изменено 9 марта, 2021 пользователем daramal Цитата Ссылка на сообщение Поделиться на другие сайты
daramal Опубликовано 9 марта, 2021 Автор Жалоба Поделиться Опубликовано 9 марта, 2021 Да, и предварительно в .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> Цитата Ссылка на сообщение Поделиться на другие сайты
daramal Опубликовано 9 марта, 2021 Автор Жалоба Поделиться Опубликовано 9 марта, 2021 (изменено) Заметил, что при нахождении копии ресайз-файла в .webp в папке preview, картинки исчезают с сайта. То есть при первом обновлении страницы картинки отображаются, при следующим обновлении исчезают. Странно все как-то. Решил проделать тоже самое с брендами, та же история: первый раз показываются, а потом уже нет, хотя ресайзы отлично создаются. Например, фото товаров отображаются нормально в .webp, а вот с баннерами и брендами все печально. Изменено 9 марта, 2021 пользователем daramal Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 10 марта, 2021 Жалоба Поделиться Опубликовано 10 марта, 2021 13 часов назад, daramal сказал: Например, фото товаров отображаются нормально в .webp, а вот с баннерами и брендами все печально. Ошибки такого плана - это вполне ожидаемое следствие принципиально неверного подхода. Ведь сейчас, кроме стандартного резайза для товаров, создано еще два - для блога и для баннеров. И создано дублированием кода, что, как известно, дает риск дополнительных ошибок. Надо бы создавать резайз как единый функционал, для всех или по крайней мере некоторых сущностей. Именно так сделано в Okay. Один товарищ выше в начале темы высказал мысль, что там плохо реализовано. Конечно, недостатки и там есть. Но тутошний метод по сравнению с тем, что у Okay, неизмеримо хуже. А тот товарищ про это пока не сообщает, видимо, двойные стандарты в действии... Причем если реализовывать единым функционалом, и разработка упростится, и работа станет более обозримой, и широта применения возрастет - одни плюсы. Тем более реально для этого почти все нужные функции в Simpla почти готовы... Цитата Ссылка на сообщение Поделиться на другие сайты
daramal Опубликовано 10 марта, 2021 Автор Жалоба Поделиться Опубликовано 10 марта, 2021 2 hours ago, phukortsin said: Ошибки такого плана - это вполне ожидаемое следствие принципиально неверного подхода. Ведь сейчас, кроме стандартного резайза для товаров, создано еще два - для блога и для баннеров. И создано дублированием кода, что, как известно, дает риск дополнительных ошибок. Надо бы создавать резайз как единый функционал, для всех или по крайней мере некоторых сущностей. Именно так сделано в Okay. Один товарищ выше в начале темы высказал мысль, что там плохо реализовано. Конечно, недостатки и там есть. Но тутошний метод по сравнению с тем, что у Okay, неизмеримо хуже. А тот товарищ про это пока не сообщает, видимо, двойные стандарты в действии... Причем если реализовывать единым функционалом, и разработка упростится, и работа станет более обозримой, и широта применения возрастет - одни плюсы. Тем более реально для этого почти все нужные функции в Simpla почти готовы... Да, полностью согласен с Вами. Все как-то частично реализовано, приходится колдовать. Было бы конечно здорово реализовать единый ресайз для всех картинок. А то получается всегда, что-то доделаешь, другое ломается )) Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.