¿Cómo puedo filtrar los términos de taxonomía por idioma?


9

He buscado una forma de filtrar los términos de la taxonomía por idioma (como se hizo para los nodos), pero no encontré ninguna forma de hacerlo.

¿El módulo Vistas también admite ese filtro en taxonomías, o solo en nodos?
¿Cómo puedo filtrar los términos de taxonomía por idioma?


1. use 2 grupos en el vocabulario 2. use hook_form_alter para declarar el uso del grupo a los usuarios
dobeerman

No entiendo qué tiene que ver el usuario con el grupo de recogida de taxonomía. el sitio está en varios idiomas para el ejemplo A lang, B lang, C lang y cuando el usuario va a B lang solo quiero que las taxonomías se muestren en función de este idioma y así sucesivamente en otro idioma. no es que traduzca los términos de taxonomías para cada idioma habilitado.
mohamad salama

# ¿Puedo editar la cadena de consulta en la vista? o es solo para notificarme. si es donde está el lugar para editarlo?
mohamad salama

Respuestas:


11

Al habilitar el módulo Vistas de internacionalización , está disponible la opción de filtrar el término de taxonomía por idioma. Tenga en cuenta que la versión está actualmente en desarrollo pero funciona como un encanto.

captura de pantalla que muestra el efecto de instalar i18nviews


2
Tenga en cuenta que este filtro solo estará disponible si también ha habilitado el módulo i18n_taxonomy. Es decir, si utiliza la traducción de nodos para términos de taxonomía.
tanius

3

Puede usar el módulo Vistas de internacionalización en combinación con el módulo de traducción de taxonomía (que es parte de la internacionalización ) para obtener un filtro de idioma para los términos de taxonomía.

Traducir vistas utilizando la internacionalización. Este es un trabajo en progreso y aún no se pueden traducir todas las propiedades de Vistas. Requiere Internacionalización 6.x-1.5 o más reciente .


2

Aquí hay otra solución:

function mymodule_views_query_alter(&$view, &$query) {
  if ($view->name == 'yourviewmachinename') {
    $query->where[] = array(
      'conditions' => array(array(
        'field' => 'taxonomy_term_data.language',
        'value' => array('***CURRENT_LANGUAGE***'),
        'operator' => 'in',
      )),
      'args' => array(),
      'type' => 'AND',
    );
  }
}

Fuente aquí .


1

El módulo Vistas no permite filtrar los términos de taxonomía por el idioma asociado con él, ya que Drupal solo asocia un idioma con nodos.

Sin embargo, puede configurar la vista para mostrar solo nodos con un idioma predefinido.

  • En "Criterios de filtro", seleccione "Agregar"
  • en el siguiente formulario, seleccione "Traducción de contenido: Idioma"
  • el siguiente formulario le permitirá seleccionar qué idioma usar para filtrar el contenido de la vista entre "Seleccionar todo", "Idioma del usuario actual", "Idioma predeterminado del sitio", "Sin idioma" y uno de los idiomas habilitados en el sitio.

Agregué este filtro en la vista de término de taxonomía que viene con el módulo Vistas, seleccionando inglés como idioma para filtrar el contenido, y creé dos nodos: uno en inglés y otro en latín. Asigne a ambos nodos el mismo término de taxonomía, el que tiene un ID igual a 22.
Cuando visité http://example.com/taxonomy/term/22 , la vista mostró efectivamente el contenido en inglés.


es realmente extraño en drupal 5 puedo filtrar taxonomías por idioma fácilmente. pero de todos modos gracias por compartir respuestas.
mohamad salama

0

Filtrado de idiomas para traducción de entidades. Solo se necesita un filtro de idioma en la sección "Criterios de filtro" de la vista si utiliza el sistema de traducción de nodos. Si, en cambio, utiliza el sistema de traducción de entidades más moderno disponible para Drupal 7, simplemente adapte la configuración "Idioma de campo" en la sección "Otro" de la vista.

Cómo hacerlo por términos de taxonomía. Intenté esto para términos de taxonomía y funciona. Solo asegúrese de agregar la correcta de las dos instancias de campo para cada campo traducible, es decir, la que tiene una descripción de "Aparece en: taxonomy-term: your-vocab-name". Para más detalles, vea el número 1841434 .


0

Añadir a tu YOUR_MODULE.module

