My first experience of Drupal Training at Valuebound

Learning Drupal has never been this interesting!

Recently, I attended my first Drupal training session at Valuebound on this Drupal Global Training Day. Surprise to know that the session was free and you missed it!

Don’t worry! Drupal community believes in contributing towards the society by sharing the knowledge and conducting free training sessions across the world. Global Training days is one of those initiatives where experience developers from companies and local groups introduce newcomers to the Drupal community.

The introductory session by Nishant Kumar and Chirag Shah was very informative as it provided an overview of Drupal, its feature and future, growing market demand, current job scenario and most importantly, prominent brands using the CMS, such as UNFPA, Magento, Tesla, Yahoo.

Coming from a non-technical background, I found the sessions very useful as it helped me in learning Drupal’s Front and back-end development tools as well as to build my personal Drupal website. Just to let you know, there's a common misconception surrounding CMS that you can create and customize your website only if you have mounds of coding knowledge. But it is not. 

Drupal 8's accessibility support, content authoring, admin experience, configuration management, translation support, responsive themes and key core modules like views and ckeditor are some of the major advantages to give a hard blow to competitors like WordPress. 

In the later phase of the session, the team discussed on back-end development, which was particularly aimed at Drupal Developers with an intermediate-level knowledge of PHP and SQL. 

Topics covered 

The more advanced, developer-level classes were divided topic wise. Let’s check out the list of session covered. Don’t worry I won’t let you stuck in between and share links to important blogs that will help you in creating your own live Drupal website. 

Drupal 8 Folder structure: Well, the session started with a brief look at Drupal 8 Folder structure to have a better understanding of the protocols and what is where.

Installing Drupal 8: You can install Drupal 8 on your local machine as well as in Acquia free cloud. And if you are planning to speed up administrative and development tasks for your site then I will suggest you install Drupal with Drush command. By installing Drush, we can perform the useful actions simply by typing a command into a terminal for the actions that usually take multiple steps in a web browser.

Drupal overview and site-building: This session was particularly intended for all skill levels - best for those who have completed the Introduction to Drupal 8 course.

Configuration management is turning out to be an effective replacement for Features module as it helps in creating and modifying configuration entities easily. In this session, the mentors discussed what we can do through configuration like site building, content types, taxonomies etc. Further, Configuration management has been integrated into the Drupal 8 Core to let you make and verify site configuration changes in the development, staging and production environments. 

Contributed themes: Theming in Drupal has undergone a lot of changes since Drupal 7 and now Drupal 8 has become the most leading Drupal ever build and adding more feature compared to other CMS which are out there. For instance, Introduction of twig in theming part.

Views: The most installed module - Drupal Views - is now available as the core module. And you don’t have to search for the latest version separately. For the 1st timer, Views allows you to generate a dynamic query using easy to use UI.

Remaining sessions were on Drupal 8 module development, setting up local dev box for Drupal 8 website on Apache server and configuring Apache Solr 6.6.1 with Drupal applications to achieve fast product/content search for enterprise web applications and others.

When I completed the session, I was surprised at how much we can do with Drupal. My experience at Drupal training session gave me a moderate-level understanding of the platform. How about you? Did you attend the session this year, if not, then probably you missed something. But don’t worry! Valuebound and other Drupal companies conduct similar session every year and you can attend it next time.

Please share your experiences by commenting below.
 

Secure users private data from unauthorised access using SSL

As a member of development team, I used to develop web applications using Drupal CMS without worrying about HTTP or HTTPS as it has to be added by dev operational team in my organization. On the serious note “How the Secure Sockets Layer (SSL) prepended to the existing URL” and How does it make a huge difference? Why it is important to make your web URL prepend https instead of HTTP.

Today SSL has become an eye-glazing topic and people want to know more about it so that they can protect their data from unauthorized access. In this blog post, we will take a brief look at basics of SSL and discuss how to secure the website running on Apache with HTTPS. Don’t worry! It's not a rocket science and very simple to secure your site as well as private data. In between, we will also explore some examples of secured and unsecured websites. You may also like to check out how to install & configure Apache on Windows machine.

Note: HTTP is not an encrypted server, hence, prone to cyber attacks and malware. 

Scenario

