Кто подружил Node import и i18n?

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

Аватар пользователя svaroha svaroha 17 августа 2012 в 16:03

Кто то делал загрузку страниц сразу на двух языках? То есть грузим одну страницу на русском, получаем ИД ноды, потом грузим страницу на английском и делаем ноду на английском переводом у уже известной ноды на русском? Есть уже готовые наработки?

Комментарии

Аватар пользователя divined divined 17 августа 2012 в 16:10
<?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);
                    }
                }
            }
            
            
        }
        }
}
?>

Комментарии нужны или сам разберешься?

Аватар пользователя svaroha svaroha 17 августа 2012 в 16:10

Рассказывай, конечно...Какая разница, чем грузить. К тому же, я думаю, не у одного меня сайт на нескольких языках.

Аватар пользователя divined divined 17 августа 2012 в 16:17

Фнкция АПИ _node_presave($node) обрабатывает ноду перед ее сохранением,
модуль Feeds добавляет к объкту $node дополнительно поле, которое идентифицирует откуда пришла нода на сохранение.

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

Если находим, то пересохраняем исходную ноду с новым значением $tnode->tnid равным $tnode->nid исходного материала.

Добавлям в новую ноду(перевод) значение $node->tnid равным $tnode->nid.

Остальное друпал сделает за вас. Сохранит ноду, создаст связи и т.д.

Аватар пользователя divined divined 17 августа 2012 в 16:24

svaroha wrote:
Вызов СПИ _node_presave($node) прямо в патч к feeds делали, или как?

"АПИ" Smile

Нет, создал новый пустой модуль для этого.

Аватар пользователя divined divined 17 августа 2012 в 16:23

Так же могу рассказать как подружить модуль Node hierarchy с i18n Smile Чтобы получилось:

Нода            -    Перевод_Ноды
 |                         |
Дочерняя_нода   -    Перевод_Дочерней ноды, которая является дочерней нодой к переводу
Аватар пользователя divined divined 17 августа 2012 в 16:25

divined wrote:
Так же могу рассказать как подружить модуль Node hierarchy с i18n Smile Чтобы получилось:

Нода            -    Перевод_Ноды
 |                         |
Дочерняя_нода   -    Перевод_Дочерней ноды, которая является дочерней нодой к переводу

И так же подружить это с Feeds Smile

Аватар пользователя svaroha svaroha 17 августа 2012 в 16:24

Я не заметил, чтобы у меня в таблице node появилось новое поле при установке модуля feeds. Появилась таблица feeds_node_item. Или это к самому объекту node добавилось поле? Не вспомните идентификатор поля??

Аватар пользователя divined divined 17 августа 2012 в 16:30

svaroha wrote:
Я не заметил, чтобы у меня в таблице node появилось новое поле при установке модуля feeds. Появилась таблица feeds_node_item. Или это к самому объекту node добавилось поле? Не вспомните идентификатор поля??

Это появляется не в таблице а запись в объекте $node->feeds_item, над которой работаем внутри АПИ функции _node_presave($node)

Аватар пользователя svaroha svaroha 17 августа 2012 в 16:29

У меня через обычную таксономию сделано, точнее уберкарт на борту. То бишь там в таблице term_data есть поле trid, которое и является признаком для поиска перевода термина.

Аватар пользователя divined divined 17 августа 2012 в 16:33

Если хочешь могу уделить 30 минут вечером, часов так в 18-00 и по скайпу все рассажу. Если надумаешь стучи: divined3

Аватар пользователя svaroha svaroha 17 августа 2012 в 17:09

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

Аватар пользователя divined divined 17 августа 2012 в 17:43

Я вам весь модуль и скинул Smile
пака: 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

Аватар пользователя svaroha svaroha 17 августа 2012 в 17:52

ага...я и не заметил...видно туплю в пятницу....спасибо огромное, попробую прикрутить все это дело к уберкарту)

Аватар пользователя svaroha svaroha 17 августа 2012 в 17:55

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