function YOUR_MODULE_views_data_alter(&$data) {
  $opts['title'] = 'Language';
  $opts['table'] = 'taxonomy_term_data';
  $opts['help'] = 'Taxonomy term language.';
  $opts['filter']['handler'] = 'YOUR_MODULE_handler_filter_language';
  $data['taxonomy_term_data']['language'] = $opts;
}

Añadir a tu YOUR_MODULE.info

files[] = views/handlers/filter/YOUR_MODULE_handler_filter_language.inc

Cree el archivo "views / handlers / filter / YOUR_MODULE_handler_filter_language.inc" dentro del directorio de su módulo y coloque el siguiente contenido:

/**
 * @file
 * Views handler to filter language by term.
 */

/**
 * Filter by submission status
 */
class YOUR_MODULE_handler_filter_language extends views_handler_filter_in_operator {
  function get_value_options() {
    $languages = array(
      '***CURRENT_LANGUAGE***' => t("Current user's language"),
      '***DEFAULT_LANGUAGE***' => t("Default site language"),
      LANGUAGE_NONE            => t('Language neutral'),
    );
    $this->value_title = t('Language');
    $options = array_merge($languages, locale_language_list());
    $this->value_options = $options;
  }

  // '0' won't work as a key for checkboxes.
  function value_form(&$form, &$form_state) {
    parent::value_form($form, $form_state);
    $form['value']['#type'] = 'select';
  }
}

Borrar todos los cachés y aparecerá Nuevo criterio.

O use mi módulo Akuma Taxonomy


0

Como tengo otros problemas con el módulo de Vistas de internacionalización, a saber, que parece alterar la interfaz de usuario ya traducida de las vistas (instrucciones del localizador, texto de encabezado / pie de página, etc.), levanto el código relevante para crear los filtros de idioma en un archivo separado módulo. Reemplace MYMODULE a continuación con el nombre de su módulo. ¡Funciona como un encanto para mí!

/**
 * Code below is lifted from the i18nviews module. Gives the possibility to filter for
 * language on term views
 *
 * Implementation of hook_views_data_alter().
 *
 * Registers views handlers with dependency to i18n_taxonomy.
 */
function MYMODULE_views_data_alter(&$data) {

  // Add i18n language field to taxonomy_term_data. No clash.
  $data['taxonomy_term_data']['language'] = array(
    'group' => t('Taxonomy term'),
    'title' => t('Language'),
    'help' => t('The language the term is in.'),
    'field' => array(
      'handler' => 'MYMODULE_handler_field_taxonomy_term_language',
      'click sortable' => TRUE,
    ),
    'filter' => array(
      'handler' => 'MYMODULE_handler_filter_taxonomy_term_language',
    ),
    'argument' => array(
      'handler' => 'MYMODULE_handler_argument_taxonomy_term_language',
    ),
  );
}

/**
 * Field handler to provide simple renderer that shows term language.
 */
class MYMODULE_handler_field_taxonomy_term_language extends views_handler_field_taxonomy {
  function render($values) {
    $languages = locale_language_list();
    $value = isset($languages[$values->{$this->field_alias}]) ? $languages[$values->{$this->field_alias}] : '';
    $value = $this->get_value($values);
    return $this->render_link($this->sanitize_value($value), $values);
  }
}

/**
 * Filter by language
 */
class MYMODULE_handler_filter_taxonomy_term_language extends views_handler_filter_in_operator {
  function get_value_options() {
    if (!isset($this->value_options)) {
      $this->value_title = t('Language');
      $languages = array(
        '***CURRENT_LANGUAGE***' => t("Current user's language"),
        '***DEFAULT_LANGUAGE***' => t("Default site language"),
        LANGUAGE_NONE => t('No language')
      );
      $languages = array_merge($languages, locale_language_list());
      $this->value_options = $languages;
    }
  }
}

/**
 * Argument handler to accept a language.
 */
class MYMODULE_handler_argument_taxonomy_term_language extends views_handler_argument {
  function construct() {
    parent::construct('language');
  }

  /**
   * Override the behavior of summary_name(). Get the user friendly version
   * of the language.
   */
  function summary_name($data) {
    return $this->term_language($data->{$this->name_alias});
  }

  /**
   * Override the behavior of title(). Get the user friendly version of the
   * node type.
   */
  function title() {
    return $this->term_language($this->argument);
  }

  function term_language($langcode) {
    $languages = locale_language_list();
    return isset($languages[$langcode]) ? $languages[$langcode] : t('Unknown language');
  }
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.