برای ایجاد یک ماژول ساده با پیش نیازها و مقدمات ضروری در دروپال چند روش وجود دارد. خب این یعنی چی؟
یعنی اینکه اگر میخواهید یک ماژول جدید ایجاد کنید که یک سری کارهای خاص و ویژه ای انجام دهد ولی نمیدانید که ساختار و فایلهای استاندارد حداقلی و ضروری برای ایجاد آن چیست و یا اینکه حوصله ایجاد یک سری فایلها و ساختارهای تکراری را ندارید، آنگاه میتوانید از ابزارهای آماده برای این کار استفاده کنید. به این ابزارها کدساز یا Code Generator یا Code Builder یا همچین چیزی میگویند.
برای ایجاد یک ماژول ساده با پیش نیازها و مقدمات ضروری در دروپال چند روش وجود دارد. خب این یعنی چی؟ یعنی اینکه اگر میخواهید یک ماژول جدید ایجاد کنید که یک سری کارهای خاص و ویژه ای انجام دهد ولی نمیدانید که ساختار و فایلهای استاندارد حداقلی و ضروری برای ایجاد آن چیست و یا اینکه حوصله ایجاد یک سری فایلها و ساختارهای تکراری را ندارید، آنگاه میتوانید از ابزارهای آماده برای این کار استفاده کنید. به این ابزارها کدساز یا Code Generator یا Code Builder یا همچین چیزی میگویند.

کدسازهای برجسته در دروپال عبارتند از:

Drupal Console   -   Drush   -   Module Builder

با هم نگاهی به این کدسازها میندازیم:

 

Drupal Console

دروپال کنسول یک ابزار خط فرمان برای دروپال 8 هست: CLI = Command Line Tool

این ابزار بعد از دراش ایجاد شده و رقابت سختی با دراش دارد. این ابزار یک سری کارهای روتین نگهداری سایت مثل خالی کردن کش، اجرای کران، بک آپ گیری، ورود تنظیمات پیکربندی و کارهای توسعه ای مثل ایجاد ماژول های ساده و پیشنیازهای کد نویسی را انجام میدهد. برای مشاهده لیست دستورهای کدساز موجود در دروپال کنسول بعد از اطمینان از نصب صحیح دروپال کنسول، این فرمان را اجرا کنید:

./vendor/bin/drupal generate
or
drupal generate

نتیجه:
 

Drupal Console version 1.9.1

Available commands for the "generate" namespace:
  generate:ajax:command (gac)                 Generate & Register a custom ajax command
  generate:authentication:provider (gap)      Generate an Authentication Provider
  generate:breakpoint (gb)                    Generate breakpoint
  generate:cache:context (gcc)                Generate a cache context
  ...

 

ایجاد ماژول با دروپال کنسول :

drupal generate:module

سپس سوالهایی که از شما درباره اطلاعات اولیه ماژول مورد نیاز میپرسد و ماژول را ایجاد میکند:

 


 

 

ایجاد یک بلاک با کمک دروپال کنسول:

drupal generate:plugin:block

در سوال اول میپرسد که این بلاک را به کدام ماژول میخواهید اضافه کنید. یا در واقع میخواهید این بلاک توسط کدام مازول ایجاد شود و به کد کدام ماژول اضافه شود:

 Enter the module name [webform_access]:
 > dc_demo

در سوالهای بعدی نام کلاس، برچسب کلاس و شناسه کلاس را از شما میپرسد:

 Enter the plugin class name [DefaultBlock]:
 >

 Enter the plugin label [Default block]:
 >

 Enter the plugin id [default_block]:
 >

 

 

دروپال کنسول تا امروز حدود 5 میلیون دانلود، 300 مشارکت کننده در کد و 532 زیر توسعه شاخه متفاوت داشته است.

توضیحات بیشتر و منابع آموزشی مربوط به دروپال کنسول را از در سایت آن بررسی کنید: drupalconsole.com

 

 

 

Drush

دراش ابزار خط فرمان اصلی (CLI = Command Line Tool) دروپال است. دراش را میتوانید برای بازسازی کش، فعال و غیرفعال کردن ماژول ها، نصب کامل سایت و بک آپ گیری و بسیاری موارد دیگر استفاده کنید. این ابزار تانسخه 9 قابلیت کدساز نداشت. تا اینکه رقابت با سایر ابزارها این امکان را در نسخه 9 دراش به ارمغان آورد.

