Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Нужна идея или совет


Recommended Posts

Диспозиция:

1) У продукта могут быть только два изображения - основное и одно дополнительное, в соответствующих таблицах, которые тут всем известны, прописанные.

2) Основное изображение в конечном итоге будет типа PNG с прозрачностью, но изначально может быть и JPEG, как ранее определенное.

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

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

5) Добавлен класс транслита по "правилам" Яндекса и при сохранении продукта его имя проходит через транслит и результат транслита подставляется в поле SEO пришедшей формы, а также:

   а) имена всех каталогов продукта (от владельца до верхнего уровня категории продуктов) проходят транслит, из них формируется путь, к которому подставляется имя продукта

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

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

6) Перед обращением к модели сохраняющей изменения, в добавленный метод отдаются два массива:

    а) нового файла, это под ключом 'dirname' сформированный по именам каталогов путь и под ключом 'filename' имя продукта, то есть, это не изображение под расширением, это только имя

    б) старые, существующие пути, взятые из соответствующих таблиц продукта (и могут быть пусты), под ключом 'main' имя основного изображения, под ключом 'add' дополнительного

 

И вот в этом методе логика обработки не нравится мне, чую что есть "дыра" в ней, и рано или поздно будут косяки. Работает так:

 

1) Путь/имя новое через pathinfo(). В данном случае оно и не нужно было бы, но это заложено для того чтобы использовать этот метод для переноса файлов при смене каталогов.

2) Массив старых путей обходом в цикле, в котором

   а) текущий файл через pathinfo(), и проверяется: если 'dirname' нового и старого путей не равны, или 'extension' есть в новом пути (при редактировании его нет, как я писал выше) и оно не равно 'extension' старого пути (это как раз проверка при смене JPEG на PNG) или разница текущего времени и времени последнего изменения старого пути в пределах не более одного часа, то:

 

1) rename(старый путь, новый путь и если ключ 'add', то добавить к имени фиксированный размер)

2) если по старому пути есть "эскизы малые" изображений, то они удаляются

3) если после операций переименования/удаления эскизов каталог пуст, то удаляем его

 

Оно вроде бы работает, но, был косяк, когда при сохранении основного изображения и тоже формата JPEG исчезло дополнительное. Но в момент когда я щелкал и выбирал файлы для продукта, что-то случилось с мышкой, после чего она "прилипла" к нижнему левому углу экрана и ни за что оттуда не убиралась, даже выше панели задач не выходила (это все десятка мать ее). В общем после борьбы с "железом" проверял всякие вариации, такого не наблюдалось, и остается только гадать, либо это был косяк системный/железа, либо все-таки есть "косяк" в моей логике. Более всего меня напрягает проверка по времени, ну как еще можно определить, что файл изменился при равенстве имен. Может есть другие идеи, вообще иной подход?

 

 

 

 

 

Змінено користувачем asmus
Надіслати
Поділитися на інших сайтах


30 минут назад, asmus сказал:

как еще можно определить, что файл изменился при равенстве имен

     $timestamp=max(filemtime($file), 0);
     $last_modified=gmdate('D, d M Y H:i:s', $timestamp).' GMT';

Надіслати
Поділитися на інших сайтах

Ну в общем я так тоже писал, проще метки времени проверить, ну или интервал в DateInterval.Тут я не так выразился, проблема не в том как получать время, а скорее в том "когда определять" его. :) То есть он может загрузить файл, а потом чесать репу или слоняться бог знает где время, а только потом сохранить. Все усугубляется тем, что нужно это определять гарантированно и вот почему.

 

Это производство модульных картин. До этого у них был просто кошмар с опциями и их значениями, что Opencart предлагает. У них из-за этих опций около 5000 изображений бесхозных в базе обнаружил, а в каталогах там вообще черт ногу сломит. Поэтому и добавлено удаление при изменениях, переносах ... Весь этот хлам с опциями я удалил, все сделано с использованием SVG. По координатам готовятся svg-маски для отображения модулей на странице, и svg-иконки модулей для списков. Все это хранится в добавленных таблицах. Модули я условно разделил на базовые и индивидуальные. Базовые, это кто-то им делал до этого, просто в common.js прописаны координаты из под CorelDraw приготовленные. Кошмар неописуемый, да еще и с ошибками, их отредактировал и это есть базовый. Индивидуальный, это я сделал редактор в админку для их изготовления, ну то есть canvas и прочее от JS.

 

А еще к порядку относится то, что нельзя же любой модуль "натянуть" на любое изображение, если он масштабируется пропорционально, это понятно. Также нельзя модуль для альбомной ориентации применять к портретной, и отношение сторон изображения и модуля не должны отличаться на максимум 0,1 - 0,2. Также нельзя применять индивидуальные модули другим продуктам. Ориентацию и отношения проверить конечно легко, если они не отвечают условиям, то определенные для продукта модули нужно удалять из базы.Но как быть, если и ориентация та же, и отношения в пределах нормы, и имя осталось тем же (о путях можно не говорить, они вообще редко будут меняться), а изображение изменилось? Ведь не только выше указанные параметры определяют "нельзя", но еще и содержимое изображений. На одном какой либо модуль будет нормальным, а на другом "глаз баба потеряет". :)

 

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

 

   

Змінено користувачем asmus
Надіслати
Поділитися на інших сайтах


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

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.