проблема пути с переведенными узлами (преобразование сущностей)
Я использую Drupal 7, entity_translation и pathauto с 2 языками: EN
, FR
.
Я создаю новый контент (типа контента с "переводом сущности") и называю его "тест". Поскольку Generate automatic URL alias
включен, URL-адрес /test
отображает содержимое.
Затем я перевожу это на французский и отправляю.
На боковой панели у меня есть выбор языка, который для FR
ссылается на /fr/node/1
.
Как можно автоматически связать его с /fr/test
? единственный способ решить эту проблему - вручную ввести test
в псевдоним переведенного на французский контент. Почему pathauto
не работает в переводах узла?
4 answers
Преобразование сущностей 7.x-1.x-dev
решает эту проблему.
Подсказка, представленная в книге Packt Drupal-7-Многоязычные сайты:
Pathauto отлично работает для узлов, использующих модель преобразования узлов, поскольку каждый язык имеет отдельный узел. На момент написания этой статьи, для перевода в полевых условиях, сопровождающие модуля Pathauto и Entity Translation устранили некоторые проблемы. Чтобы автоматические псевдонимы URL -адресов работали в Drupal 7 для узлов, переведенных в поле, необходимо использовать по адресу наименьший Версия перевода сущностей 7.x-1.0-alpha2, если доступна, или самая последняя версия для разработчиков.
Последняя версия перевода сущностей для разработчиков ничего не изменила, поэтому мы решили эту проблему, изменив строку 1959 в entity_translation.module
if ($context['op'] == 'bulkupdate' && !empty($info[$entity_type]['token type']) && !empty($context['data'][$info[$entity_type]['token type']])) {
До
if (($context['op'] == 'update' || $context['op'] == 'bulkupdate') && !empty($info[$entity_type]['token type']) && !empty($context['data'][$info[$entity_type]['token type']])) {
Таким образом, функция pathauto_create_alias() запускается также при обновлении/создании контента.
Вы можете использовать модуль Синхронизировать пути перевода .
Без этого псевдонимы URL-адресов не синхронизируются между переводами. При сохранении переводов псевдоним URL-адреса присваивается соответствующему языку, тем самым устраняя любые языковые псевдонимы в базе данных. Поэтому, если вы перейдете на другой язык, никаких псевдонимов не будет установлено, если вы не добавите их из пользовательского интерфейса или клиента БД.
Перевод сущности 7.x-1.x-dev
не решает эту проблему для меня.
Мне пришлось реализовать следующие крючки в качестве обходного пути:
/**
* Implements hook_url_inbound_alter().
*
* Resolves alias if the content is not translated.
*/
function MYMODULE_url_inbound_alter(&$path, $original_path, $path_language) {
// Check if no url alias has not been found for incoming path.
if ($path && $path == $original_path) {
// Resolve alias if the content is not translated to current language. Get
// alias of existing translation.
foreach (array_keys(language_list()) as $language) {
if ($source = drupal_lookup_path('source', $path, $language)) {
// Check if we are at the document page.
if (strpos($source, 'node/') === 0) {
$path = $source;
break;
}
}
}
}
}
/**
* Implements hook_url_outbound_alter().
*
* Resolves alias from node language if the content is not translated.
*/
function MYMODULE_url_outbound_alter(&$path, &$options, $original_path) {
if (preg_match('/^node\/\d+$/', $path) && $node = menu_get_object('node', 1, $path)) {
if ($alias = drupal_get_path_alias($path, $node->language)) {
$path = $alias;
}
}
}