برای مشاهده همه دستورهای آماده برای کدسازی از دستور زیر استفاده کنید:

drush generate

نتیجه:

Drush generate 9.7.1

Run `drush generate [command]` and answer a few questions in order to write starter code to your project.

 Available commands:
 _global:
   composer (composer.json)                                       Generates a composer.json file
   controller                                                     Generates a controller
   field                                                          Generates a field
   ...

 

برای ساخت یک ماژول:

drush generate module-standard

و پرسشی چند در مورد ماژول مورد نیاز:

Module name:
➤ Drush demo

Module machine name [drush_demo]:
➤

Module description [The description.]:
➤

 

 

تفاوت ایجاد ماژول در دراش و دروپال کنسول این است که هنگام ساخت ماژول در دراش همزمان از شما در مورد ایجاد و افزودن انواع فایلها و پلاگینها پرسش میشود. اما در دروپال کنسول ابتدا مازول را ایجاد میکند و سپس هریک از فایلها و پلاگین ها را میتوانید به صورت مجزا به هر ماژولی اضافه کنید.

 

ایجاد یک فرم در دراش:

drush generate form-simple

 

دراش تاکنون حدود 3.5 میلیون بار دانلود شده است.

جزئیات بیشتری از دراش را در سایت اصلی آن بررسی نمایید: drush.org

 

 

Module Builder

ماژول بیلدر یک ماژول دروپالی است که با کمک رابط کاربری امکان ایجاد ماژول و سایر مخلفات آن را میدهد؛ بر خلاف دو روش قبلی که مبتنی بر خط فرمان بودند و نیاز به نصب ابزار خارج از دروپال بود.

این ماژول بعد از نصب از شما درخواست میکند که کلیه کدهای دروپال نصب شده شما را آنالیز کند تا هنگام ساخت ماژول و پلاگین یا هر کد دیگری با اشراف به وضعیت فعلی پیشنهادهای مناسب و بدون مشکل ارائه دهد:

 

 

بعد از آنالیز وضعیت و آمار همه چیز را شناسایی میکند:

 

 

سپس می‌توانید انواع کدهای مورد نیاز خود را از طریق تبهای موجود ایجاد نمایید:

 

جزئیات بیشتر از ماژول Module Builder  را در صفحه خودش در سایت دروپال مطالعه و بررسی کنید: https://www.drupal.org/project/module_builder

 

 

در آخر

امیدوارم بعد از خواندن این مقاله حس بهتری نصبت به توسعه کدها و ماژول در دروپال داشته باشید و کارتون راحتتر شده باشد. یادتون باشه که این ابزارها حتما روی محیط توسعه و نسخه Develop دروپالتون باید استفاده بشوند و بعد از نهایی شدن کد به نسخه در حال بهره برداری از پروژه منتقل شوند.

 

موفق باشید

علی خالقیان

Why Drupal? What are its features?

 

  • Open SourceDrupal is open-source.
  • Awards: Drupal has been the leading content management system in the world for many consecutive years. Drupal is the award winner for the most secure platform.
  • Huge Collection of Modules: A lot of free and open modules and tools have been developed based on Drupal.
  • Big Community: Drupal benefits from a vast global community of active developers and programmers with a huge collection of educational contents about its platform.
  • Independence: Thanks to global and public standards of Drupal, the business owner will have the independency of decision in order for working non-stop and stress-free in case of having problems with one specific contractor team or company.
  • Extensibility: Drupal is a highly extensible and flexible platform. In other words, it is completely possible to add more and more features to the project during development procedure in order to meet new requirements. All the features and subsystems are installed on the same unique core.
  • Integration: Informational, CRM, HRM, library management, e-commerce, forums and blogging websites all can be running seamlessly on a single system with a unique core.
  • User Experiences: The end user will access to a simple user friendly interface by which s/he can manage various sections and procedures in the easiest way possible.
  • Saving: All the above features will result in saving huge amount of time and consequently money in product development process.
  • Sub Systems: There are various types of subsystems integrating in Drupal.
  • Develop Platform: Drupal development is based on the power of Symphony framework which benefits from features and up-to-date global programming standards such as MVC.
  • Commerce: The existence of flexible financial infrastructure for managing financial processes.
  • Flexible Data Structure: The data structure is designed to be purely open and flexible
  • Headless (First API-First Service): In the latest versions, the Drupal core can independently act as a powerful software core in order for providing various web services to a lot of applications and devices.
  • Multilingual: The ability to be multilingual infinitely.
  • Multisite: The management of infinite number of websites with different domains on one single core and panel.
  • Flexible Report Maker: Flexibility in making various detailed reports.
  • JavaScript base admin UI: The ability to customize UI with JavaScript from the core.
  • Workflow: The support for designing various types of workflows
  • Media Management: The centralized management of files and media.
  • Etc.
