logo

Լրացուցիչ Բլոկների Տեսակներ (EBT) - Դասավորության Կառուցողի նոր փորձառություն❗

Լրացուցիչ Բլոկների Տեսակներ (EBT) - ձևավորված, կարգավորելի բլոկների տեսակներ՝ սլայդշոուներ, ներդիրներ, քարտեր, բացվող ցանկեր և շատ ուրիշներ։ Ներառված կարգավորումներ՝ ֆոնի, DOM տուփի, JavaScript փլագինների համար։ Փորձեք դասավորությունների կառուցման ապագան արդեն այսօր։

EBT մոդուլների ցուցադրական տարբերակներ Ներբեռնել EBT մոդուլները

❗Լրացուցիչ Պարբերությունների Տեսակներ (EPT) - Պարբերությունների նոր փորձառություն

Լրացուցիչ պարբերության տեսակներ (EPT) - անալոգիական պարբերության վրա հիմնված մոդուլների հավաքակազմ։

EPT մոդուլների ցուցադրական տարբերակներ Ներբեռնել EPT մոդուլները

Scroll

Drupal-ի համար Views-ի ցուցադրման ոճի ստեղծում

20/06/2025, by Ivan

Views ցուցադրման ոճի plugin ստեղծելը կարող է թվալ բարդ խնդիր, սակայն այն ավելի հեշտ է, քան թվում է։ Ահա քայլ առ քայլ ուղեցույց, թե ինչպես դա անել՝ աղբյուրի կոդով։

Դուք կարող եք պատրաստի կոդը ներբեռնել այստեղից՝ TARDIS (չնայած այն դեռ dev փուլում է)։ Եվ եթե ձեզ անհրաժեշտ է ծանոթություն Drupal 8 մոդուլների հետ, ահա պրակտիկ ուղեցույց բազային մոդուլներ ստեղծելու համար Drupal 8-ում։

.info.yml

Սկսեք ստեղծելով tardis անվանմամբ թղթապանակ ձեր մոդուլի համար /modules/custom թղթապանակում։ Դրանում տեղադրեք tardis.info.yml ֆայլը հետևյալ կոդով՝

name: TARDIS
type: module
description: 'Ստեղծում է Views ցուցադրման ոճ, որը ցուցադրում է տարեթվերի և ամիսների հղումների ցանկ՝ հակառակ ժամանակագրական կարգով։'
package: Views
core: '8.x'
dependencies:
  - drupal:views

Classy

Այժմ ժամանակն է ստեղծել plugin-ի դասը։ Ստեղծեք Tardis.php ֆայլը src/Plugin/views/style թղթապանակում և տեղադրեք հետևյալ կոդը․

<?php

namespace Drupal\tardis\Plugin\views\style;

use Drupal\Core\Form\FormStateInterface;
use Drupal\views\Plugin\views\style\StylePluginBase;

/**
 * Տեսակի plugin՝ հակառակ ժամանակագրական կարգով տարեթվերի և ամիսների ցուցակ ստեղծելու և դրանց հղումներ կապելու։
 *
 * @ingroup views_style_plugins
 *
 * @ViewsStyle(
 *   id = "tardis",
 *   title = @Translation("TARDIS"),
 *   help = @Translation("Ցուցադրել տարի և ամիսների ցանկ, որը հակառակ ժամանակագրական կարգով կապված է բովանդակության հետ։"),
 *   theme = "views_view_tardis",
 *   display_types = { "normal" }
 * )
 */
class Tardis extends StylePluginBase {

  /**
   * {@inheritdoc}
   */
  protected function defineOptions() {
    $options = parent::defineOptions();
    $options['path'] = array('default' => 'tardis');
    return $options;
  }