What happens when we connect to any website by entering the URL, it looks for specific IP address and then connect you to that server. Ones you start making a frequent request for each and every event from the HTTP server, the data sent from your server becomes prone to attack as it is in clear text format. 

And during this process, eavesdropper gets an access to read the conversation and attempt to create severe problems by using personal credentials, bank details, and other sensitive data. This is one of the major loopholes of HTTP. In contrast to that https protects your data from unauthorized access. Saving from all these headaches. 

See the image below for an example of an above-mentioned scenario.

HTTP

Solution:

In order to overcome the above situation, we need to transform HTTP to HTTPS in an address bar. In HTTPS, S stands for Secure Sockets Layer (SSL), which is responsible for securing communication over the internet. 

Check out the address bar of below screenshot for an example of SSL enabled site.

Address bar screenshot

 

HTTPS is comparatively more secure than HTTP. When we connect to a website, it automatically redirects to HTTPS and after that browser checks the certificate and verifies from the certificate authority (CA). Remember, a bad certificate issued by CA causes system failure sometimes.

When we send information over HTTPS, note, we are safe to make online transactions and share important credentials as it is encrypted. Enabling https on your site protects you from eavesdropping and any other attack.

Below figure is an example of how HTTP and HTTPS work.

HTTP vs HTTPS

On top of that if you are marketing or promoting your website among others then you should be more careful and enable SSL. Enabling SSL helps you to place your website in the special category, called secure, which pops up on the address bar when you start searching.

However, the presence of HTTPS and lock screen on address bar is not enough to say your browsing is secured. Some hackers create lock icon and replace with favicon just to showcase secure website. Keep your eyes open for these technical glitches.

Secure connection

 

If you don’t find HTTPS indicator on the browser, it means you may be connected to an impostor website on a compromised network. Well, these are the basics and I guess this much knowledge is enough for SSL and how somebody can perform secure browsing over SSL. 

Let’s get some local set up to perform SSL. 

What I am running on 

I have XAMPP web servers that run on Apache. 

How can we achieve

To enable SSL, we have to configure three major files.

  1. Httpd-vhosts.conf
  2. Httpd.conf
  3. httpd-ssl.conf

httpd-vhosts.conf

At this place, we create hostname by adding some of the parameters to enable SSL for the local web.

Codes mentioned below belongs to my local instance.
 

# http

DocumentRoot "C:/xampp/htdocs/api"

Options All
AllowOverride All
Require all granted

# https

DocumentRoot "C:/xampp/htdocs/api"
ServerName api
SSLEngine on
SSLCertificateFile "conf/ssl.crt/server.crt"
SSLCertificateKeyFile "conf/ssl.key/server.key"

Options All
AllowOverride All
Require all granted

Once the SSL is enabled, your site is going to look similar to this.

SSL enabled site

Some of the important parameters that I would like to discuss here:

  • SSLEngine

To turn on secure communications using SSL, we need to add a separate block to our host file, where one would be for handling regular HTTP and another one for https. Just to let you know, SSL should be disabled by default in the main server as well as in newly configured virtual hosts.

Syntax:   SSLEngine on|off|optional
Default:  SSLEngine off

Module:  mod_ssl

Example: SSLEngine on
    

  • SSLCertificateFile

This certificate file holds X.509 Certificate public key for data encryption.

Syntax: SSLCertificateFile file-path

Module: mod_ssl

Example: SSLCertificateFile "conf/ssl.crt/server.crt"

  • SSLCertificateKeyFile

This file holds private key for the corresponding public keys, which is used in SSLCertificateFile to encrypt and decrypt the data. 

Syntax:  SSLCertificateKeyFile file-path

Module: mod_ssl

Example:  SSLCertificateKeyFile "conf/ssl.key/server.key"

  • httpd.conf 

Apache configuration file contains one directive per line. Main configuration is of server is always been pulled up from httpd.conf file. Httpd is capable of loading multiple module and configuration for your website.

Location: C:\xampp\apache\conf\httpd.conf