کلیدواژه ها: 

why drupal

drupal feature


 

چه موارد جدیدی در دروپال 8.7.0 موجود است؟

 

  • ماژول Layout Builder به نسخه پایدار (Stable) رسیده است.
  • ماژول JSON:API به نسخه پایدار (Stable) رسیده است.
  • کتابخانه آزمایشی Media بهبود پیدا کرده است.
  • منو و دسته بندی (Taxonomy) ها قابلیت نسخه پذیری (Revisionable) گرفته اند.
  • امکانات جدید به پروفایل دموی Umami اضافه شده است.
  • گامهایی در مسیر دروپال 9 برداشته است. مثل: پشتیبانی از Twig2 - پشتیبانی از Symfony4

 

کلیدواژه ها: 

دروپال 8.7.0


مقاله ای که لینکش در زیر آمده است اشاره دارد به دلایل استفاده از دروپال از سوی دانشگاه ها و مراکز پیشرو علمی در سطح جهان؛ مثل دانشگاه هاروارد، دانشگاه آکسفورد، دانشگاه استانفورد، سازمان ناسا.

خب به نطر میرسه مهمترین دلیل توسعه پذیری نامحدود و انعطاف دروپال هست. خب اشاره شود که توزیع یا Distributions های خوبی هم برای موضوع آموزش و مدرسه و دانشگاه ارائه شده است.

این مقاله در بخش سرزمین دروپال Drupal.org هم معرفی شده است.

https://drudesk.com/blog/drupal-university-websites

نسخه رسمی دروپال را میتوانید از اینجا دریافت کنید.

قبل از نصب، میتوانید نیازمندیهای سیستم جهت نصب و روش نصب دروپال 8 را مطالعه نمایید.

 

دانلود آخرین نسخه پایدار دروپال 8 :

 

8.7.3

drupal-8.7.3.zip

drupal-8.7.3.tar.gz

 

دانلود آخرین نسخه پایدار دروپال 7 :

 

7.67

drupal-7.67.zip

drupal-7.67.tar.gz

 

دانلود نسخه های در حال توسعه dev :

 

8.8.x-dev

drupal-8.8.x-dev.zip

drupal-8.8.x-dev.tar.gz

 

8.7.x-dev

drupal-8.7.x-dev.zip

drupal-8.7.x-dev.tar.gz

 

7.x-dev

drupal-7.x-dev.zip

drupal-7.x-dev.tar.gz

 

 

در دروپال شما می‌توانید قالب پیشفرض را از صفحه مدیریت قالبها تنظیم کنید و یا با بعضی ماژولهای کمکی مثل themeKey برای کاربران خاص یا صفحات خاص یا گیرنده خاص مثل موبایل یا ترکیبی از شروط یک قالب مجزا تعیین کنید.
اما همه این کارها را به سادگی با چند خط کد هم می‎توان انجام داد.
در دروپال شما می‌توانید قالب پیشفرض را از صفحه مدیریت قالبها تنظیم کنید و یا با بعضی ماژولهای کمکی مثل themeKey برای کاربران خاص یا صفحات خاص یا گیرنده خاص مثل موبایل یا ترکیبی از شروط یک قالب مجزا تعیین کنید. اما همه این کارها را به سادگی با چند خط کد هم می‎توان انجام داد.

 

برای این کار در دروپال 7 کافی بود از هوک hook_custom_theme استفاده کنید.

امادر دروپال 8 در دایرکتوری روت ماژولتان یک فایل  جهت معرفی سرویسهای استفاده شده ایجاد کنید. مثلا فایلی با نام:

myModule.services.yml

 

