Jump to content

Убираем Токен Из Адреса Изображения


Recommended Posts

Встретился сайт с таким кодом в 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 с использованием токенов работает точно и индивидуально с каждой картинкой. А предложенный здесь метод - глобально с размером, выставленным где-то хотя бы для одной картинки.

Легко придумать и другие подобные ситуации, где предложенный метод даст подобные ошибки.

 

Дополнительно ошибки могут возникать при использовании доработок для ресайза картинок, не относящихся к товарам...

Link to post
Share on other sites
  • Replies 103
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Дополнительно ошибки могут возникать при использовании доработок для ресайза картинок, не относящихся к товарам...

 

Это нужно уточнить в описании доработки.

 

Kors, у меня вопрос -- дефолтно разве кроме изображений товаров еще что-то ресайзится?

Edited by Maksclub
Link to post
Share on other sites
  • 6 months later...

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

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

 

в 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();
        }

 

Заранее спасибо. :D

Link to post
Share on other sites

Встретился сайт с таким кодом в 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 by DaVinci
Link to post
Share on other sites

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

 

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

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

Edited by ahmed
Link to post
Share on other sites
"быстренько" могу теоретически разложить эту совсем не сложную задачу

 

- суть ограничить ресайз картинок в определенных категориях

 

Путем не сложного запроса к базе проверяем иды товаров к которым относится данный файл, далее берем категории в которых участвует товар, если в одной из категорий есть ограничения по размерам берем их и проверяем на соответствие в запрашиваемых размерах. ВСЕ!

 

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

 

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

 

дело 10 минут. если для вас это сложно или вы хотите усложнить эту задачу дело ваше...

Edited by DaVinci
Link to post
Share on other sites

Путем не сложного запроса к базе проверяем иды товаров к которым относится данный файл, далее берем категории в которых участвует товар, если в одной из категорий есть ограничения по размерам берем их и проверяем на соответствие в запрашиваемых размерах. ВСЕ!

 

"если в одной из категорий есть ограничения по размерам" - А что это такое, не очень понятно. Если Вы собираетесь УСТАНАВЛИВАТЬ возможность таких ограничений, то это можно делать очень по-разному.  Если можно, конкретизируйте свое видение...

Link to post
Share on other sites

"если в одной из категорий есть ограничения по размерам" - А что это такое, не очень понятно. Если Вы собираетесь УСТАНАВЛИВАТЬ возможность таких ограничений, то это можно делать очень по-разному.  Если можно, конкретизируйте свое видение...

 

вы читаете не внимательно:

 

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

Edited by DaVinci
Link to post
Share on other sites

"если в одной из категорий есть ограничения по размерам" - А что это такое, не очень понятно. Если Вы собираетесь УСТАНАВЛИВАТЬ возможность таких ограничений, то это можно делать очень по-разному.  Если можно, конкретизируйте свое видение...

 

Обратите внимание на название темы! Я прокомментировал возможность ограничить размеры для каждой категории но это не говорит о том что обсуждаемый вопрос относится к данной теме. Реализация ограничения крайне проста, я ответил как это можно реализовать и этого достаточно. Если у вас есть интерес ко всем возможным реализациям ограничения размеров ресайза - создайте соответствующую тему и ждите собеседников. Прошу вас вести дискуссию относящуюся к первому посту данной темы.

 

Ранее Корс отметил

 

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

 

все именно так. 

Edited by DaVinci
Link to post
Share on other sites

вы читаете не внимательно:

 

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

 

Не очень понятно. Имеете и виду, что в админке у категории создать поле, в которое вписывать размеры? Или что иное?

 

Может, если это так несложно, выложите полный код вместо общих фраз? Быстрее было бы...

 

А вопрос в чистом виде как раз по теме. Ибо в первом посте темы сказано "но при это запретить произвольную нарезку изображений".   А пока выходит, что произвольная нарезка как раз и не запрещена - пример дан в #47...

Link to post
Share on other sites

Не очень понятно. Имеете и виду, что в админке у категории создать поле, в которое вписывать размеры? Или что иное?

 

Может, если это так несложно, выложите полный код вместо общих фраз? Быстрее было бы...

 

А вопрос в чистом виде как раз по теме. Ибо в первом посте темы сказано "но при это запретить произвольную нарезку изображений".   А пока выходит, что произвольная нарезка как раз и не запрещена - пример дан в #47...

 

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

Link to post
Share on other sites

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

 

Это не "уточню". Это значит - запутаю еще дальше, написав явно бессмысленную фразу. Потому как в Simpla  стандартно в настройках сайта не задается никаких размеров.

Link to post
Share on other sites

Это не "уточню". Это значит - запутаю еще дальше, написав явно бессмысленную фразу. Потому как в Simpla  стандартно в настройках сайта не задается никаких размеров.

 

запутываю? Функциональность и смысл дополнения с первой публикации не изменилась. При чем тут стандартная симпла и то чего в ней нет не понятно... 

 

если бы вы внимательней были то обратили бы внимание на то что размеры хранятся в переменной $this->settings->image_sizes, и смысл фразы заключался в том что если в этой переменной нет запрашиваемых размеров то ресайх не состоится

 

ahmed, судя по всему вам просто не с кем пообщаться. надеюсь после прочтения данного поста пройдете мимо этой темы, потому как внести в обсуждение что то новое, кроме своей занудности, вы не в состоянии. Если вы думаете что мне не понятно с кем я общаюсь это не так, вам бы вместо того что бы заводить кучу левых аккаунтов на форме и писать всякую чушь просто прогуляться и подышит свежим воздухом.

Edited by DaVinci
Link to post
Share on other sites

Это не "уточню". Это значит - запутаю еще дальше, написав явно бессмысленную фразу. Потому как в Simpla  стандартно в настройках сайта не задается никаких размеров.

 

ну е-мае, Ахмед, ну доработай, предложи... какого лешего критиковать БЕСПЛАТНУЮ доработку?

Ты на Гитхабе также только в Issue строчишь с гневом? Или все же коммиты кидаешь для поддержки проекта?

 

 

Решение из первого поста ставлю практически сразу после установки Симплы.... да -- Корс как всегда чутко нашел косяк, ну а разве его не может быть?

Link to post
Share on other sites

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

 

А что Вы понимаете под "настройками сайта"? Добавленное разработкой значение $this->settings->image_sizes ?

ИМХО, настройки, это то, что можно менять (настраивать).  А в текущей доработке, кажется,  нигде нет явной  возможности менять этот этот список разрешенных размеров...

Link to post
Share on other sites

А что Вы понимаете под "настройками сайта"? Добавленное разработкой значение $this->settings->image_sizes ?

ИМХО, настройки, это то, что можно менять (настраивать).  А в текущей доработке, кажется,  нигде нет явной  возможности менять этот этот список разрешенных размеров...

 

вы не правы - список доступных размеров дополняется автоматически. факт того что нет редактора доступных размеров не лишает эту переменную возможности хранить настроены размеры. ваше понимание настроек для меня не уместно.

Edited by DaVinci
Link to post
Share on other sites

вы не правы - список доступных размеров дополняется автоматически. факт того что нет редактора доступных размеров не лишает эту переменную возможности хранить настроены размеры. ваше понимание настроек для меня не уместно.

 

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

Link to post
Share on other sites

Давайте Корса вновь забаним? Кто за?

 

Я ЗА!

 

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

 

вы правы, это стоит учесть. чуть позже...

Link to post
Share on other sites

Еще один метод

 

размеры изображений назначаются в макете, если файла не существует функция 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 by DaVinci
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...