Кто то делал загрузку страниц сразу на двух языках? То есть грузим одну страницу на русском, получаем ИД ноды, потом грузим страницу на английском и делаем ноду на английском переводом у уже известной ноды на русском? Есть уже готовые наработки?
Фнкция АПИ _node_presave($node) обрабатывает ноду перед ее сохранением,
модуль Feeds добавляет к объкту $node дополнительно поле, которое идентифицирует откуда пришла нода на сохранение.
берем из этой ноды значение поля, которое одинаково и для оригинала и для перевода, и ищем ноду с помощью sql запроса, которая бы уже содержала подобное значение.
Если находим, то пересохраняем исходную ноду с новым значением $tnode->tnid равным $tnode->nid исходного материала.
Добавлям в новую ноду(перевод) значение $node->tnid равным $tnode->nid.
Остальное друпал сделает за вас. Сохранит ноду, создаст связи и т.д.
Я не заметил, чтобы у меня в таблице node появилось новое поле при установке модуля feeds. Появилась таблица feeds_node_item. Или это к самому объекту node добавилось поле? Не вспомните идентификатор поля??
Я не заметил, чтобы у меня в таблице node появилось новое поле при установке модуля feeds. Появилась таблица feeds_node_item. Или это к самому объекту node добавилось поле? Не вспомните идентификатор поля??
Это появляется не в таблице а запись в объекте $node->feeds_item, над которой работаем внутри АПИ функции _node_presave($node)
У меня через обычную таксономию сделано, точнее уберкарт на борту. То бишь там в таблице term_data есть поле trid, которое и является признаком для поиска перевода термина.
Какую функцию? Где то читал (не помню), что гугл транслейт апи уже не работает.
з.ы. а можно ваш модулек глянуть одним глазом? А то я немного нуб в друпале, разбираться буду русский месяц
Комментарии
Могу рассказать как подружить Feeds и i18n. Только что сделал это для своего проекта.
Хотя мое решение подойдет и для ноде импорт.
<?php
function MYMODULE_node_presave($node) {
if (isset($node->feeds_item)) {
if ($node->feeds_item->id == 'object_import') {
$code = $node->field_code['und'][0]['value']; //поле идентификации первода, в моем случа код объекта
if ($code!='') {
if ($node->language == 'ru') {
$query = db_select('node', 'n');
$query->innerJoin('field_data_field_code', 'fdfc', 'n.nid = fdfc.entity_id');
$query->condition('fdfc.field_code_value', $code);
$query->condition('n.language', 'en');
$query->fields('n', array('nid'));
$result = $query->execute();
$data = $result->fetchObject();
if ($data->nid!=null) {
$node->tnid = $node->nid;
$tnode = node_load($data->nid);
$tnode->tnid = $node->nid;
node_save($tnode);
}
} else {
$query = db_select('node', 'n');
$query->innerJoin('field_data_field_code', 'fdfc', 'n.nid = fdfc.entity_id');
$query->condition('fdfc.field_code_value', $code);
$query->condition('n.language', 'ru');
$query->fields('n', array('nid'));
$result = $query->execute();
$data = $result->fetchObject();
if ($data->nid!=null) {
$node->tnid = $data->nid;
$tnode = node_load($data->nid);
$tnode->tnid = $data->nid;
node_save($tnode);
}
}
}
}
}
}
?>
Комментарии нужны или сам разберешься?
Рассказывай, конечно...Какая разница, чем грузить. К тому же, я думаю, не у одного меня сайт на нескольких языках.
Правда это код для 7-ки, но по аналогии можно сделать и для 6-ки. Главное алгоритм.
Фнкция АПИ _node_presave($node) обрабатывает ноду перед ее сохранением,
модуль Feeds добавляет к объкту $node дополнительно поле, которое идентифицирует откуда пришла нода на сохранение.
берем из этой ноды значение поля, которое одинаково и для оригинала и для перевода, и ищем ноду с помощью sql запроса, которая бы уже содержала подобное значение.
Если находим, то пересохраняем исходную ноду с новым значением $tnode->tnid равным $tnode->nid исходного материала.
Добавлям в новую ноду(перевод) значение $node->tnid равным $tnode->nid.
Остальное друпал сделает за вас. Сохранит ноду, создаст связи и т.д.
Вызов СПИ _node_presave($node) прямо в патч к feeds делали, или как?
"АПИ"
Нет, создал новый пустой модуль для этого.
Так же могу рассказать как подружить модуль Node hierarchy с i18n Чтобы получилось:
| |
Дочерняя_нода - Перевод_Дочерней ноды, которая является дочерней нодой к переводу
И так же подружить это с Feeds
Я не заметил, чтобы у меня в таблице node появилось новое поле при установке модуля feeds. Появилась таблица feeds_node_item. Или это к самому объекту node добавилось поле? Не вспомните идентификатор поля??
Это появляется не в таблице а запись в объекте $node->feeds_item, над которой работаем внутри АПИ функции _node_presave($node)
У меня через обычную таксономию сделано, точнее уберкарт на борту. То бишь там в таблице term_data есть поле trid, которое и является признаком для поиска перевода термина.
Если хочешь могу уделить 30 минут вечером, часов так в 18-00 и по скайпу все рассажу. Если надумаешь стучи: divined3
А перевод на лету делаете (через гугл АПИ), или уже готовый в csv-файл добавляете?
Готовый, но можно и гугла подсунуть, добавив 1 функцию.
Какую функцию? Где то читал (не помню), что гугл транслейт апи уже не работает.
з.ы. а можно ваш модулек глянуть одним глазом? А то я немного нуб в друпале, разбираться буду русский месяц
Я вам весь модуль и скинул
пака: Feeds_i18n
2 файла внутри:
1. Feeds_i18n.module - внутри 1 функция: feeds_i18n_node_presave($node)
2. Feeds_i18n.info
внутри:
name = Feeds_i18n
description = Feeds i18n support
core = 7.x
dependencies[] = Feeds
files[] = Feeds_i18n.module
Google translate стал платным: https://developers.google.com/translate/v2/pricing?hl=ru
ага...я и не заметил...видно туплю в пятницу....спасибо огромное, попробую прикрутить все это дело к уберкарту)
Ну хоть яндекс пока бесплатный. Кстати, заметил, что яндекс как то лучше переводит с русского на английский, чем гугл.