Создание собственного типа материала (ноды)

Главные вкладки

Аватар пользователя viktorbeznosov viktorbeznosov 2 марта 2020 в 16:17

Друзья, есть такой вопрос.
У меня есть 2 таблички в базе: drivers (метаданные скачанных драйверов) и driverfiles (информация о хранящихся файлах этих драйверов) Табличка drivers связана с driverfiles по file_id.
Как создавать собственный тип материала (ноды) на основе этих двух табличек?
Что бы в админке была возможность редактирования полученных данных из этих табличек и последующего создания представления для этого типа материала?

Есть ли в Drupal 7 такая возможность и с чего следует начать?

Комментарии

Аватар пользователя ivnish ivnish 2 марта 2020 в 16:22

Мне кажется, лучшим решением будет создать нужный вам тип материала с нужными полями и программно мигрировать туда контент из ваших кастомных таблиц (эти таблицы потом удалить) и дальше уже работать с нодами как обычно. Сможете и views использовать и что угодно

Аватар пользователя viktorbeznosov viktorbeznosov 2 марта 2020 в 16:36

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

Аватар пользователя ivnish ivnish 2 марта 2020 в 16:36

А переписать код этого робота возможно? Чтобы он сразу создавал ноды и добавлял в них данные вместо записи в эти кастомные таблицы?

Аватар пользователя viktorbeznosov viktorbeznosov 2 марта 2020 в 16:47

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

Аватар пользователя viktorbeznosov viktorbeznosov 2 марта 2020 в 16:55

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

Аватар пользователя viktorbeznosov viktorbeznosov 2 марта 2020 в 17:11

Я не могу. Я надеюсь, сможет тот, кто робота писал.
Я пытаюсь понять, что сделать проще: создавать материалы из кастомных таблиц (и вообще выяснить, есть ли такая возможность в друпале) или переписать робота под друпаловские таблицы
Отсюда возникают два вопроса:
1. Есть ли возможность в Drupal 7 создавать свой тип материала со своими таблицами ?
2. Какие таблицы нужно затронуть, чтобы робот мог добавлять материалы?

Аватар пользователя ivnish ivnish 2 марта 2020 в 17:19

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

1. Есть ли возможность в Drupal 7 создавать свой тип материала со своими таблицами ?

Ну смотрите. Что такое тип материала? По сути это набор полей (fields). У каждого поля есть своя таблица (две обычно, одна для ревизий). Использовать кастомную таблицу можно, но нужно будет написать кастомное поле. Или несколько.

2. Какие таблицы нужно затронуть, чтобы робот мог добавлять материалы?

Это зависит от того, какие у вас будут поля в типе материала

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

Аватар пользователя ivnish ivnish 2 марта 2020 в 17:48

Да, это оно и есть. Только если это делается через кастомный php скрипт нужно обязательно подключить бутстрап друпала

define('DRUPAL_ROOT', getcwd());
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
Аватар пользователя viktorbeznosov viktorbeznosov 2 марта 2020 в 17:53

Да, спасибо!!! Так, скорее всего и поступлю.
А еще не подскажете, как программно при создании ноды задавать значение полей (или ссылочку какую-нибудь умную) При условии, что сам тип материала(ноды) со всеми нужными полями уже создан через админку руками?
А то что-то как-то совсем все не очевидно...

Аватар пользователя viktorbeznosov viktorbeznosov 6 марта 2020 в 16:15

Нет. Я имею в виду при программном создании ноды, как задать значение поля типа файл, при условии того, что файл скачан и лежит в папке /sites/default/files/drivers

Аватар пользователя ivnish ivnish 6 марта 2020 в 17:26

Думаю, что неправильно путь к файлу передаете. Проходите отладчиком по шагам и смотрите значения переменных

Аватар пользователя viktorbeznosov viktorbeznosov 6 марта 2020 в 17:55

До file_copy все есть. Теряется после file_copy. Проблема может быть 'public://drivers' ?
Что это вообще за путь?
Может не хватать прав на эту папку?

Аватар пользователя viktorbeznosov viktorbeznosov 10 марта 2020 в 10:25

Я не правильно передаю путь в функции $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/ ?

Аватар пользователя Orion76 Orion76 3 марта 2020 в 17:44

Вообщем, можно и без программирования обойтись готовыми "инструментами".
Если бот может работать как отдельный вэб-сервис, т.е. отдавать данные по запросу или сам слать данные друпал - то это migrate или rest.
Если бот может просто складывать данные в файл определенного формата (json, xml и т.п.) то тут можно migrate или feeds задействовать.