Привязка вложений к вновь создаваемому материалу

surg30n

Новичок
Привязка вложений к вновь создаваемому материалу

Имеем несколько видов текстового контента (статьи, новости, и т.п.). Для всех этих материалов нужно иметь возможность
прицеплять вложения в виде, например файлов с заголовком и описанием. Эти вложения загружаются универсальным загрузчиком и связываются с контентом связью один-ко-многим content.id <-- attach.pid,

На странице создания контента мы еще не знаем ID, который будет присвоен элементу только после создания (коммита в базу),
что не позволяет нам загружать вложения, так как не известен ID родителя.

Есть варианты:

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

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

3. Давать возможность цеплять вложения только на странице правки и запрещать на странице создания. что не есть гут.

4. ЭОС

Кто как поступает в таких случаях?
 

craz

Нестандартное звание
На странице создания контента мы еще не знаем ID, который будет присвоен элементу только после создания (коммита в базу),
что не позволяет нам загружать вложения, так как не известен ID родителя.
А почему не знаете? Чисто из любопытсва? У вас же есть таблица в ней content.id - можно вычислить следующий по счету инкремент этого поля...

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

surg30n

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

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

Духовность™

Продвинутый новичок
А почему не знаете? Чисто из любопытсва? У вас же есть таблица в ней content.id - можно вычислить следующий по счету инкремент этого поля...
это пестец, а не решение. Так нельзя делать.

3. Давать возможность цеплять вложения только на странице правки и запрещать на странице создания. что не есть гут.
ну я так делал.

surg30n не такой же вопрос? http://phpclub.ru/talk/showthread.php?s=&threadid=120424&rand=28
 

zerkms

TDD infected
Команда форума
surg30n
При создании сущности в хидден поле формы генерится произвольный хэш.

В таблицу аттачей добавляем также поле хэша.

При заливке файла хэш заполняем, а content_id, соответственно, нет.

При сохранении контента - уже сам понимаешь что делаем.
 

craz

Нестандартное звание
это пестец, а не решение. Так нельзя делать.
Аргументы? Можно держать темповые данные где то, то есть резервировать ключ зашел в рактилку начит уже никто не может с таким же ключом зайти... Какая то проблема странная не сталкивался я с такой наверное...
 

zerkms

TDD infected
Команда форума
craz
расскажи как ты вычислишь следующий аргумент.
а после этого представь ситуацию, когда статью создают 2 человека одновременно.
 

Фанат

oncle terrible
Команда форума
craz
вот за такие советы надо палкой бить по голове

-~{}~ 24.09.10 14:06:

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

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

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

surg30n

Новичок
zerkms
Хорошее решение, возьму на вооружение.

Как боретесь с мусором, если пользователи создают вложения, но не сохраняют материал, к которому они относятся?
 

Urville

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

craz

Нестандартное звание
не кричите

obj_page
id|parent_id|sort|title|top|bottom|fotogal|alias|addon

addon к примеру

obj_text
id|parent_id|sort|text|title

вяжется к obj_page
в паренте содержит id страницы

Вопрос это вот как раз плохо?
 

iceman

говнокодер
surg30n
загрузив файлы на сервер, ты знаешь их ИДишники, если аяксом грузил, то передай эти идшники в хидден инпуты и при создание статьи они придут к тебе в ПОСТ =)

-~{}~ 24.09.10 17:53:

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

зачем держать еще чтото, когда можно обойтись без этого?
 

craz

Нестандартное звание
craz
> Аргументы? Можно держать темповые данные где то, то есть резервировать ключ зашел в рактилку начит уже никто не может с таким же ключом зайти... Какая то проблема странная не сталкивался я с такой наверное...

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

Короче по моей реализации, там наверное грубо да получаеться? Пока нет страницы привязать к ней какой нить адон не получиться... - это не подходит для таких задач?
 

zerkms

TDD infected
Команда форума
craz
откуда берётся id страницы до того как она была создана?

iceman
и вот таким вот нехитрым способом можно наворовать чужих картинок и потом поступить с ними по своему хотению )
 

craz

Нестандартное звание
Автор оригинала: zerkms
craz
откуда берётся id страницы до того как она была создана?
нет страницы нет айди, зачем к тому что не существует что-то прикреплять?


А если представить что не один файл а 10^10 и грузяться они автоматически, получаем харнилище не используемых данных?
 

zerkms

TDD infected
Команда форума
нет страницы нет айди, зачем к тому что не существует что-то прикреплять?
затем, что аттачи прикрепляются к статье ещё до того, как она была создана, в процессе её набора. хватит тупить.
 

craz

Нестандартное звание
затем, что аттачи прикрепляются к статье ещё до того, как она была создана, в процессе её набора. хватит тупить.
хорош блин орать!

нормально же разговариваю

Короче отложеный атачмент не катит?
 

zerkms

TDD infected
Команда форума
Куда отложенный?

Т.е. сначала набирается статья, сохраняется, потом повторно редактируется с целью залить картинки?

Нет, не катит.
 
Сверху