  /**
   * {@inheritdoc}
   */
  public function buildOptionsForm(&$form, FormStateInterface $form_state) {
    parent::buildOptionsForm($form, $form_state);

    // TARDIS հղումների ճանապարհի նախածանց։
    $form['path'] = array(
      '#type' => 'textfield',
      '#title' => t('Հղման ճանապարհ'),
      '#default_value' => (isset($this->options['path'])) ? $this->options['path'] : 'tardis',
      '#description' => t('Հղումների ճանապարհի նախածանցը՝ օրինակ՝ example.com<strong>/tardis/</strong>2015/10։'),
    );

    // Ամսվա ամսաթվի ձևաչափ։
    $form['month_date_format'] = array(
      '#type' => 'textfield',
      '#title' => t('Ամսվա ամսաթվի ձևաչափ'),
      '#default_value' => (isset($this->options['month_date_format'])) ? $this->options['month_date_format'] : 'm',
      '#description' => t('Համապատասխան PHP <a href="@url" target="_blank">Date ֆունկցիայի</a> պարամետր՝ ամսաթվերի ցուցադրման համար։', array('@url' => 'http://php.net/manual/en/function.date.php')),
    );

    // Ամիսների հղումների ներդիրումը տարիների մեջ։
    $options = array(
      1 => 'այո',
      0 => 'ոչ',
    );
    $form['nesting'] = array(
      '#type' => 'radios',
      '#title' => t('Ներդրում'),
      '#options' => $options,
      '#default_value' => (isset($this->options['nesting'])) ? $this->options['nesting'] : 1,
      '#description' => t('Ամիսները պետք է ներդրվեն տարիների մեջ? <br />
        Օրինակ:
        <table style="width:100px">
          <thead>
              <th>Ներդրում</th>
              <th>Առանց ներդրման</th>
          </thead>
          <tbody>
            <td>
              <ul>
                <li>2016
                  <ul>
                    <li>03</li>
                    <li>02</li>
                    <li>01</li>
                  </ul>
                </li>
              </ul>
            </td>
            <td>
              <ul>
                <li>2016/03</li>
                <li>2016/02</li>
                <li>2016/01</li>
              </ul>
            </td>
          </tbody>
        </table>
      '),
    );

    // Լրացուցիչ CSS դասեր։
    $form['classes'] = array(
      '#type' => 'textfield',
      '#title' => t('CSS դասեր'),
      '#default_value' => (isset($this->options['classes'])) ? $this->options['classes'] : 'view-tardis',
      '#description' => t('CSS դասեր TARDIS էջի լրացուցիչ հարմարեցման համար։'),
    );
  }

}

Ահա դրանցից որոշները դիտարկենք՝

 * @ViewsStyle(
 *   id = "tardis",
 *   title = @Translation("TARDIS"),
 *   help = @Translation("Ցուցադրել տարի և ամիսների ցանկ, որը հակառակ ժամանակագրական կարգով կապված է բովանդակության հետ։"),
 *   theme = "views_view_tardis",
 *   display_types = { "normal" }
 * )

Այս մեկնաբանությունները շատ կարևոր են։ Դրանք հիմք են դնում մեր plugin-ի համար։ Եթե դրանք չավելացնեք, կոդը ճիշտ չի աշխատի։

class Tardis extends StylePluginBase {

Plugin-ի հիմնական հայտարարությունը։ Հետաքրքրական է, սա պարտադիր է։

  protected function defineOptions() {
    $options = parent::defineOptions();
    $options['path'] = array('default' => 'tardis');
    return $options;
  }

Հիմնական օպցիաների սահմանում և կարևոր լռելյայն արժեք մեր plugin-ի համար։ Այստեղ է, որովհետև plugin-ը պետք է կարգավորվի։

