Puncte:-1

Relații de termeni de taxonomie

drapel cn

Am 3 termeni de taxonomie pe care aș dori să îi expun ca filtre, dar aș dori să folosesc JavaScript pentru a dezactiva filtrele pe măsură ce faceți selecții în celelalte filtre expuse asociate. De exemplu:

Stiluri Face Modele
Mașini BMW 750i
Camioane Vad F-150

Dacă selectați „Mașini”, atunci „Marcă - Ford” și „Modele - F-150” vor fi dezactivate. În prezent, mi-a fost atribuită fiecărui articol o clasă CSS adecvată pentru cârlige, dar trebuie să găsesc o modalitate de a adăuga o clasă CSS la fiecare articol „Marcă” și articol „Modele” care ar fi disponibil dacă utilizatorul a selectat „Stiluri - Mașini”.

Trebuie să fac acest lucru la modificarea câmpului de formular și fără a reîmprospăta pagina. Este posibil?

Multumesc mult anticipat.

beltouche avatar
drapel cn
Poate doriți să luați în considerare unul dintre aceste module: https://www.drupal.org/project/cshs sau https://www.drupal.org/project/shs
Puncte:0
drapel cn

@beltouche, mulțumesc pentru ideile de module. Am ajuns să merg pe un alt traseu pentru că aveam nevoie ca filtrele să se actualizeze pe măsură ce se schimbau fiecare. Practic, la fel ca o fațetă, dar fără a reîncărca pagina. Sunt sigur că există câteva moduri de a face acest lucru și probabil într-un mod mai eficient, dar pentru cantitatea de articole și funcționalitatea de care aveam nevoie, pare să funcționeze destul de bine.

Pentru oricine altcineva care caută să încerce și să realizeze același lucru, iată pașii pe care i-am făcut pentru a realiza ceea ce aveam nevoie.

  1. Am un tip de conținut numit „inventar” care conține aproximativ 700 de intrări
  2. Există 3 câmpuri în „inventar” pe care aș dori să le folosesc pentru a filtra
  3. Am creat o vizualizare care arată conținut de tip „inventar”
  4. Denumiți vizualizarea „Căutare rapidă personalizată”
  5. Bifați pentru a „crea un bloc”
  6. Setați vizualizarea la „afișați câmpurile”
  7. Adăugați cele 3 câmpuri, stil, marca, model
  8. Setați elementele pe pagină la „toate”
  9. Creați șabloane de vizualizare personalizate:
  10. vizualizări-vizualizare-neformatată--căutare-rapidă-personalizată
  11. vizualizări-câmpuri-de-vizualizări--căutare-rapidă-personalizată
  12. vederi-vizualizare-câmp--stil-câmp
  13. vederi-vizualizare-câmp--câmp-face
  14. vederi-vizualizare-câmp--model-câmp

Codul pentru fiecare este după cum urmează: vizualizări-vizualizare-neformatată--căutare-rapidă-personalizată

{% pentru rând în rânduri %}
  {% dacă rândul|randarea|decuparea nu este goală %}
    {{ row.content }}
  {% endif %}
{% endfor %}

vizualizări-câmpuri-de-vizualizări--căutare-rapidă-personalizată

{% set category_name = fields.field_category.content|striptags %}
{% set category_id = fields.field_category.content|preg_replace('(<a href="/taxonomy/term/)','$1') %}
{% set category_id = category_id|preg_replace('(" hreflang="ro">.*)','$1') %}

{% set make_name = fields.field_make.content|striptags %}
{% set make_id = fields.field_make.content|preg_replace('(<a href="/taxonomy/term/)','$1') %}
{% set make_id = make_id|preg_replace('(" hreflang="ro">.*)','$1') %}

{% set model_name = fields.field_model.content|striptags %}
{% set model_id = fields.field_model.content|preg_replace('(<a href="/taxonomy/term/)','$1') %}
{% set model_id = model_id|preg_replace('(" hreflang="ro">.*)','$1') %}