سپس فایل را باز کنید و بگویید که میخواهم از سرویس تغییر قالب استفاده کنم و آدرس کلاس مربوط به آن را بدهم و اولویت آن را بین همه سرویس های مشابه که در سایر ماژولها استفاده شده تعیین کنم:

services:
    myModule.theme.negotiator:
        class: Drupal\myModule\Theme\ThemeNegotiator
        tags:
          - { name: theme_negotiator, priority: 1000 }

 

سپس فایل کلاسی را که در بالا معرفی کردیم در دایرکتوری و جایگاه زیر ایجاد می‌کنیم:

myModule/src/Theme/ThemeNegotiator.php

 

فایل را باز میکنیم و ThemeNegotiatorInterface را به صورت زیر پیاده سازی می‌کنیم:

<?php
namespace Drupal\myModule\Theme;

use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\Core\Theme\ThemeNegotiatorInterface;

class ThemeNegotiator implements ThemeNegotiatorInterface {
    /**
     * @param RouteMatchInterface $route_match
     * @return bool
     */
    public function applies(RouteMatchInterface $route_match)
    {
        return $this->negotiateRoute($route_match) ? true : false;
    }
    /**
     * @param RouteMatchInterface $route_match
     * @return null|string
     */
    public function determineActiveTheme(RouteMatchInterface $route_match)
    {
        return $this->negotiateRoute($route_match) ?: null;
    }
    /**
     * Function that does all of the work in selecting a theme
     * @param RouteMatchInterface $route_match
     * @return bool|string
     */
    private function negotiateRoute(RouteMatchInterface $route_match)
    {
		
        $userRolesArray = \Drupal::currentUser()->getRoles();
        if ($route_match->getRouteName() == 'user.login') {
            return 'myTheme_1';
        }
        elseif ($route_match->getRouteName() == 'some.other.route') {
            return 'myTheme_2';
        }
        elseif (in_array("administrator", $userRolesArray)) {
            return 'myTheme_3';
        }
		
		$detect = \Drupal::service('mobiledetect')->detect();
		if (isset($_GET['theme']) && $_GET['theme'] == 'myTheme_4' && $detect->isMobile())
        {
            return 'myTheme_4';
        }
		
        return false;
    }
}

این کلاس را همینطور که هست کپی کنید. بخش مهم خط 29 به بعد هست. یعنی فانکشن negotiateRoute.

در خط 32 نقش کاربر را خوانده ایم.

در خط 33 گفته ایم اگر صفحه فعلی صفحه لاگین کاربر بود قالب یک روی صفحه اعمال شود.

در خط 36 گفته ایم اگر مثلا صفحه ای دیگر بود قالب دو اعمال شود.

در خط 39 گفته ایم اگر کاربر نقش administrator داشت قالب 3 اعمال شود.

در خط 43 سرویس موبایل دیتکت را فراخوانده ایم. این سرویس نیاز به نصب ماژول mobiledetect دارد و برای بررسی User Agent کاربرد دارد. مثلا برای بررسی دستگاه کاربر که موبایل است یا دستکتاپ یا تبلت یا غیره استفاده دارد.

در خط 44 گفته ایم اگر دستگاه کاربر موبایل بود یا اینکه نام قالب را در URL وارد کرده بود قالب 4 روی صفحه اعمال شود.

 

موفق باشید

 

خیلی وقتها هست که میخواهیم برای یک حالت خواص از یک Node یا Term یا User یا Menu یا Block یا Region یا Page یا هر Entity دیگری یک فایل قالب اختصاصی ایجاد کنیم و داخلش هر نوع کد دلخواهی وارد کنیم که اختصاص به اون حالت داشته باشد.

 

مثلا: ما به صورت پیشفرض میتونیم فایل node.html.twig را برای هر نوع NodeType دلخواه overwrite کنیم مثلا میشه اینجوری: node--[myNodeType].html.twig و داخل این فایل هرجور دوست داریم به دلخواه خود برای نمایش این نوع از نود استایل بزنیم. اما اگر بخواهیم برای این نوع نود فایل page.html.twig هم اختصاصی باشد چطور؟

این حالت به صورت پیشفرض تعریف نشده است اما هوکهایی هست که به راحتی امکان ایجاد هر نوع سفارشی سازی را برای نام فایلهای قابل بازنویسی در قالب ایجاد می‌کنند. الگوی این هوکها به این صورت است: 

