Kors Posted October 1, 2016 Report Share Posted October 1, 2016 Встретился сайт с таким кодом в product.tpl {if category->id==65} {$product->image->filename|resize:1200:1200} {else} {$product->image->filename|resize:400:400} {/if} Задумка проста: захотелось показать в одной категории картинки большего размера 1200х1200, а в прочих - меньшего 400х400. В этой несложной ситуации предложенный метод будет разрешать каждый из ресайзов 1200х1200, 400х400 для ВСЕХ картинок... Выходит так: стандартный метод Simpla с использованием токенов работает точно и индивидуально с каждой картинкой. А предложенный здесь метод - глобально с размером, выставленным где-то хотя бы для одной картинки.Легко придумать и другие подобные ситуации, где предложенный метод даст подобные ошибки. Дополнительно ошибки могут возникать при использовании доработок для ресайза картинок, не относящихся к товарам... Quote Link to post Share on other sites
Maksclub Posted October 2, 2016 Report Share Posted October 2, 2016 (edited) Дополнительно ошибки могут возникать при использовании доработок для ресайза картинок, не относящихся к товарам... Это нужно уточнить в описании доработки. Kors, у меня вопрос -- дефолтно разве кроме изображений товаров еще что-то ресайзится? Edited October 2, 2016 by Maksclub Quote Link to post Share on other sites
Kors Posted October 2, 2016 Report Share Posted October 2, 2016 В Simpla дефолтно, кроме изображений товаров, ничего не ресайзится. Quote Link to post Share on other sites
Igoresh Posted April 5, 2017 Report Share Posted April 5, 2017 Уважаемые Гуру, извините, что опять с глупыми вопросами, не очень силен в коде, но много чего уже сделал по Вашим доработкам.По этой есть вопрос, можно ли поподробнее указать после каких строк в файлах вставлять эти коды: в Design.php добавляем код $size = ($width?$width:0).'x'.($height?$height:0).($set_watermark?"w":''); $image_sizes = array(); if($this->settings->image_sizes) $image_sizes = explode('|',$this->settings->image_sizes); if(!in_array($size, $image_sizes)){ $image_sizes[] = $size; $this->settings->image_sizes = implode('|',$image_sizes); } В Image.php добавляем код $size = ($width?$width:0).'x'.($height?$height:0).($set_watermark?"w":''); $image_sizes = array(); if($this->settings->image_sizes) $image_sizes = explode('|',$this->settings->image_sizes); if(!in_array($size, $image_sizes)){ header("http/1.0 404 not found"); exit(); } Заранее спасибо. Quote Link to post Share on other sites
DaVinci Posted April 5, 2017 Author Report Share Posted April 5, 2017 Design.php Image.php Quote Link to post Share on other sites
DaVinci Posted April 5, 2017 Author Report Share Posted April 5, 2017 (edited) Встретился сайт с таким кодом в product.tpl {if category->id==65} {$product->image->filename|resize:1200:1200} {else} {$product->image->filename|resize:400:400} {/if} Задумка проста: захотелось показать в одной категории картинки большего размера 1200х1200, а в прочих - меньшего 400х400. В этой несложной ситуации предложенный метод будет разрешать каждый из ресайзов 1200х1200, 400х400 для ВСЕХ картинок... Выходит так: стандартный метод Simpla с использованием токенов работает точно и индивидуально с каждой картинкой. А предложенный здесь метод - глобально с размером, выставленным где-то хотя бы для одной картинки.Легко придумать и другие подобные ситуации, где предложенный метод даст подобные ошибки. Дополнительно ошибки могут возникать при использовании доработок для ресайза картинок, не относящихся к товарам... для этого необходимо для каждой категории назначить доступные размеры, и при ресайзе проверять к какой категории относится товар, ничего сложного Edited April 5, 2017 by DaVinci Quote Link to post Share on other sites
ahmed Posted April 5, 2017 Report Share Posted April 5, 2017 (edited) для этого необходимо для каждой категории назначить доступные размеры, и при ресайзе проверять к какой категории относится товар, ничего сложного Если для Вас в этом "ничего сложного", попробуйте быстренько написать инструкцию.Думаю, потом будет забавная дискуссия об ошибках и исправлениях (подсказка - грубую логическую ошибку Вы допускаете даже в цитированной фразе)... Edited April 5, 2017 by ahmed Quote Link to post Share on other sites
DaVinci Posted April 5, 2017 Author Report Share Posted April 5, 2017 (edited) "быстренько" могу теоретически разложить эту совсем не сложную задачу - суть ограничить ресайз картинок в определенных категориях Путем не сложного запроса к базе проверяем иды товаров к которым относится данный файл, далее берем категории в которых участвует товар, если в одной из категорий есть ограничения по размерам берем их и проверяем на соответствие в запрашиваемых размерах. ВСЕ! в первую очередь в настройки сайта поступают доступные размеры, если задан не доступный ресайза не будет, если задан размер которого нет в категории к которой относится товар, которому в свою очередь принадлежит файл, ресайза не будет. что тут сложного то? достаточно вывести в настройки категории все доступные размеры и отметить те которые доступны для конкретной категории, если же выбора нет значит доступны все. при смене размеров в категории чистим папку с ресайзами. дело 10 минут. если для вас это сложно или вы хотите усложнить эту задачу дело ваше... Edited April 5, 2017 by DaVinci Quote Link to post Share on other sites
ahmed Posted April 5, 2017 Report Share Posted April 5, 2017 Путем не сложного запроса к базе проверяем иды товаров к которым относится данный файл, далее берем категории в которых участвует товар, если в одной из категорий есть ограничения по размерам берем их и проверяем на соответствие в запрашиваемых размерах. ВСЕ! "если в одной из категорий есть ограничения по размерам" - А что это такое, не очень понятно. Если Вы собираетесь УСТАНАВЛИВАТЬ возможность таких ограничений, то это можно делать очень по-разному. Если можно, конкретизируйте свое видение... Quote Link to post Share on other sites
DaVinci Posted April 5, 2017 Author Report Share Posted April 5, 2017 (edited) "если в одной из категорий есть ограничения по размерам" - А что это такое, не очень понятно. Если Вы собираетесь УСТАНАВЛИВАТЬ возможность таких ограничений, то это можно делать очень по-разному. Если можно, конкретизируйте свое видение... вы читаете не внимательно: достаточно вывести в настройки категории все доступные размеры и отметить те которые доступны для конкретной категории Edited April 5, 2017 by DaVinci Quote Link to post Share on other sites
DaVinci Posted April 5, 2017 Author Report Share Posted April 5, 2017 (edited) "если в одной из категорий есть ограничения по размерам" - А что это такое, не очень понятно. Если Вы собираетесь УСТАНАВЛИВАТЬ возможность таких ограничений, то это можно делать очень по-разному. Если можно, конкретизируйте свое видение... Обратите внимание на название темы! Я прокомментировал возможность ограничить размеры для каждой категории но это не говорит о том что обсуждаемый вопрос относится к данной теме. Реализация ограничения крайне проста, я ответил как это можно реализовать и этого достаточно. Если у вас есть интерес ко всем возможным реализациям ограничения размеров ресайза - создайте соответствующую тему и ждите собеседников. Прошу вас вести дискуссию относящуюся к первому посту данной темы. Ранее Корс отметил Выходит так: стандартный метод Simpla с использованием токенов работает точно и индивидуально с каждой картинкой. А предложенный здесь метод - глобально с размером, выставленным где-то хотя бы для одной картинки. все именно так. Edited April 5, 2017 by DaVinci Quote Link to post Share on other sites
ahmed Posted April 5, 2017 Report Share Posted April 5, 2017 вы читаете не внимательно: достаточно вывести в настройки категории все доступные размеры и отметить те которые доступны для конкретной категории Не очень понятно. Имеете и виду, что в админке у категории создать поле, в которое вписывать размеры? Или что иное? Может, если это так несложно, выложите полный код вместо общих фраз? Быстрее было бы... А вопрос в чистом виде как раз по теме. Ибо в первом посте темы сказано "но при это запретить произвольную нарезку изображений". А пока выходит, что произвольная нарезка как раз и не запрещена - пример дан в #47... Quote Link to post Share on other sites
DaVinci Posted April 5, 2017 Author Report Share Posted April 5, 2017 Не очень понятно. Имеете и виду, что в админке у категории создать поле, в которое вписывать размеры? Или что иное? Может, если это так несложно, выложите полный код вместо общих фраз? Быстрее было бы... А вопрос в чистом виде как раз по теме. Ибо в первом посте темы сказано "но при это запретить произвольную нарезку изображений". А пока выходит, что произвольная нарезка как раз и не запрещена - пример дан в #47... хорошо, уточню – запретить произвольную нарезку изображений, тех размеров, которые не заданы в настройках сайта Quote Link to post Share on other sites
ahmed Posted April 5, 2017 Report Share Posted April 5, 2017 хорошо, уточню – запретить произвольную нарезку изображений, тех размеров, которые не заданы в настройках сайта Это не "уточню". Это значит - запутаю еще дальше, написав явно бессмысленную фразу. Потому как в Simpla стандартно в настройках сайта не задается никаких размеров. Quote Link to post Share on other sites
DaVinci Posted April 5, 2017 Author Report Share Posted April 5, 2017 (edited) Это не "уточню". Это значит - запутаю еще дальше, написав явно бессмысленную фразу. Потому как в Simpla стандартно в настройках сайта не задается никаких размеров. запутываю? Функциональность и смысл дополнения с первой публикации не изменилась. При чем тут стандартная симпла и то чего в ней нет не понятно... если бы вы внимательней были то обратили бы внимание на то что размеры хранятся в переменной $this->settings->image_sizes, и смысл фразы заключался в том что если в этой переменной нет запрашиваемых размеров то ресайх не состоится ahmed, судя по всему вам просто не с кем пообщаться. надеюсь после прочтения данного поста пройдете мимо этой темы, потому как внести в обсуждение что то новое, кроме своей занудности, вы не в состоянии. Если вы думаете что мне не понятно с кем я общаюсь это не так, вам бы вместо того что бы заводить кучу левых аккаунтов на форме и писать всякую чушь просто прогуляться и подышит свежим воздухом. Edited April 5, 2017 by DaVinci Quote Link to post Share on other sites
Maksclub Posted April 5, 2017 Report Share Posted April 5, 2017 Это не "уточню". Это значит - запутаю еще дальше, написав явно бессмысленную фразу. Потому как в Simpla стандартно в настройках сайта не задается никаких размеров. ну е-мае, Ахмед, ну доработай, предложи... какого лешего критиковать БЕСПЛАТНУЮ доработку?Ты на Гитхабе также только в Issue строчишь с гневом? Или все же коммиты кидаешь для поддержки проекта? Решение из первого поста ставлю практически сразу после установки Симплы.... да -- Корс как всегда чутко нашел косяк, ну а разве его не может быть? Quote Link to post Share on other sites
ahmed Posted April 5, 2017 Report Share Posted April 5, 2017 хорошо, уточню – запретить произвольную нарезку изображений, тех размеров, которые не заданы в настройках сайта А что Вы понимаете под "настройками сайта"? Добавленное разработкой значение $this->settings->image_sizes ?ИМХО, настройки, это то, что можно менять (настраивать). А в текущей доработке, кажется, нигде нет явной возможности менять этот этот список разрешенных размеров... Quote Link to post Share on other sites
DaVinci Posted April 5, 2017 Author Report Share Posted April 5, 2017 (edited) А что Вы понимаете под "настройками сайта"? Добавленное разработкой значение $this->settings->image_sizes ?ИМХО, настройки, это то, что можно менять (настраивать). А в текущей доработке, кажется, нигде нет явной возможности менять этот этот список разрешенных размеров... вы не правы - список доступных размеров дополняется автоматически. факт того что нет редактора доступных размеров не лишает эту переменную возможности хранить настроены размеры. ваше понимание настроек для меня не уместно. Edited April 5, 2017 by DaVinci Quote Link to post Share on other sites
Noxter Posted April 5, 2017 Report Share Posted April 5, 2017 Давайте Корса вновь забаним? Кто за? Quote Link to post Share on other sites
Kosjak76 Posted April 5, 2017 Report Share Posted April 5, 2017 Он долго держался))Но натура берет свое... Quote Link to post Share on other sites
ahmed Posted April 5, 2017 Report Share Posted April 5, 2017 вы не правы - список доступных размеров дополняется автоматически. факт того что нет редактора доступных размеров не лишает эту переменную возможности хранить настроены размеры. ваше понимание настроек для меня не уместно. Но это лишает админа настраивать эту переменную полностью как надо. Например, если в ней записан размер 850х650, который уже неактуален, то нет удобной возможности его удалить, но зато есть возможность недоброжелателям занимать дисковое пространство бесполезными изображениями... Quote Link to post Share on other sites
DaVinci Posted April 5, 2017 Author Report Share Posted April 5, 2017 Давайте Корса вновь забаним? Кто за? Я ЗА! Но это лишает админа настраивать эту переменную полностью как надо. Например, если в ней записан размер 850х650, который уже неактуален, то нет удобной возможности его удалить, но зато есть возможность недоброжелателям занимать дисковое пространство бесполезными изображениями... вы правы, это стоит учесть. чуть позже... Quote Link to post Share on other sites
Maksclub Posted April 5, 2017 Report Share Posted April 5, 2017 (edited) Я ЗА! а я против, для бана не вижу причин, ведь спор по теме, без личных оскорблений в стиле Нокстера Edited April 5, 2017 by Maksclub Quote Link to post Share on other sites
Noxter Posted April 5, 2017 Report Share Posted April 5, 2017 Он мозг всем выносит Quote Link to post Share on other sites
DaVinci Posted April 6, 2017 Author Report Share Posted April 6, 2017 (edited) Еще один метод размеры изображений назначаются в макете, если файла не существует функция resize_modifier формирует название изображения с размерами и токеном для проверки. Смысл в том что бы отправить токет в сессию, после в resize.php проверить наличие этой сессии. если изображение вызвано напрямую с несуществующими размерами то сессии с данным токеном нет, а значит ресайз не состоится.в api/Design.php меняем функцию 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); $token = $this->config->token($resized_filename); if(empty($_SESSION['images_tokens']) || !in_array($token, $_SESSION['images_tokens'])) $_SESSION['images_tokens'][] = $token; return $this->config->root_url.'/'.$this->config->resized_images_dir.$resized_filename_encoded/*.'?'.$this->config->token($resized_filename)*/; }в resize/resize.php <?php session_start(); require_once('../api/Simpla.php'); $filename = $_GET['file']; $simpla = new Simpla(); $token = $simpla->config->token($filename); if(empty($_SESSION['images_tokens']) || !in_array($token, $_SESSION['images_tokens'])) exit('bad token'); $resized_filename = $simpla->image->resize($filename); if(is_readable($resized_filename)) { header('Content-type: image'); print file_get_contents($resized_filename); }в index.php сразу после session_start(); unset($_SESSION['images_tokens']); Edited April 6, 2017 by DaVinci Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.