<div class="item" style="display: none;" data-category="{{ categorie_name|clean_class }}" data-make="{{ make_name|clean_class }}" data-model="{{ model_name|clean_class }}">

  <div class="-styles" data-category="{{ category_name|clean_class }}">
    <label for="{{ category_name|clean_class }}" data-category="{{ category_name|clean_class }}" data-make="{{ make_name|clean_class }}" data-model="{{ model_name|clean_class } }">
      <input type="checkbox" name="{{ category_name|trim }}" value="{{ category_id|trim }}" class="{{ category_name|trim|clean_class }}" id="{{ categorie_name|trim |clasa_curată }}" />
    {{ category_name|trim }}</label>
  </div>

  <div class="-makes" data-category="{{ category_name|clean_class }}" data-make="{{ make_name|clean_class }}">
    <label for="{{ make_name|clean_class }}" data-category="{{ categorie_name|clean_class }}" data-make="{{ make_name|clean_class }}" data-model="{{ model_name|clean_class } }">
      <input type="checkbox" name="{{ make_name|trim }}" value="{{ make_id|trim }}" class="{{ make_name|trim|clean_class }}" id="{{ make_name|trim |clasa_curată }}" />
    {{ make_name|trim }}</label>
  </div>

  <div class="-models" data-category="{{ category_name|clean_class }}" data-make="{{ make_name|clean_class }}" data-model="{{ model_name|clean_class }}">
    <label for="{{ model_name|clean_class }}" data-category="{{ category_name|clean_class }}" data-make="{{ make_name|clean_class }}" data-model="{{ model_name|clean_class } }">
      <input type="checkbox" name="{{ model_name|trim }}" value="{{ model_id|trim }}" class="{{ model_name|trim|clean_class }}" id="{{ model_name|trim |clasa_curată }}" />
    {{ model_name|trim }}</label>
  </div>

</div>

vederi-vizualizare-câmp--stil-câmp vederi-vizualizare-câmp--câmp-face vederi-vizualizare-câmp--model-câmp

{{ ieșire }}

Plasați blocul pe o pagină înfășurată în următoarele:

<div class="quickSearch hidden">
    <div class="quickSearch__content">
        <div class="quickSearch__filters">
            <div class="filters-widget -styles">
                <div class="filters-widget__items">
                    <div class="filters-widget__item">
                    <div class="filters-widget__header">
                        <h4>Styles</h4>
                        <i class="fas fa-expand-alt"></i>
                        <i class="far fa-compress-alt"></i>
                    </div>
                    <div class="filters-widget__copy">
                    </div>
                    </div>
                </div>
            </div>

            <div class="filters-widget -makes">
                <div class="filters-widget__items">
                    <div class="filters-widget__item">
                    <div class="filters-widget__header">
                        <h4>Makes</h4>
                        <i class="fas fa-expand-alt"></i>
                        <i class="far fa-compress-alt"></i>
                    </div>
                    <div class="filters-widget__copy">
                    </div>
                    </div>
                </div>
            </div>

            <div class="filters-widget -models">
                <div class="filters-widget__items">
                    <div class="filters-widget__item">
                    <div class="filters-widget__header">
                        <h4>Models</h4>
                        <i class="fas fa-expand-alt"></i>
                        <i class="far fa-compress-alt"></i>
                    </div>
                    <div class="filters-widget__copy">
                    </div>
                    </div>
                </div>
            </div>

            <div class="unsorted__styles" style="display: none;"></div>
            <div class="unsorted__makes" style="display: none;"></div>
            <div class="unsorted__models" style="display: none;"></div>

            <div data-drupal-selector="edit-actions" class="form-actions js-form-wrapper form-wrapper" id="edit-actions">
            <input data-drupal-selector="edit-submit-custom-search-inventory" type="submit" id="edit-submit-custom-search-inventory" value="Search" class="button js-form-submit form-submit -brand-01">
            </div>
            {{ drupal_entity('block', 'views_block__custom_quick_search_block_quick_search', check_access=false) }}
        </div>
        <div class="quickSearch__links">
            {{ drupal_entity('block_content', '8') }}
        </div>
    </div>
</div>

Restul codului este JavaScript care schimbă câmpurile

/**
     * Ștergeți dezactivat de la mărci și modele pe prima pagină
     * Clonarea devine nesortată
     * Eliminați intrările duplicate
     * Reordonați în alpha desc și treceți în meniul drop-down
     */
 funcția loadMakes(show_styles){
  console.log(afișare_stiluri);
  if( show_styles == 'toate' ){
    jQuery('.quickSearch .item .-makes').clone().prependTo('.quickSearch .unsorted__makes');
  }
  altfel{
    jQuery('.quickSearch .item .-makes[data-category="'+show_styles+'"]').clone().prependTo('.quickSearch .unsorted__makes');
  }
  //
  // Eliminați duplicatele din meniul derulant al mărcilor.
  var face = {};
  jQuery('.unsorted__makes .-makes').each(function() {
    var make = jQuery(this).attr('data-make');
    dacă (face [face])
      jQuery(this).remove();
    altfel
      face[face] = adevărat;
  });
  // Reordonați alpha și treceți la meniurile drop-down.
  jQuery(funcție(){
    jQuery('.unsorted__makes .-makes').sort(sort_makes).clone().prependTo('.filters-widget.-makes .filters-widget__copy');
    funcția sort_makes(a, b){
      return(jQuery(b).data('make')) < (jQuery(a).data('make')) ? 1 : -1;
    }
  });
}

/**
 *
 * Clonează modelele în nesortate
 * Eliminați intrările duplicate
 * Reordonați în alpha desc și treceți în meniul drop-down
 */