function [myThemeName]_theme_suggestions_[themeFileForOverwrite]_alter

 

مثلا هوک زیر برای ایجاد یک نام پیشنهادی جدید برای فایلهای page است :

function myTheme_theme_suggestions_page_alter(array &$suggestions, array $variables) {
}

 

وهوک زیر برای ایجاد یک نام پیشنهادی جدید جهت فایل menu :

function myTheme_theme_suggestions_menu_alter

 

خب حالا یک هوکی مینویسیم که بشود برای هر نوع از نودها فایل page.html.twig را هم به صورت اختصاصی و جداگانه بازنویسی کرد:

function sfae_theme_suggestions_page_alter(array &$suggestions, array $variables) {
	# if the page is node then add node_type to file name suggestion as "page--node-type--myNodeType.html.twig"
	if ($node = \Drupal::routeMatch()->getParameter('node')) {
		$variables['node'] = $node;
		$suggestions[] = 'page__node_type__'.$variables['node']->getType();
	}
}

 

و بعد از این میتونیم از این الگو برای بازنویسی فایلهای page.html.twig استفاده کرد:

page--node-type--[myNodeType].html.twig

 

حالا با همین هوک آخر یک حالتی بنویسید که برای هر نود به ازای هر یک از term ها یا دسته هایی که عضو آنها هست بتوان فایل page را بازنویسی کرد! میتونیم نوع نود را هم در این حالتها دخالت بدهیم تا صدها پیشنهاد یا suggestions جدید ایجاد گردد :)

خبر خوشحالی بخش اینکه اگر تنظیمات حالت develop روی پروژه شما فعال باشد در مروگر خود در هر صفحه ای و هرجایی از سایت که کد را باز کنید (inspect) فایل نام های پیشنهادی موجود جهت overwrite کردن فایل در آن قسمت را در حالت کامنت به شما نمایش میدهد و فایل فعال فعلی را با یک ضربدر مشخص کرده است.

برای استفاده از این امکان دولوپری در فایل development.services.yml پروژه حالت زیر را اضافه کنید:

parameters:
  twig.config:
    debug: true

 

موفق باشید

یادتون هست که چند وقتی در تمام صفحات سایت اصلی دروپال یعنی Drupal.org تبلیغ عضو گیری برای اتحادیه دروپال یا همان Drupal Association انجام می‌شد؟

حالا دروپال اعلام کرده است که برای گسترش وجهه عمومی و مردمی این اتحادیه، برای انتخاب چند نفر از اعضا هیئت مدیره اتحادیه امسال انتخابات برگزار خواهد کرد.

این هیئت مدیره نقش تعیین کننده ای در سیاستهای کلی حاکم بر استراتژی های توسعه دروپال خواهند داشت!

https://www.drupal.org/association/blog/drupal-association-board-elections-2019

کلیدواژه ها: 

Drupal Association


کسانی که به خام و زشت بودن دروپال در نصب اولیه اعتراض داشتند باید خوشحال باشند که ازین به بعد موقع نصب دروپال 8 می‌توانید پروفایل umami را انتخاب نمایید تا یک دموی اولیه شامل قالب زیبا و محتوای آزمایشی با موضوع آشپزی برای شما ایجاد شود. خب این اعتراض به جایی بود بخصوص برای کسانی که از سیستم های مدیریت محتوای دیگه به دروپال مهاجرت میکردند و دروپال را با آنها مقایسه میکردند. مبارک باشد :)


دروپلر یک توزیع و پروفایل دروپال 8 هست که یک بسته کامل دروپال را با تمام ماژولها و کتابخانه ها و مخلفات مورد نیاز در اختیار شما قرار میدهد و برای پروژه های که خیلی وقتتون محدود هست میتواند کمک کند.

این پروفایل امکانات جالبی از جمله مدیریت Drag&Drop با کشیدن و ول کردن باکسها، بلوکها و ویترین ها در صفحات مختلف را به کمک ماژول Geysir در اختیار شما قرار میدهد. قالب اون هم با Bootstrap4 طراحی شده و توسعه و تغییرات را آسان میکند.

اگر نکته جالبی در این پروفایل دیدین به ما هم خبر بدین:

https://www.drupal.org/project/droopler

صفحات