LINUX.ORG.RU

Drupal, Services, REST, добавить файл к ноде


0

1

Мужики, кто-то добавлял файл к созданной ноде? Замена файла замечательно работает через PUT, но чтобы в уже готовую ноду засандалить файл - такое не прокатывает. Попытки постить что-то на эндпоинт endpoint/node/«nodenumber»/attach_file тоже ни к чему не приводят. Есть мастера друпала тут? Или REST это некий стандарт и где-то можно почитать, как во всём мире хреначат файлы?
Дополнение: засандалить его надо туда кодом на пхп или json-запросом, всякие формы не канают

★★

Последнее исправление: OldWiseCat (всего исправлений: 1)

Специально для тебя залез в исходники

'Upload and attach file(s) to a node. POST multipart/form-data to node/123/attach_file'

anonymous
()
Ответ на: комментарий от kernel

Мне нужно взять curl и добавить файл к уже созданной ноде. Проблема в том, что запросы PUT c аргументами:

{
 "field_response_files": 
       [
                { 
                    "fid": "119", "alt": "sometext", "title": "sometext"
                }
            ]
       
}
В ответ получают 200 OK, но файл не добавляется к ноде. В таблицу управляемых файлов он загружается другим запросом отлично и такой фид существует

OldWiseCat ★★
() автор топика
Ответ на: комментарий от kernel

Даже не так. Проблема в том, что когда в поле типо Файл можно прикреплять несколько файлов, то PUT туда не работает. Код запроса:

{"field_response_files":{"und": { "0": { "fid": 119, "alt": "sometext", "title": "sometext"} } } }

OldWiseCat ★★
() автор топика
Ответ на: комментарий от anonymous

Нет, так тоже не катит. Обозначу проблему по другому: залить файл на сервер вообще не проблема, в результате я получаю его FID. Проблема добавить файл по FID к ноде, причём проблема появляется тогда, когда поле файл в ноде может содержать больше одного файла. Если поле может содержать только один файл, то он прекрасно добавляется и проблем никаких нет.
Я нашёл такой багрепорт: http://drupal.org/node/1434312

OldWiseCat ★★
() автор топика
Ответ на: комментарий от kernel

Ну а смысл мне велосипедить сайт на друпале если не использовать модули? Мне это их меню уже не упёрлось никуда, такое ТЗ, и под сервисес этот уже код написан

OldWiseCat ★★
() автор топика
Ответ на: комментарий от OldWiseCat

Ну а смысл мне велосипедить сайт на друпале если не использовать модули?

Смысл друпала (с его модулями) именно в этом - чего *тебе лично вот тут* удобнее. Голова вам для чего дадена - кашу в нее есть? :D

Удобнее только на готовых модулях сделать - так и делать. Удобнее мелкий модуль на пару строк php кода - окей.

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

велосипедить

Вы действительно будете мне сейчас доказывать что в кодовой базе размером с друпал+кастомные модули 3.5 строчки это ужасный велосипед? Что, правда-правда? А потом будете тут в инторнетах доказывать что необходимость этих 3.5 строчек вынесенных в отдельный модуль и не требующие патчей, делает друпал ужасным? :D

Мне это их меню уже не упёрлось никуда, такое ТЗ, и под сервисес этот уже код написан

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

И вы в этот эффект вбухали бабла(времени) больше чем с проекта заработали, уже небось. Но только причем тут коммерческое программирование и зарабатывание денег?

PS
Ну вы скажите - можете вы чего-то то пихать на серверсайд или нет? Если нет - придется да, выяснять «а чего он глючит». Возможно он просто «не может».

Если можно лазать на серверсайд - сделать однострочник связывающий по запросу fid с nid - в два счета. никакого sql - node_load, поправил структуру - node_save.

kernel ★★☆
()
Ответ на: комментарий от kernel

Да, я могу лазить на серверсайд. Да, я хочу чтоб было красиво и чтоб посанам дать доступ к API. Интересующие меня события происходят в файле node_resource.inc в функции _node_resource_update, но на точку останова там отладчик не реагирует почему-то, как и на точку останова в функции services_endpoint_callback, что в services.module. Можно как-то его там остановить или надо писать самому ручками дамп переменных в файл, дабы вообще узнать что там происходит?

OldWiseCat ★★
() автор топика
Ответ на: комментарий от OldWiseCat

IDE - NetBeans.
Отладку GET и POST можно проводить переходя по специально подготовленной ссылке в браузере, тогда на точке останова происходит таки остановка в отладчике, но тут же используется PUT (ещё одна проблема, все изменения в созданной ноде через REST - только PUT)

OldWiseCat ★★
() автор топика
Последнее исправление: OldWiseCat (всего исправлений: 1)
Ответ на: комментарий от OldWiseCat

В модуле Devel обнаружилась функция

dd($var, $label = null)

Записывает информацию о переменной в файл drupal_debug.txt, который находится во временной директории (admin/settings/file-system).

OldWiseCat ★★
() автор топика
Ответ на: комментарий от OldWiseCat

И история благополучно кончилась заплаткой

OldWiseCat ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.