funcția loadModels(show_styles,show_makes){
  if( show_makes == 'toate' ){
    jQuery('.quickSearch .item .-models').clone().prependTo('.quickSearch .unsorted__models');
  }
  altfel{
    jQuery('.quickSearch .item .-models[data-category="'+show_styles+'"][data-make="'+show_makes+'"]').clone().prependTo('.quickSearch .unsorted__models') ;
  }
  //
  // Eliminați duplicatele din lista derulantă a modelelor.
  var modele = {};
  jQuery('.unsorted__models .-models').each(function() {
    var model = jQuery(this).attr('data-model');
    dacă (modele[model])
      jQuery(this).remove();
    altfel
      modele[model] = adevărat;
  });
  // Reordonați alpha și treceți la meniurile drop-down.
  jQuery(funcție(){
    jQuery('.unsorted__models .-models').sort(sort_models).clone().prependTo('.filters-widget.-models .filters-widget__copy');
    funcția sort_models(a, b){
      return(jQuery(b).data('model')) <(jQuery(a).data('model')) ? 1 : -1;
    }
  });
}

/**
         * Mutați stilurile în nesortate
         * Eliminați intrările goale
         * Eliminați intrările duplicate
         * Reordonați în alpha desc și treceți în meniul drop-down
         */
        // Eliminați intrările goale
        jQuery('.quickSearch .item').each(function(){
            if( jQuery(this).data('make') == nedefinit || jQuery(this).data('make') == null || jQuery(this).data('make') == '') {
                jQuery(this).remove();
            }
        });
        jQuery('.quickSearch .item .-styles').prependTo('.quickSearch .unsorted__styles');
        // Eliminați duplicatele din meniul drop-down de stiluri.
        var stiluri = {};
        jQuery('.unsorted__styles .-styles').each(function() {
            var stil = jQuery(this).attr('data-category');
            dacă (stiluri[stil])
                jQuery(this).remove();
            altfel
                stiluri[stil] = adevărat;
        });
        // Reordonați alpha și treceți la meniurile drop-down.
        jQuery(funcție(){
            jQuery('.unsorted__styles .-styles').sort(sort_styles).prependTo('.filters-widget.-styles .filters-widget__copy');
            funcția sort_styles(a, b){
                return(jQuery(b).data('categorie')) < (jQuery(a).data('categorie')) ? 1 : -1;
            }
        });

        // Afișează și ascunde mărcile și modelele pe baza stilului selectat
        var show_styles = '';
        jQuery('.-styles input[type=checkbox]').change(function(){
            jQuery('.-styles input[type=checkbox]').not(this).prop('bifat', false);
            jQuery('.-face .filters-widget__copy, .-models .filters-widget__copy').html('');
            jQuery('.unsorted__makes, .unsorted__models').html('');
            show_styles = jQuery(this).parent().data('categorie');
            loadMakes(afișați_stiluri);
            loadModels(stiluri_afișați,stiluri_afișați);
        });

        // Afișează și ascunde mărcile și modelele pe baza stilului selectat
        var show_makes = '';
        jQuery('.-makes').on('schimbare', 'input[tip=checkbox]', function(){
            jQuery('.-makes input[type=checkbox]').not(this).prop('bifat', false);
            jQuery('.-models .filters-widget__copy').html('');
            jQuery('.unsorted__models').html('');
            show_styles = jQuery(this).parent().data('categorie');
            show_makes = jQuery(this).parent().data('make');
            loadModels(stiluri_afișați,stiluri_afișați);
        });

        // Butonul de trimitere Căutare rapidă
        jQuery('.quickSearch .form-submit').on('clic', function(){
            stiluri = jQuery('.-styles input:checked').val();
            face = jQuery('.-makes input:checked').val();
            modele = jQuery('.-models input:checked').val();
            var quick_search_url = '';
            if( stiluri && !facă && !modele ){
                quick_search_url = 'categorie/'+stiluri;
            }
            else if( stiluri && face && !modele ){
                quick_search_url = 'categorie/'+stiluri;
                quick_search_url += '/make/'+makes;
            }
            else if( stiluri && !facă && modele ){
                quick_search_url = 'categorie/'+stiluri;
                quick_search_url += '/model/'+modele;
            }
            else if( stiluri && marcă && modele ){
                quick_search_url = 'categorie/'+stiluri;
                quick_search_url += '/make/'+makes;
                quick_search_url += '/model/'+modele;
            }
            else if( !stiluri && face && !modele ){
                quick_search_url += '/make/'+makes;
            }
            else if( !styles && make && modeles ){
                quick_search_url += '/make/'+makes;
                quick_search_url += '/model/'+modele;
            }
            else if( !stiluri && !facă && modele ){
                quick_search_url += '/model/'+modele;
            }

            window.location.href = '/inventory-search/'+quick_search_url;
        });

        loadMakes('toate');
        loadModels('toate', 'toate');

    }

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.