To enable SSL make sure SSL is enable not comment out by [#]tag.
search for 

#Secure (SSL/TLS) connections
#Include conf/extra/httpd-ssl.conf
 

  • httpd-ssl.conf

All SSL enabled from apache takes default port as 443. 
Make sure to remove the comment from DocumentRoot to allow SSL

##
## SSL Virtual Host Context
##

# General setup for the virtual host
#DocumentRoot "C:/xampp/htdocs"

Location: C:\xampp\apache\conf\extra\httpd-ssl.conf

This post is all about transforming your HTTP to HTTP(S), which is required to secure transmission & avoid eavesdropping. I have performed this on my local machine. In a similar way, you can do it on the real-time web application on the web server. To get the verified certificate, you can get in touch with web hosting distributor or third party or create your own self-signed-certificate to list your website in the generic list and Top Ranking.

Enable SSL on your website and see what it can do for you. Also, if you have any suggestions or queries please comment down and let me try to answer.

Planning to attend next Drupal Camp? Here are 6 things you should look for

Attending Drupal Camps has always excited me, reassuring faith on open source platform for building amazing digital experience. Drupal Camp Pune 2017, which was held at Symbiosis Institute of Management Studies, was such an event. Though it is bit late but worth sharing such an amazing experience.

Considered I am fairly new to this tightly-knit Drupal Community where developers and other enthusiasts are quite active in sharing their learning experiences. In July, me along with my colleagues - Puja Kumari and Suchitra Kumari from Valuebound - participated in Drupal Camp, and returned with new ideas, challenged assumptions, professional relationship, and others.

Not to mention, it was an amazing time meeting professionals, Drupal enthusiasts, college students and job seekers. The Camp received a remarkable response from more than 200 participants as expected. For the event, Valuebound - Drupal services specialist, Bangalore was one of the sponsors along with Acquia, Srijan Technologies, Innoraft Solutions, QED42, Drupalize.Me and OpenSense Labs.

Drupal Camp Pune 2017

Here are the six takeaways from Drupal Camp Pune 2017:

  • At the camp, we met a lot of enthusiasts who believe in open source platform and looking forward to work in Drupal.
  • Seeing the enthusiasm and energy of Drupal developers, many recent college grads and experienced employees enrolled for the ongoing hiring process.
  • It gave us golden opportunity to meet like-minded people and understand how leading organizations leverage the benefits of Drupal to reach their estimated goals.
  • The camp also helped me in understanding the importance of teamwork, community, and contribution towards Drupal.
  • Most importantly, it was an awesome time attending the Camp and met people having the same destination but different paths to success.
  • Notably, there were some excellent sessions. One of the sessions by featured speaker Rakesh James, who spoke on “why we need to invest in Drupal 8 and its future”, received great response from Drupal enthusiasts.

Drupalers

Following the session, we also hosted a range of fun-filled activities that engaged quite a lot of participants from the Camp. Many people also grabbed goodies as a souvenir.

Drupal Camp Pune Participants

It was a great time to attend the event. The Drupal community is more than just drupal.org where everyone is happy to discuss problems and share ideas. Not to mention, it left a beautiful memory and inspiration for forthcoming community events. 

With this, we look forward to being hosts once again like Drupal Camp Mumbai 2017 and  Drupal Camp Bangalore 2015.

How to use Features module in Drupal 8 to bundle functionality in reusable module

Features Module has played a significant role in deploying site configuration for Drupal 7. If you’ve ever build a site in Drupal 7, then possibly you have worked with the Features Module. However, CMI in Drupal 8 solved a lot of problems that we faced with Features in Drupal 7. In this blog, we will discuss - Why do we need Features Module in Drupal 8? What is the use of it? We will also attempt to export photo gallery feature.

Let’s take a use-case where you are working on a media and publishing company project and your client wants a feature of ‘Photo Gallery’ on his/her website. In this case, you will have to keep a track of following files:
 

  • content-type.yml
  • my-fields-storage.yml
  • view.yml
  • image-style.yml
     

So now how we will get to know that Photo Gallery feature comprises only of the above-mentioned files or still there are any more dependencies? 

Is there any way where these files are BUNDLED together? Is there any way where configuration (e.g. adding fields, image style to view) changes related to Photo Gallery feature is auto-detected?

This is where Features Module is used to bundle functionality into reusable modules. That’s main difference between CMI and Features.

Let’s see steps involved in exporting photo gallery feature in Drupal 8

Note: We are installing Feature Module using drush commands.

  • Install features module using the following drush command: 

drush en features -y

  • Create a content type My Image Gallery having an Image field.

manage fields

  • Create an Image Style, such as My Image Style. See the screenshot below for an example.

image style

  • Now create a view of the content type ‘My Image Gallery‘ with the image field.

creating a view

  • Add Image field. Select the Format as ‘Image’ and Style as ‘My image Style’.
  • Add Some content and your gallery will look like:

gallery

  • Now to Export this feature, go to Config>Development>Features.
  • Create a bundle to give a common namespace to your feature.

bundle format

  • Ones you create a bundle, Image Gallery View will be auto detected by feature:

auto detect

  • Now click on ‘My Image Gallery’. Add it to ‘xyz’ bundle and click on write.

feature page

  • It will then create a module in your custom folder by the name ‘xyz_my_image_gallery’.

module structure

  • You can place the module in any other instance and enable it. The Feature will be installed with all the configurations and we don't NEED FEATURES MODULE on other instances to install and use this module.

Notably, a Feature Module contains additional information in its .info.yml and .feature.yml file to check, update, or revert configuration programmatically.

.info.yml:

 info.yml

.features.yml:

feature.yml

How to decide what to use?

It depends on the use-cases. If you need to export and deploy simple site configuration then you can use Drupal 8 configuration management system instead of Features. Whereas Features in Drupal 8 can be used to export bundled functionality like a photo gallery feature, a blog or press room.

Media and Publishing companies are constantly transforming, and so is development, we, at Valuebound are one of those companies who specifically help organizations in their path to Digital Transformation. We enhance digital experience for end users, with customized web applications. 

Hope this blog will helpful for you to export features programmatically. If you have any doubts or questions, please comment below we will be happy to help you.

Below given is a presentation on Features Module.
 

Reference

https://www.drupal.org/project/features 
https://events.drupal.org/losangeles2015/sessions/features-drupal-8 
https://www.phase2technology.com/blog/announcing-features-drupal-8

 

Free Drupal Training Session at Valuebound, Bangalore on Global Training Day

We are excited to inform you that Valuebound, Bangalore is conducting a free “Drupal-in-a-day” training session on this Drupal Global Training Day i.e. 16th September 2017, Saturday. The session is an initiative of Drupal Association to introduce newbies to the world of open source platform.

Learn and design your own live Drupal website. The session will be presented by our Drupal 8 expert practitioners and senior Drupal consultants, having years of experience in delivering successful projects. The session will also help you in understanding how CMS can help you in your career building.

Level: Introductory

Duration: 1 Day

Proposed Session

Valuebound Drupal-in-a-day training comprises of various sessions that span over the different stages of designing a live Drupal Website. The session will also focus on teaching you the main features and concepts of Drupal with live practice sessions, terminologies associated with it and different modules. When you will complete this, you will have a moderate-level knowledge of Drupal in designing live websites and selecting modules to get the functionality you want with maximum benefit.

Ideal for...

Whether you're an established professional or new to Drupal, this training session will give you an expertise you need in building your own live website. 

If you are PHP/Web developers, then you would never like to miss this opportunity as it will help you in giving an edge to your career with an additional insight. 

Fresh Graduates can easily learn about CMS that will help them in giving a boost start to their IT career path as a developer. Drupal is widely used by Fortune 500 companies, governments, start-ups and more.

If you are a Career Switcher and planning to change your domain then it is the best time to learn what more is there for you in IT industry.

Project Managers considering Drupal projects can best utilize this training session as it will help in understanding what they should know about the CMS.

Decision Makers can best utilize of the session to evaluate Drupal for building their product on. Explore why it’s the perfect fit for your next project. 

Drupal Training session is for everyone, who is interested in knowing what Drupal is and evaluating or implementing it.

Prerequisite, but not mandate

Starting from scratch may be difficult, but a little knowledge of CMS would be an added advantage. If you have a hand on experience on WordPress, Joomla or HTML, and CSS then it would be great. Else no worries! The training is aimed at training and encouraging newcomers and polish the fresh graduates. This session will present you an outline of Drupal concepts and not an in-depth course.

So what

When you will complete the session, you: 

  • Will have your own live Drupal website.
  • Will be able to install and configure modules and themes from Drupal.org.
  • Can create content and configure content types as well as create listings of content.
  • Can easily manage user roles and accounts, as well as aliases and URL paths.
  • Can also create blocks and place them in the layout
  • Why this training session is free

We believe that the best way to contribute some thing is to share the knowledge within its community and newcomers. Valuebound is an active contributor to the Drupal Community and has achieved the top position in the country and seventh globally. This event is part of one of our efforts to give back to the community.

As a Drupal specialist, Valuebound is dedicated to help organizations and individuals to adopt the platform in their operations effectively. And we believe in giving result oriented training sessions that will help you to build the perfect websites you visualize.

Come and join us! Be part of our Global Community where learning and committing is the key to success. If you have any queries or doubts regarding the session, comment below or contact us.

Final hours: RSVP to register.

Note: Carry your own laptop to make the best use of the session

How to create custom REST method to protect your content from unauthorised use

In last few years, protecting data from an unauthorised use has become a challenging task. Recently, we came across a similar situation while working on a media and publishing industry project where most of the content was used through services. And we were requested to protect the content from unauthorised use and help in stopping such practices. 

Here in this scenario, RESTful Web Services API played a significant role in overcoming the situation. However, in some cases, the default RESTful API doesn’t work effectively and leave the requirement unfulfilled. In this case, we will create a custom REST method that helps you to access nodes using API keys. Let’s see how we can achieve this?

Here we need to deal with two things:

  • Create a View to export data with Rest API
  • Create a custom Rest method to access  nodes

I guess you would also like to take a look on our previous blogs where we have created Rest Resource for GET Method to enable other websites or applications to view, edit or update information; and Custom Rest Resources for POST methods to create an article in Drupal 8 website from an external application.

Follow the below steps to create a View to export data with Rest API followed by customizing Rest method to access nodes by using the API keys.

How to create a View to export data with Rest API?

Step 1

Select the RESTful Web Services module and download REST UI dependency module. See the screenshot below for an example.web services

Step 2

After Installing Web services, create a View to export data with Rest API following a few simple steps. Fill basic pieces of information then save and edit to create the REST pages.

Step 3

Go to admin/structure/views and click on Add View Button. Follow the below steps.

  • Create a View  named  “article view” 
  • In View setting, select the Type Article
  • Select the “REST EXPORT SETTING”

create view

Step 4

In View page, you need to

  • Select the Serializer formatter

  • In Format, click on settings and select json format

  • Select Title and Description field

  • Expose the Content ID

  • In Path Setting, give path /json/article-id

 

View export

 

 

style options

Step 5

Now let’s access the article node in browser using the path given and Content ID.

Example

URL: {Basepath}/json/article-id?nid=6

Rest export

Now you can test using Rest Client by entering the Url. See the below screenshot.

Advanced rest client

How to create Custom Rest Method to Access Nodes by using the API keys?

Let’s create a Custom Rest Method to Access Nodes so we can create a custom module. We can also use Drupal Console to create a module.

The module name is “test_api”

See the screenshot below for an example of the folder structure.

TestAPI

 

TestAPI

Step 1

Create a test_api.info.yml file and enter the following code.

name: Test API

type: module

description: Custom RESTful API module.

author: Sarada Prasad

core: 8.x

Step 2

For the below code to work, we need to create a TestAPIController.php file inside Controller folder.

Here, we are showing Get Method example.

Step 3

Follow the codes to create a routing file test_api.routing.yml file to access the methods.

Step 4

Let’s build a Form APIKeySettingsForm.php inside Form folder to create API Key to access the node.

Step 5

set the APIkey

Step 6

You can also access the node with the API key created and test using Rest Client.

{Basepath}/my-api/get.json?nid=5&apikey=helloapi12345

Building Restful Web services

There you have it, now you can test using Rest Client

Advanced rest client

Customizing Web services programmatically has become a routine task in order to protect the company’s data. In this post, I haven’t covered a lot of basic things and explained how to create and customize Web services. The above-explained process will also help you in securing your client’s data.

Hope this blog will be helpful for you. If I have missed something or you want to add then please comment below. Whether you are Media and Publishing firm or a Drupaler, you can discuss with us the problems you are currently facing or any other service related issue anytime. You are just a click away.

Below given is a presentation on RestFul Web Services in Drupal 8.

Setting up local dev box for Drupal 8 on Pantheon using Drush commands

Over the past couple of months, I have been facing a similar situation where many developers are unable to set up a local dev box for Drupal 8 on Pantheon server. Pantheon plays a significant role in hosting a website as it has fast set-up to local and best use of drush command to accelerate administrative and development tasks for Drupal sites.

For an introduction to drush command, you can check our previous blog post where we have explained about writing custom Drush commands in Drupal and installing Drupal with Drush. In this post, I will show you how to set up local dev box for Drupal 8. This blog will be helpful for all industry types and individuals, and after completing it you will find yourself at a moderate level of expertise.

Let’s follow the process step-by-step to set up our own local dev box:

Step 1

  • To set up local dev box for Drupal 8 on Pantheon server, go to dev environment of given site
  • Click on code
  • Click on git and copy below command
git clone ssh://codeserver.dev.463157b8-419d-482f-b571-xxxxxxxxx@codeserver.dev.463157b8-419d-482f-b571-3504bb893903.drush.in:2222/~/repository.git nishant-drupal-8

Step 2

  • Then go to your web root i.e. /var/www/html/ and paste the copied command
git clone ssh://codeserver.dev.463157b8-419d-482f-b571-xxxxxxxxx@codeserver.dev.463157b8-419d-482f-b571-3504bb893903.drush.in:2222/~/repository.git nishant-drupal-8

Step 3

  • Meanwhile, create a database for the site in local
mysql -u root -p

Enter the administrator password you set-up during installation

CREATE DATABASE drupal8;

Step 4

i.e. /home//.drush/

  • Place below code in .drush folder file name as local.aliases.drushrc.php

--------------------------------------------------------------------------

------------------------------------------------------------------------

 

 

 

Step 5

 

 

 

 

 

 

 

  • After clone is done, go to /var/www/html/nishant-drupal-8/sites/default/
  • Create new settings.local.php should be an settings.local.php of Drupal 8 Note: Add below code snippet

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Step 6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • Create files folder in sites/all/default/
  • Give permission to file folder Chmod 777 -R files/
  • Go to ./drush folder through terminal and type drush cc drush
  • Now on terminal, type drush sa

 

 

 

You will get all local aliases, dev aliases, test aliases and live aliases

 

 

 

 

 

 

 

Eg:-

@local.nishant-drupal-8 ← local aliases
@pantheon.nishant-drupal-8.dev ← pantheon dev aliases
@pantheon.nishant-drupal-8.live ← pantheon live aliases
@pantheon.nishant-drupal-8.test ← pantheon live aliases

 

 

 

 

 

 

 

Note: These aliases are important to sync any database and file

 

 

 

 

 

 

 

Step 7

 

 

 

 

 

 

 

  • How to sync database from dev to local

 

 

 

drush sql-sync
drush sql-sync @pantheon.nishant-drupal-8.dev @local.nishant-drupal-8

 

 

 

 

 

 

 

Note: Be careful about source destination

 

 

 

 

 

 

 

Step 8

 

 

 

 

 

 

 

  • How to sync files from dev to local

 

 

 

Drush rsync  

 

 

 

 

 

 

drush rsync @pantheon.nishant-drupal-8.dev:%files @local.nishant-drupal-8 :%files

 

 

 

Note: After syncing files give your files folder 777 permission and clear cache [ sudo chmod 777 -R files/ ].

 

 

 

 

 

 

 

That’s it. The above set-up is easy for fast development and lets your Pantheon site up on local. Furthermore, these easy to do steps will save a lot of your time in setting up the Pantheon environment to local. Hope you can now easily do it. If you have any suggestions or queries please comment down let me try to answer.

 

 

 

 

 

 

 

Publishing companies are constantly transforming, and so is development, we, at Valuebound, are one of those companies who specifically help organizations in their path to Digital Transformation. We enhance digital experience for end users, with tailored web applications.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

An overview of Drupal’s view Execution order

As a Drupal Developer, you must be aware of one of the contributed projects with a most Downloaded number is “Views” What are views? I don’t want to focus more on this, drupal.org gives a broader view of that. 

In Drupal, Views enable you to have a user interface in the browser for creating sections of your website that you would normally have to write an SQL query to retrieve. Views generate a SQL query for you.

You would require view : 

  • If you would like to create the default front page view.
  • You want taxonomy/term view, but probably in some sort of order.
  • You want your posts to be customized
  • You want a block with the 5 most recent posts of a particular type.

Like the above, you have many other requirements, which you have achieved using view and supportable View UI.

In this article, I am not going to discuss things like configuration, fields, filter, contextual and filter. These details have already been explained in a previous introductory article about Drupal 8 views.

In this blog, I am going to share something really interesting, that is pipeline or flow of view before it gets rendered to the browser. This would be really helpful with a programmatic execution of certain tasks to be performed. But it’s really necessary to know when, where and how it works? And we will go through Drupal views hooks.

Basic execution order:

  1. hook_views_pre_view
  2. hook_views_pre_build
  3. hook_views_post_build
  4. hook_views_pre_execute
  5. hook_views_post_execute
  6. hook_views_pre_render
  7. hook_views_post_render

hook_views_pre_view
Allows altering a view at the very beginning of views processing, before other tasks..
Adding output to the view can be accomplished by placing text on $view->attachment_before and $view->attachment_after.

hook_views_pre_view(&$view, &$display_id, &$args)


Parameters

$view: The view object which is about to be processed.

$display_id: The machine name of the active display.

$args: An array of arguments passed to the view.


hook_views_pre_build
This hook is called right before the build process, but after displays are attached and the display performs its pre_execute phase.
We can add output to the view by placing text on $view->attachment_before and $view->attachment_after.

hook_views_pre_build(&$view)

Parameters

$view: The view object about to be processed.


hook_views_post_build
This hook is called right after the build process. The query has been fully built now, but it has not yet been run through db_rewrite_sql.

Adding output to the view can be accomplished by placing text on $view->attachment_before and $view->attachment_after.
 

hook_views_post_build(&$view)

Parameters

$view: The view object about to be processed.


hook_views_pre_execute
This hook is called right before the execution process. The query has now been fully built, but it has not yet been run through db_rewrite_sql.

Adding output to the view can be accomplished by placing text on $view->attachment_before and $view->attachment_after.

hook_views_pre_execute(&$view)
    
Parameters

$view: The view object about to be processed.


Hook_views_post_execute
This hook is called right after the executing process. The query is now executed, but the pre_render() phase has not yet been executed for handlers.

Adding output to the view can be accomplished by placing text on $view->attachment_before and $view->attachment_after. Altering the content can be achieved by editing the items of $view->result.

hook_views_post_execute(&$view)

Parameters
 

$view: The view object about to be processed.


hook_views_pre_render
The Drupal views pre-render is called right before the rendering process. The query has been executed, and the pre_render() phase has already happened for handlers, so all data should be available.

Adding output to the view can be accomplished by placing text on $view->attachment_before and $view->attachment_after. Altering the content can be achieved by editing the items of $view->result.

This hook can be utilized by themes.

hook_views_pre_render(&$view)

Parameters

$view: The view object about to be processed.
 


hook_views_post_render
Post process any rendered data.

This can be valuable to be able to cache a view and still have some level of dynamic output. In an ideal world, the actual output will include HTML comment based tokens, and then the post process can replace those tokens.

hook_views_post_render(&$view, &$output, &$cache)

Parameters

$view: The view object about to be processed.

$output: A flat string with the rendered output of the view.

$cache: The cache settings.


All the above phases have a generic flow that ‘view’ follows. Altering a view query to get your choice of data or the output which is not feasible to get it from existing views configuration could be very easy by understanding these phases.

How to push clean code by using git pre-commit hook

Pushing clean codes is not every one cups of tea, it needs extensive knowledge and practice. Before a website go live, it needs to pass certain standards and checks in order to deliver quality experience. Certainly, a clean website is a demand of almost every client and it should be. 

In this blog post, you will learn why we need to implement git pre-commit hook? how it works? Simultaneously, we will also attempt to implement working examples in order to have better understanding.

Why we need to implement git pre-commit hook

Any website going live should pass certain standards and checks. If the web is built on any framework, then these checks are mandatory. How to ensure all developers are committing clean code? One way is to do code review, but this is manual and we can’t ensure all the issues are caught up. Another way is to set up continuous integrations (CI), where we can do these checks as automated jobs. In both ways, we can catch this up soon before pushing the code by any developer using git pre-commit hook.

Do you know git supports hook? A list of supported hooks and sample code can be found in ‘.git/hooks’ directory. You can read more about each git hooks here. In this article, we will explore about git pre commit hook.

How git pre commit hook script works

Whenever a git commit is performed, git pre commit hook script will be executed where we can do syntax check, presence of any debugging function, check for merge conflict tags and framework coding standard in files that are staged to commit. If any case fails then in the script we have to throw an error that is ‘exit 1’. Otherwise just do ‘exit 0’, which means success.

Example

Here, I have created a git pre commit hook example script specifically for Drupal. You can go through the code here: manoj-apare/pre-commit. First, we have to check these standards only on staged files and avoid deleted files, using command ‘git diff-index --diff-filter=ACMRT --cached --name-only HEAD --’. In rest of the article, I will explain what all checks have been covered for these list of files in the script and how.

Syntax check

For checking Syntax, you can PHP linter for compilation errors that is using command ‘php -l’. To run php linter check, we can filter out only php files ‘git diff-index --diff-filter=ACMRT --cached --name-only HEAD -- | egrep '\.php$|\.inc$|\.module|\.theme$'’.

Check for debugging functions

For checking debugging function, we can use grep tool ‘git diff --cached $FILE | egrep -x "$pattern"’. Where $FILE is filename and $pattern is regular expression pattern for debugging functions for example ‘^\+(.*)?var_dump(.*)?’.

Merge conflict marker check

Merge conflict marker can be checked on all files staged to commit using egrep pattern ‘egrep -in "(<<<<|====|>>>>)+.*(\n)?" $FILE’.

Coding standard check

Using phpcs (PHP codesniffer), we can check for coding standards ‘phpcs --standard=Drupal’. No need to check coding standards for some files format like images and fonts. For this, we can filter out staged files with extensions ‘php,module,inc,install,test,profile,theme,js,css,info,txt’.

See the screenshot below for an example of the coding standard check.
 

Git precommit hook

Finally, using git pre-commit hook we can make sure that we are pushing clean code. I hope this blog will help you out to check coding standards, syntax errors and debugging functions. Moreover, it will also assist you in reducing the number of failing automated tests in CI.

 

How to Create Form Table with pagination in Drupal 8

There are scenarios, where you will have a lot of users. In such an instance , if we display all the users in single page, it will mess with the user experience, to scroll through such a long list. By using Drupal pagination we can display the configured number of users in the single page.

In one of the previous blogs, we learnt how to create a Drupal table form, in this blog we will learn about creating the form table with Drupal pagination. When completed and configured with 10 users, the form can look like the below image.

Table Form with pagination  d8.png

Follow the below steps to create a configured user list with Drupal pagination

Step 1:

Get the data:

The first thing we need to do is to get the data which we will use in our table. This will be entirely dependent on what data it is that you want to show. The table shown above is displaying user info from the database. In this case, by using drupal db_select I’m fetching user detail and creating the array

    As you can see, fetching rows data from the database and putting them in the array format

Step 2:

Build the header The next thing we need to do is put together an associative (keyed) array defining the header of the table. The keys here are important as we will be using them later in this blog. The table we are building here has four cells in the header - one for the checkbox column, one for userid, one for username and another for email. However, we can ignore the cell for the checkbox column, as Drupal will take care of this for us later. As such, we can build our header as follows:

Step 3:

Build the data

Next, we need to build the array that will contain the data of the table. Each element in the array will correspond to one row in the HTML table we are creating. Each element of the array will be given a unique ID. This will be the value of the checkbox when the form is submitted (if selected). In this case, we want to get the UID of the user, so each row will be keyed with the UID of the user. We then, will key the cells of the table with the keys we used for the header.

Step 4:

Form Table

So now we have built a header ($header), and the rows of the table ($options). Create a simple drupal form and bring it all together. Drupal 8 has a nice little theme function that we will use for this, theme_tableselect(). theme_tableselect() takes the data, turns it into a table, adds a checkbox to each row, and adds a 'select all' checkbox to the header. Handy! So let’s look at how to tie this all together:   

That's it. This is a simple table form with the list of user from the database with drupal pagination.

Download the Drupal Guide
Enter your email address to receive the guide.
get in touch