Sınıflandırma terimlerini dile göre nasıl filtreleyebilirim?


9

Taksonomi terimlerini dile (düğümler için yapıldığı gibi) göre filtrelemenin bir yolunu aradım, ancak bunu yapmanın bir yolunu bulamadım.

Views modülü bu filtreyi sınıflandırmalarda mı yoksa yalnızca düğümlerde mi destekliyor?
Sınıflandırma terimlerini dile göre nasıl filtreleyebilirim?


1. kelime dağarcığında 2 grup kullanın 2. grup kullanacaklarını bildirmek için
hook_form_alter

kullanıcının taksonomi pikap grubu ile ne ilgisi olduğunu anlamıyorum. site örnek A dili, B dili, C dili için birden çok dilde ve kullanıcı B dili için gittiğinde sadece bu dile ve diğer dillere göre sınıflandırmaların görüntülenmesini istiyorum. her etkin dil için sınıflandırma terimlerini çevirmek değil.
mohamad salama

# görünümde sorgu dizesini düzenleyebilir miyim? ya da sadece beni bilgilendirdiği için. onun düzenleme yeri nerede?
mohamad salama

Yanıtlar:


11

Uluslararasılaştırma Görünümleri modülünü etkinleştirerek, sınıflandırma terimini dile göre filtreleme seçeneği kullanılabilir. Sürüm şu anda dev ama unutmayın bir cazibe gibi çalışır.

i18nviews kurmanın etkisini gösteren ekran görüntüsü


2
Bu filtrenin yalnızca modülü de etkinleştirdiyseniz kullanılabilir olacağını unutmayın i18n_taxonomy. Yani, sınıflandırma terimleri için düğüm çevirisini kullanırsanız.
tanius

3

Taksonomi terimleri için bir dil filtresi almak için Uluslararasılaştırma Görünümleri modülünü ( Uluslararasılaşma'nın bir parçası olan ) Taksonomi Çeviri modülü ile birlikte kullanabilirsiniz .

Uluslararasılaştırma kullanarak görünümleri çevirin. Bu devam eden bir çalışmadır ve Görünümlerin tüm özellikleri henüz çevrilemez. Uluslararasılaştırma 6.x-1.5 veya daha yenisini gerektirir .


2

İşte başka bir çözüm:

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',
    );
  }
}

Kaynak burada .


1

Views modülü, sınıflandırma terimlerini kendisiyle ilişkilendirilmiş dile göre filtrelemeye izin vermez, çünkü Drupal yalnızca bir dili düğümlerle ilişkilendirir.

Ancak görünümü yalnızca önceden tanımlanmış bir dile sahip düğümleri gösterecek şekilde ayarlayabilirsiniz.

  • "Filtre ölçütleri" altında, "Ekle" yi seçin
  • sonraki formda "İçerik çevirisi: Dil" i seçin
  • bir sonraki form, "Tümünü seç", "Geçerli kullanıcının dili", "Varsayılan site dili," "Dil yok" ile sitede etkinleştirilmiş dillerden biri arasında görünüm içeriğini filtrelemek için hangi dili kullanacağınızı seçmenize olanak tanır.

Bu filtreyi, Views modülüyle birlikte gelen ve içeriği filtrelemek için dil olarak İngilizce'yi seçen sınıflandırma terim görünümüne ekledim ve biri İngilizce diğeri Latince olmak üzere iki düğüm oluşturdum. Her iki düğüme de aynı taksonomi terimini, kimliğe sahip olanı 22'ye
atadım. Http://example.com/taxonomy/term/22 adresini ziyaret ettiğimde , görünüm yalnızca içeriği İngilizce olarak etkili bir şekilde gösterdi.


onun drupal 5 gerçekten garip taksonomileri dile göre kolayca filtre. ama cevapları paylaştığın için teşekkürler.
mohamad salama

0

Varlık çevirisi için dil filtreleme. Görünümün "Filtre Ölçütleri" bölümündeki bir dil filtresi yalnızca düğüm çeviri sistemini kullanıyorsanız gereklidir. Bunun yerine Drupal 7 için daha modern Varlık Çeviri sistemini kullanıyorsanız, görünümün "Diğer" bölümündeki "Alan Dili" ayarını uyarlamanız yeterlidir.

Taksonomi terimleri için nasıl yapılır. Taksonomi terimleri için bunu denedim ve işe yarıyor. Her çevrilebilir alan için iki alan örneğinden, yani "Şurada görünür: taksonomi terimi: sizin kelime-adınız" açıklamasını içeren alan örneklerinden birini doğru bir şekilde eklediğinizden emin olun. Ayrıntılar için, # 1841434 numaralı konuya bakın .


0

YOUR_MODULE.modülünüze ekleyin

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;
}

YOUR_MODULE.info'nuza ekleyin

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

Modül dizininizde "views / handlers / filter / YOUR_MODULE_handler_filter_language.inc" Dosyası oluşturun ve sonraki içeriği yerleştirin:

/**
 * @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';
  }
}

Tüm önbellekleri temizle ve Yeni ölçüt belirir.

Veya Akuma Taksonomisi modülümü kullan


0

Uluslararasılaştırma Görünümleri modülüyle ilgili başka sorunlar yaşıyorum, yani zaten çevrilmiş UI'yi görünümlerden (çağrı cihazı yönleri, üstbilgi / altbilgi metni vb.) Değiştiriyor gibi göründüğü için, dil filtrelerini ayrı bir şekilde oluşturmak için ilgili kodu kaldırıyorum modülü. Aşağıdaki MYMODULE'u modülünüzün adıyla değiştirin. Benim için bir cazibe olarak çalışıyor!

/**
 * 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');
  }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.