проблема пути с переведенными узлами (преобразование сущностей)


Я использую Drupal 7, entity_translation и pathauto с 2 языками: EN, FR.

Я создаю новый контент (типа контента с "переводом сущности") и называю его "тест". Поскольку Generate automatic URL alias включен, URL-адрес /test отображает содержимое.

Затем я перевожу это на французский и отправляю.

На боковой панели у меня есть выбор языка, который для FR ссылается на /fr/node/1.

Как можно автоматически связать его с /fr/test? единственный способ решить эту проблему - вручную ввести test в псевдоним переведенного на французский контент. Почему pathauto не работает в переводах узла?

Author: cherouvim, 2012-04-23

4 answers

Преобразование сущностей 7.x-1.x-dev решает эту проблему.

Подсказка, представленная в книге Packt Drupal-7-Многоязычные сайты:

Pathauto отлично работает для узлов, использующих модель преобразования узлов, поскольку каждый язык имеет отдельный узел. На момент написания этой статьи, для перевода в полевых условиях, сопровождающие модуля Pathauto и Entity Translation устранили некоторые проблемы. Чтобы автоматические псевдонимы URL -адресов работали в Drupal 7 для узлов, переведенных в поле, необходимо использовать по адресу наименьший Версия перевода сущностей 7.x-1.0-alpha2, если доступна, или самая последняя версия для разработчиков.

 2
Author: cherouvim, 2012-05-14 12:35:38

Последняя версия перевода сущностей для разработчиков ничего не изменила, поэтому мы решили эту проблему, изменив строку 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() запускается также при обновлении/создании контента.

 2
Author: febstarer, 2014-01-13 11:30:24

Вы можете использовать модуль Синхронизировать пути перевода .

Без этого псевдонимы URL-адресов не синхронизируются между переводами. При сохранении переводов псевдоним URL-адреса присваивается соответствующему языку, тем самым устраняя любые языковые псевдонимы в базе данных. Поэтому, если вы перейдете на другой язык, никаких псевдонимов не будет установлено, если вы не добавите их из пользовательского интерфейса или клиента БД.

 1
Author: colan, 2014-02-25 20:35:43

Перевод сущности 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;
    }
  }
}
 0
Author: milkovsky, 2015-07-12 00:38:30