  public function buildOptionsForm(&$form, FormStateInterface $form_state) {
    parent::buildOptionsForm($form, $form_state);

Շարունակելով՝ ստեղծվում է իրական պարամետրերի ֆորմը՝ դաշտերով, որոնք նման են սովորական կոնֆիգ ֆորմերի։ Լրացուցիչ տեղեկությունների համար դիտեք Ֆորմերի API-ի ուղեցույցը։

.file

.module ֆայլը պարտադիր չէ Drupal 8-ում, բայց հենց այնտեղ պետք է լինի թեմաների մասին տեղեկատվությունը․

<?php

/**
 * @file
 * TARDIS Views մոդուլի օգնության և թեմայի ֆունկցիաներ։
 */

/**
 * Կատարվում է hook_theme()։
 */
function tardis_theme($existing, $type, $theme, $path) {
  // TARDIS նախապատրաստման թեմայի ֆունկցիաները պահվում են առանձին .inc ֆայլում։
  \Drupal::moduleHandler()->loadInclude('tardis', 'inc', 'tardis.theme');

  return array(
    'tardis' => array(
      'file' => 'tardis.theme.inc',
    ),
  );
}

Հիմնականում մենք դելեգացնում ենք նախապատրաստման ֆունկցիան առանձին ֆայլին՝ ամեն ինչ կազմակերպված պահելու համար։

.theme.inc ֆայլ

Ստեղծեք tardis.theme.inc ֆայլը ձեր մոդուլի գրացուցակում և ավելացրեք հետևյալ կոդը․

<?php

/**
 * @file
 * TARDIS views թեմա։
 */
function template_preprocess_views_view_tardis(&$variables) {
  // Օգտատիրոջ կողմից սահմանված դիտման օպցիաները։
  $options = $variables['view']->style_plugin->options;

  // Ստեղծում ենք երկչափ զանգված տարիներով և ամիսներով։
  $time_pool = array();

  foreach ($variables['view']->result as $id => $result) {
    $created = $result->node_field_data_created;
    $created_year = date('Y', $created);
    // Ամսվա ամսաթվի ձևաչափը։
    $month_date_format = (isset($options['month_date_format'])) ? $options['month_date_format'] : 'm';
    $created_month_digits = date('m', $created);
    $created_month = date($month_date_format, $created);
    $time_pool[$created_year][$created_month_digits] = "$created_month";
  }

  $options['time_pool'] = $time_pool;

  // Թարմացնում ենք օպցիաները twig-ի համար։
  $variables['options'] = $options;
}

Այս կոդը հիմնականում վերցնում է բոլոր ստեղծման ամսաթվերը նոդերի համար և ստեղծում ասոցիատիվ զանգված, որը փոխանցվում է թեմատիկ ֆայլին վերջնական ռենդերի համար՝ մյուս ֆորմայով սահմանված օպցիաների հետ միասին, որոնք մնում են անփոփոխ։

Twig ֆայլ

Հիմա, որպեսզի մոդուլը արտածվի, ստեղծեք views-view-tardis.html.twig ֆայլը templates թղթապանակում։ Բայց ինչու հենց այդ անունը։ Հիշեք այս դասի սկզբում գտնվող մեկնաբանությունները․

* theme = "views_view_tardis",

Դա նշանակում է, որ թեմատիկ ֆայլը պետք է գտնվի սովորական տեղում (/templates) այդ անունով, միայն ներքին ներքև գծերը փոխարինված են գծիկներով և վերջում ավելացված է .html.twig։

Ինչ վերաբերում է կոդին՝

{#
/**
 * Views-ի հիմնական թեմայի իրականացում՝ TARDIS արխիվը արտածելու համար։
 *
 * Հասանելի փոփոխականներ՝
 * - options: Views plugin-ի ոճի օպցիաները՝
 *   - classes: CSS դասեր։
 *   - nesting: Ամիսները պետք է ներդրվեն տարիների մեջ։
 *   - path: Հղման ճանապարհ, օրինակ՝ example.com/TARDIS/2016/03
 *   - time_pool: Երկչափ զանգված՝ տարիներ և ամիսներ բովանդակությամբ։
 *
 * @see template_preprocess_views_view_tardis()
 *
 * @ingroup themeable
 */
#}
{%
  set classes = [
    'views-view-tardis',
    options.classes
  ]
%}
<div{{ attributes.addClass(classes) }}>
  <ul>
    {% for key, item in options.time_pool %}
      {% if options.nesting == 1 %}
        <li><a href="/{{ options.path }}/{{ key }}">{{ key }}</a><ul>
        {% for subkey, subitem in item %}
          <li><a href="/{{ options.path }}/{{ key }}/{{ subkey }}">{{ subitem }}</a></li>
        {% endfor %}
        </ul></li>
      {% else %}
        {% for subkey, subitem in item %}
          <li><a href="/{{ options.path }}/{{ key }}/{{ subkey }}">{{ subitem }}</a></li>
        {% endfor %}
      {% endif %}
    {% endfor %}
  </ul>
</div>

Առաջին հերթին խորհուրդ է տրվում բոլոր փոփոխականները դուրս բերել, որոնք փոխանցվել են ասոցիատիվ $variable զանգվածով ֆայլի սկզբում։ Դրանք խնամքով պահվում են $variable['options']-ում, կամ twig-ում՝ variables.options։

Այնուհետև մենք սահմանում ենք որոշ CSS դասեր մեր դիտման համար, ինչպես դա նշված է պարամետրերի ֆորմում՝

{%
  set classes = [
    'views-view-tardis',
    options.classes
  ]
%}

Եվ հիշեք դրանք՝

<div{{ attributes.addClass(classes) }}>

Կոդի մնացած մասը նվիրված է ամիսների և տարիների դուրս բերումն ու HTML ցուցակի կառուցմանը։ here կարևոր է նկատել for ցիկլը՝

{% for key, item in options.time_pool %}

Որը ապահովում է, որ յուրաքանչյուր հղում ճիշտ լինի։ Օրինակ՝

<li><a href="/{{ options.path }}/{{ key }}/{{ subkey }}">{{ subitem }}</a></li>

Եվ վերջում

Եվ վերջապես, մենք պետք է ստեղծենք նախնական դիտում և արտահանել այն, որպեսզի այն արագ մատչելի լինի օգտագործողների համար։ Դուք պետք է նկատեք, որ /config/install/views.view.tardis.yml արդեն ունի նախնական դիտում։ Այդ նախնական դիտումը հասանելի է այն պահից, երբ օգտատերերը ակտիվացնում են մոդուլը։

Ես ստեղծել եմ այն և արտահանել եմ միավոր արտահանման ձևով admin/config/development/configuration/single/export էջից, հետևելով Սուբհոջիթ Պալի հիանալի ուսուցման նյութին։

Սրանք բոլորը!

Հիմա դուք կարող եք գրել ձեր սեփական Views plugin-ը Drupal 8-ի համար։ Թողեք ձեր մեկնաբանությունը ներքև։ Հաջող կոդավորում!

Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.