Друзья, есть такой вопрос.
У меня есть 2 таблички в базе: drivers (метаданные скачанных драйверов) и driverfiles (информация о хранящихся файлах этих драйверов) Табличка drivers связана с driverfiles по file_id.
Как создавать собственный тип материала (ноды) на основе этих двух табличек?
Что бы в админке была возможность редактирования полученных данных из этих табличек и последующего создания представления для этого типа материала?
Есть ли в Drupal 7 такая возможность и с чего следует начать?
Комментарии
Мне кажется, лучшим решением будет создать нужный вам тип материала с нужными полями и программно мигрировать туда контент из ваших кастомных таблиц (эти таблицы потом удалить) и дальше уже работать с нодами как обычно. Сможете и views использовать и что угодно
Все дело в том, что существует робот (написанный не мной) который регулярно тянет драйвера со стороннего сайта и обновляет информацию о них, в том числе и эти две таблички. По этому и возникает необходимость работы именно с этими двумя табличками.
А переписать код этого робота возможно? Чтобы он сразу создавал ноды и добавлял в них данные вместо записи в эти кастомные таблицы?
У меня нет доступов к роботу.
А такая возможность вообще существует, создание материала из кастомных таблиц или хотя бы только представлений?
Представления точно можно
А для материалов возможность такая не предусмотрена?
А какие таблицы нужно будет затронуть, что бы робот мог добавлять свой тип материалов?
Вы ж сказали, что не можете изменить робот. Или я неправильно понял?
Я не могу. Я надеюсь, сможет тот, кто робота писал.
Я пытаюсь понять, что сделать проще: создавать материалы из кастомных таблиц (и вообще выяснить, есть ли такая возможность в друпале) или переписать робота под друпаловские таблицы
Отсюда возникают два вопроса:
1. Есть ли возможность в Drupal 7 создавать свой тип материала со своими таблицами ?
2. Какие таблицы нужно затронуть, чтобы робот мог добавлять материалы?
В идеале нужно переписать робота, чтобы он использовал bootstrap друпала и создавал материалы не через таблицы, а программно через код. Это будет прям идеальный вариант
Ну смотрите. Что такое тип материала? По сути это набор полей (fields). У каждого поля есть своя таблица (две обычно, одна для ревизий). Использовать кастомную таблицу можно, но нужно будет написать кастомное поле. Или несколько.
Это зависит от того, какие у вас будут поля в типе материала
В любом случае вы получите тонны гемора и пожалеете что затеяли это. Поэтому настоятельно рекомендую изменить ваш робот
Это похоже на программное создание ноды?
Да, это оно и есть. Только если это делается через кастомный php скрипт нужно обязательно подключить бутстрап друпала
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
Да, спасибо!!! Так, скорее всего и поступлю.
А еще не подскажете, как программно при создании ноды задавать значение полей (или ссылочку какую-нибудь умную) При условии, что сам тип материала(ноды) со всеми нужными полями уже создан через админку руками?
А то что-то как-то совсем все не очевидно...
$node->field_MYFIELD[LANGUAGE_NONE][0]['value'] = 'my field data';
Спасибо!
Еще не подскажете, как программно задать поле типа файл?
Сначала создаете новую сущность типа файл, а потом fid указываете вашему полю. Как-то так
Нет. Я имею в виду при программном создании ноды, как задать значение поля типа файл, при условии того, что файл скачан и лежит в папке /sites/default/files/drivers
Я вас понял. Сиотрите мой комент выше. Добавить больше нечего
Как в друпале создается сущность типа файл?
Как то так https://drupal.stackexchange.com/a/175357
Но, возможно, придется допилить под вашу задачу
И вот еще http://findnerd.com/list/view/Attaching-image-files-to-nodes-programmati...
Попробовал обоими способами, но когда пытаюсь создать сущность - возвращается все время false
Думаю, что неправильно путь к файлу передаете. Проходите отладчиком по шагам и смотрите значения переменных
До file_copy все есть. Теряется после file_copy. Проблема может быть 'public://drivers' ?
Что это вообще за путь?
Может не хватать прав на эту папку?
Я не правильно передаю путь в функции $file = file_copy($file, 'public://');
Дело в том, что робот находится в папке driverbot
функция file_create_url('public://drivers/') возвращает мне http://server2.webisgroup.ru/rossila_av/driverbot/sites/default/files/dr...
А реальная папка с файлами sites/default/files/drivers лежит уровнем выше в server2.webisgroup.ru/rossila_av/
Как мне с этим быть? Что еще можно передать в file_copy кроме public://drivers/ ?
Смотрите ECK, если свою сущность нужно, или программно.
Вообщем, можно и без программирования обойтись готовыми "инструментами".
Если бот может работать как отдельный вэб-сервис, т.е. отдавать данные по запросу или сам слать данные друпал - то это migrate или rest.
Если бот может просто складывать данные в файл определенного формата (json, xml и т.п.) то тут можно migrate или feeds задействовать.