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

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


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

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

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

 

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

Ссылка на сообщение
Поделиться на другие сайты
  • Ответов 103
  • Дата создания
  • Последний ответ

Лучшие авторы в теме

Лучшие авторы в теме

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

 

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

 

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

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

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

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

 

в 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

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

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

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

 

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

 

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

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

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

 

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

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

Изменено пользователем ahmed
Ссылка на сообщение
Поделиться на другие сайты
"быстренько" могу теоретически разложить эту совсем не сложную задачу

 

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

 

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

 

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

 

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

 

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

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

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

 

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

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

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

 

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

 

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

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

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

 

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

 

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

 

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

 

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

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

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

 

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

 

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

 

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

 

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

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

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

 

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

 

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

 

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

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

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

 

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

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

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

 

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

 

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

 

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

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

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

 

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

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

 

 

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

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

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

 

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

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

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

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

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

 

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

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

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

 

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

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

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

 

Я ЗА!

 

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

 

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

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

Я ЗА!

 

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

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

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

 

размеры изображений назначаются в макете, если файла не существует функция 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']);
Изменено пользователем DaVinci
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

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

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

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