Planet Drupal

Subscribe to Planet Drupal feed
Drupal.org - aggregated feeds in category Planet Drupal
Updated: 24 min 15 sec ago

Drupal Association News: Drupal Association November 22 Board Meeting Update

Tue, 22/11/2016 - 22:49

Today we held the last Board meeting of the year. We met virtually via Zoom and covered two important topics. The first one was a presentation by Angie Byron, who serves on the Technical Advisory Committee. She gave an update on the group’s current tooling study along with next steps, which will include a community blog post where members can provide input on the various tool options being studied.


The second item was sharing our thanks and saying goodbye to two wonderful Board members whose seats expire this month - Danese Cooper and Rob Gill. Danese, who has been on many open source foundation boards, provided great insight and knowledge that helped us navigate as we matured as a community and a Project. And Rob, who worked for NBCUniversal when he first joined the Board, was instrumental in helping The Association understand how to better serve the needs of the end users in our community. We are a better organization because of their generous donation of time and talent.


Please go here if you would like to watch the November 22 Board meeting, read the meeting minutes, or review the Board packet, which also includes our 12 month execution plan dashboard.


We will announce the 2017 Board meeting schedule next month.

Categories: Elsewhere

Acquia Developer Center Blog: Learn Drupal 8 for Free: Introduction to Drupal 8

Tue, 22/11/2016 - 21:32

Now that Drupal 8 is one year old, you may be asking yourself: “What am I waiting for?” In the last year, thousands of Drupal 8 sites have launched, including NBA.com, Nasdaq Corporate Relations, and Jack Daniels. If you haven’t started your own personal, professional Drupal 8 upgrade, here’s a good reason to get going: the availability of excellent free Drupal 8 learning resources.

Tags: acquia drupal planet
Categories: Elsewhere

Acquia Developer Center Blog: Contribution Stories: Bassam Ismail, React front-end for your Drupal 8 back-end

Tue, 22/11/2016 - 20:05

Drupal gets better when companies, organizations, and individuals build or fix something they need and then share it with the rest of us. Our community becomes better, stronger, and smarter when others take it upon themselves to make a positive difference contributing their knowledge, time, and energy to Drupal. Acquia is proud to play a part, alongside thousands of others, in some of the stories making tomorrow’s Drupal better than today’s. One of them Bassam Ismail’s.

Tags: acquia drupal planet
Categories: Elsewhere

Mediacurrent: Happy Thanksgiving! Creating a Culture of Giving in Your Organization

Tue, 22/11/2016 - 19:52

At Drupalcamp Atlanta 2016, my Partner (Paul Chason) and I were humbled to have an opportunity to deliver the keynote address at Kennesaw State University. The topic we discussed was “Creating a Culture of Giving in Your Organization.” As we started to conduct research, there were four key questions we wanted to address:

Categories: Elsewhere

Pantheon Blog: How Pantheon Tests Drupal 8 Updates

Tue, 22/11/2016 - 19:17
Automated testing is an important part of any active project workflow. When a new version of Drupal 8 comes out, we want to smoke test it on the platform to ensure that everything is working well before we expose it to our customers. We have confidence that Drupal itself is going to work well; we confirm this by running the unit tests that Drupal provides. Most importantly, we also need to ensure that nothing has changed to affect any of the integration points between Drupal and the Pantheon platform.
Categories: Elsewhere

Chromatic: Drupal Code Standards: Object Oriented Coding & Drupal 8

Tue, 22/11/2016 - 17:06

This is the sixth post in a series about coding standards. In this post we’ll talk about how to adhere to standards when writing object-oriented code in Drupal.

Categories: Elsewhere

InternetDevels: The Gridstack field Drupal module by InternetDevels developers

Tue, 22/11/2016 - 16:18

Last time we offered you to learn how to create a Bootstrap subtheme in Drupal 8 from our developer’s blog post, and today is the day for the double profit. There is a useful Drupal module created by the InternetDevels developers who are working at JYSK global shop chain project. And, to tell you more about it, one of the module’s creators wrote this blog post explaining the module’s aim and work. Let’s now give her the floor.

Read more
Categories: Elsewhere

ComputerMinds.co.uk: Drupal with Composer on Apache on Bash on Windows 10!

Tue, 22/11/2016 - 14:00

I've recently been playing around on Windows 10's new Bash on Ubuntu feature, which provides a native bash linux shell for Windows. I thought I'd try and get a Drupal 8 site running, via composer, served from Apache, without any need for a virtual machine in Windows. Kristian Polso wrote a great tutorial that got me most of the way there, but I wanted to share some extra discoveries and thoughts about the experience.

Categories: Elsewhere

Evolving Web: Planning Your Drupal 8 Theme: Choosing a Base Theme

Tue, 22/11/2016 - 13:18

Whenever we start a new Drupal project, we have to choose what kind of theme we're going to create. Are we going to use a framework like Bootstrap or Zurb Foundation? If so, do we start with a contrib base theme or do we implement the framework ourselves? Are we going to use a classic Drupal base theme like Zen or AdaptiveTheme? Or are we going to build the theme 'from scratch' starting with Drupal core or a core base theme? 

read more
Categories: Elsewhere

Appnovation Technologies: Appnovation and Wunderkraut: Advancing through Acquisition

Tue, 22/11/2016 - 09:00

When it comes to the Drupal community, it’s all about contributions and the communal effort to champion open source technologies.

Categories: Elsewhere

Unimity Solutions Drupal Blog: Drupal 8 Composer Workflow

Tue, 22/11/2016 - 06:05
Drupal 8 Composer Workflow

Composer is a tool for dependency management in PHP. It manages Install and update libraries that project manages. This session elaborate about how composer is used in Drupal 8. In Drupal Composer is inspired from node's npm and ruby's bundler. Composer manage packages/libraries per project on particular directory (by Default directory Vendor), so it has more features then Package managers.

In this session, I will take you through:

Introduction to Composer

Drupal before Composer

Installation of Composer

The actual working of Composer in Drupal 8

Real time challenges faced during Drupal 8 development

    Intended Audience

    Drupal developer with minimal knowledge of Drupal 8

    Familiar with managing external libraries and packages

     

    Session is scheduled on 24 November - 7:00 P.M. 

    Registration closes by 23 November - 8:00 P.M. 

      Categories: Elsewhere

      2bits: Diagnosing Slow Drupal Operations Using Linux strace

      Tue, 22/11/2016 - 00:05

      The other day, we were helping a long time client with setting up a new development server configured with Ubuntu Server LTS 16.04, which comes with PHP 7.x. Benchmarks of PHP 7.x show that it is faster than any PHP 5.x version by a measurable margin, hence the client's attempt to move to the newer version of Ubuntu and PHP.

      But when we tried benchmarking the new server against the existing server, which has Ubuntu Server LTS 14.04, showed that the new server is extremely slow compared to the existing one.

      We set up investigating where the slow down is coming from, and running a quick version of our Drupal Performance Assessment, which is one of our many Drupal services.

      We started by checking out the logs, which on this site is set to syslog, so as not to bog down the database.

      We saw the following messages:

      Nov 19 16:36:31 localhost drupal: http://dev5.example.com|1478727391|Apache Solr|1.1.1.1|http://dev5.example.com/some-page||0||HTTP Status: 0; Message: Request failed: Connection timed out. TCP Connect Timeout.; Response: ; Request: GET /solr/wso/select?start=0&rows=8&fq=bundle%3A%28blog%20OR%20faq%20OR%20...&wt=json&json.nl=map HTTP/1.0#015#012User-Agent: Drupal (+http://drupal.org/)#015#012Connection: close#015#012Host: solr2.example.com:8983#015#012#015#012; Caller: module_invoke() (line 926 of /.../www/includes/module.inc)

      Nov 19 16:36:31 localhost drupal: http://dev5.example.com|1478727391|Apache Solr|1.1.1.1|http://dev5.example.com/some-page||0||HTTP 0; Request failed: Connection timed out. TCP Connect Timeout.

      As you can see, the server is timing out trying to connect to the Apache Solr service. The existing server does not have this message.

      But is this just an error, or something that impacts performance?

      There are a variety of tools that can help profile PHP's page load, and see where time is being spend. The most popular tool is xhprof, but setting it up is time consuming, and we needed simpler tools.

      So, we settled on a well tried and tested Linux tool, strace. This tool allows one to see what system calls a process is issuing, and measure the time each takes.

      Over the years we have used strace, with tried and tested options to give us what we need quickly, without having to install extensions in PHP, and the like.

      The command line we use discovers the process IDs of PHP on its own, and then traces all of them:

      Caution: NEVER USE THIS ON A LIVE SERVER! You will slow it down considerably, both the CPU and disk access!

      strace -f -tt -s 1024 -o /tmp/trace -p `pidof 'php-fpm: pool www' |
      sed -e 's/ /,/g'`

      Let us explain the options for a bit:

      • -f means follow children. This means that if a process forks and creates a new process, the new process will be traces as well.
      • -tt outputs a time stamp accurate to microsecond time. This is extremely useful for knowing where time is spent.
      • -s means that for most system calls, such as read, a longer output is displayed.
      • -o gives the file name to output the trace to.
      • -p is a list of process IDs to trace. In this case, we use some shell magic to get the process IDs of the PHP daemon (since we are running PHP-FPM), and then replace the spaces with commas. That way, we don't have to find out the process IDs manually then enter them on the command line. A great time saver!

      We run this trace and issue a single request, so the output is not huge. We terminal the strace process by the usual Ctrl-C.

      We inspect the output and we find this:

      9359 17:02:37.104412 connect(6, {sa_family=AF_INET, sin_port=htons(11211), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 EINPROGRESS (Operation now in progress)

      From the port number, we know this is a connection to the memcached daemon, which is running on the same server. No issues there.

      Then we see this:

      9359 17:02:37.176523 connect(7, {sa_family=AF_LOCAL, sun_path="/var/run/mysqld/mysqld.sock"}, 29) = 0

      That is the connection to MySQL's socket. No issues either.

      Now, we see this (IP address obfuscated):

      9359 17:02:38.178758 connect(9, {sa_family=AF_INET, sin_port=htons(8983), sin_addr=inet_addr("1.1.1.1")}, 16) = -1 EINPROGRESS (Operation now in progress)

      From the port number, we know that this is Apache Solr.

      Then we find the following, repeating more than a hundred times:

      9359 17:02:38.179042 select(10, [9], [9], [], {1, 25000}) = 0 (Timeout)
      9359 17:02:39.205272 nanosleep({0, 5000000}, NULL) = 0
      9359 17:02:39.210606 select(10, [9], [9], [], {0, 25000}) = 0 (Timeout)
      9359 17:02:39.235936 nanosleep({0, 5000000}, NULL) = 0
      9359 17:02:39.241262 select(10, [9], [9], [], {0, 25000}) = 0 (Timeout)
      9359 17:02:39.266552 nanosleep({0, 5000000}, NULL) = 0

      Until we see this:

      9359 17:02:43.134691 select(10, [9], [9], [], {0, 25000}) = 0 (Timeout)
      9359 17:02:43.160097 nanosleep({0, 5000000}, NULL) = 0
      9359 17:02:43.165415 select(10, [9], [9], [], {0, 25000}) = 0 (Timeout)
      9359 17:02:43.190683 nanosleep({0, 5000000}, NULL) = 0

      Did you catch that, or did you miss it? Look closely at the time stamps!

      The PHP process spend a full 5 seconds trying to contact the Apache Solr server, but timing out!

      No wonder page loading is so slow then.

      In this case, there was a block of 'related content' populated from an Apache Solr query. This block was not cached, and for every logged in user, the PHP process waits for the Apache Solr server round trip time, plus query execution time. But worse is if the server times out, because of network issues.

      Tags: Contents: 
      Categories: Elsewhere

      2bits: Diagnosing Slow Drupal Operations Using Linux strace

      Tue, 22/11/2016 - 00:05

      The other day, we were helping a long time client with setting up a new development server configured with Ubuntu Server LTS 16.04, which comes with PHP 7.x. Benchmarks of PHP 7.x show that it is faster than any PHP 5.x version by a measurable margin, hence the client's attempt to move to the newer version of Ubuntu and PHP.

      But when we tried benchmarking the new server against the existing server, which has Ubuntu Server LTS 14.04, showed that the new server is extremely slow compared to the existing one.

      We set up investigating where the slow down is coming from, and running a quick version of our Drupal Performance Assessment, which is one of our many Drupal services.

      We started by checking out the logs, which on this site is set to syslog, so as not to bog down the database.

      We saw the following messages:

      Nov 19 16:36:31 localhost drupal: http://dev5.example.com|1478727391|Apache Solr|1.1.1.1|http://dev5.example.com/some-page||0||HTTP Status: 0; Message: Request failed: Connection timed out. TCP Connect Timeout.; Response: ; Request: GET /solr/wso/select?start=0&rows=8&fq=bundle%3A%28blog%20OR%20faq%20OR%20...&wt=json&json.nl=map HTTP/1.0#015#012User-Agent: Drupal (+http://drupal.org/)#015#012Connection: close#015#012Host: solr2.example.com:8983#015#012#015#012; Caller: module_invoke() (line 926 of /.../www/includes/module.inc)

      Nov 19 16:36:31 localhost drupal: http://dev5.example.com|1478727391|Apache Solr|1.1.1.1|http://dev5.example.com/some-page||0||HTTP 0; Request failed: Connection timed out. TCP Connect Timeout.

      As you can see, the server is timing out trying to connect to the Apache Solr service. The existing server does not have this message.

      But is this just an error, or something that impacts performance?

      There are a variety of tools that can help profile PHP's page load, and see where time is being spend. The most popular tool is xhprof, but setting it up is time consuming, and we needed simpler tools.

      So, we settled on a well tried and tested Linux tool, strace. This tool allows one to see what system calls a process is issuing, and measure the time each takes.

      Over the years we have used strace, with tried and tested options to give us what we need quickly, without having to install extensions in PHP, and the like.

      The command line we use discovers the process IDs of PHP on its own, and then traces all of them:

      Caution: NEVER USE THIS ON A LIVE SERVER! You will slow it down considerably, both the CPU and disk access!

      strace -f -tt -s 1024 -o /tmp/trace -p `pidof 'php-fpm: pool www' |
      sed -e 's/ /,/g'`

      Let us explain the options for a bit:

      • -f means follow children. This means that if a process forks and creates a new process, the new process will be traces as well.
      • -tt outputs a time stamp accurate to microsecond time. This is extremely useful for knowing where time is spent.
      • -s means that for most system calls, such as read, a longer output is displayed.
      • -o gives the file name to output the trace to.
      • -p is a list of process IDs to trace. In this case, we use some shell magic to get the process IDs of the PHP daemon (since we are running PHP-FPM), and then replace the spaces with commas. That way, we don't have to find out the process IDs manually then enter them on the command line. A great time saver!

      We run this trace and issue a single request, so the output is not huge. We terminal the strace process by the usual Ctrl-C.

      We inspect the output and we find this:

      9359 17:02:37.104412 connect(6, {sa_family=AF_INET, sin_port=htons(11211), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 EINPROGRESS (Operation now in progress)

      From the port number, we know this is a connection to the memcached daemon, which is running on the same server. No issues there.

      Then we see this:

      9359 17:02:37.176523 connect(7, {sa_family=AF_LOCAL, sun_path="/var/run/mysqld/mysqld.sock"}, 29) = 0

      That is the connection to MySQL's socket. No issues either.

      Now, we see this (IP address obfuscated):

      9359 17:02:38.178758 connect(9, {sa_family=AF_INET, sin_port=htons(8983), sin_addr=inet_addr("1.1.1.1")}, 16) = -1 EINPROGRESS (Operation now in progress)

      From the port number, we know that this is Apache Solr.

      Then we find the following, repeating more than a hundred times:

      9359 17:02:38.179042 select(10, [9], [9], [], {1, 25000}) = 0 (Timeout)
      9359 17:02:39.205272 nanosleep({0, 5000000}, NULL) = 0
      9359 17:02:39.210606 select(10, [9], [9], [], {0, 25000}) = 0 (Timeout)
      9359 17:02:39.235936 nanosleep({0, 5000000}, NULL) = 0
      9359 17:02:39.241262 select(10, [9], [9], [], {0, 25000}) = 0 (Timeout)
      9359 17:02:39.266552 nanosleep({0, 5000000}, NULL) = 0

      Until we see this:

      9359 17:02:43.134691 select(10, [9], [9], [], {0, 25000}) = 0 (Timeout)
      9359 17:02:43.160097 nanosleep({0, 5000000}, NULL) = 0
      9359 17:02:43.165415 select(10, [9], [9], [], {0, 25000}) = 0 (Timeout)
      9359 17:02:43.190683 nanosleep({0, 5000000}, NULL) = 0

      Did you catch that, or did you miss it? Look closely at the time stamps!

      The PHP process spend a full 5 seconds trying to contact the Apache Solr server, but timing out!

      No wonder page loading is so slow then.

      In this case, there was a block of 'related content' populated from an Apache Solr query. This block was not cached, and for every logged in user, the PHP process waits for the Apache Solr server round trip time, plus query execution time. But worse is if the server times out, because of network issues.

      Tags: Contents: 
      Categories: Elsewhere

      Drupal Modules: The One Percent: Drupal Modules: The One Percent -- CustomError (video tutorial)

      Mon, 21/11/2016 - 18:50
      Drupal Modules: The One Percent -- CustomError (video tutorial) NonProfit Mon, 11/21/2016 - 11:50 3

      Here is where we look at Drupal modules running on less than 1% of reporting sites. Today we'll review CustomError, a module which improves customization of 403 and 404 error pages.

      Categories: Elsewhere

      TimOnWeb.com: Creating content blocks programmatically in Drupal 8

      Mon, 21/11/2016 - 18:06

      Let's picture this: you've created a custom content block type (let's say, Ad block) in your shiny new Drupal 8 installation and you want to automaticaly create a fresh new block of that type each time you create a taxonomy term (Ad group), so that every ad group has a ...

      Read now

      Categories: Elsewhere

      Palantir: Palantir.net's Guide to Digital Governance: Design

      Mon, 21/11/2016 - 17:33
      Palantir.net's Guide to Digital Governance: Design Palantir.net's Guide to Digital Governance brandt Mon, 11/21/2016 - 10:33 Scott DiPerna Nov 21, 2016

      This is the ninth installment of Palantir.net’s Guide to Digital Governance, a comprehensive guide intended to help get you started when developing a governance plan for your institution’s digital communications.

      In this post we will cover...
      • Questions to consider regarding your existing design standards
      • Some items to think about when designing a totally new site
      • Questions to consider when redesigning an existing site

      We want to make your project a success.

      Let's Chat.

      Website design is handled differently by just about every organization I have encountered, but whether you are writing governance for one site with one design or several sites with varying designs and various owners, you will want to document policies and procedures for how sites are designed and redesigned.

      For the purposes of this article, I am going to assume we are writing guidelines for a governance plan that must consider multiple sites and site owners. Here follow some questions to consider for writing your guidelines.

      General Guidelines for All Websites
      • Does your organization have an established visual identity or branding guidelines that will dictate the design of a website?
      • Who oversees the adherence to visual guidelines?
      • What is the process for having a website design evaluated for adherence to the visual identity or branding? Is there an approval process?
      • Are sub-sites within your main website permitted to have their own design, or must they use the same templates designed for the main site?
      • What is the process for having a sub-site design evaluated for adherence to the visual identity or branding? Is there an approval process?
      Designing New Websites
      • Who is responsible for designing new websites? Who is approved or permitted to do this work?
      • What is the process for requesting a design for a new site?
      • Are there limited design options?
      • Are external freelance designers, consultants, and/or design firms permitted to be hired to create a new graphic design for a website?
      • Are external freelance designers, consultants, and/or design firms also permitted to produce the templates, themes, or HTML files which constitute the actual execution of the graphic design for the web?
      • If external freelance designers, consultants, and/or design firms are permitted to translate the graphic design into files for the web, what formats, languages, protocols, frameworks, and content management applications are permitted in your web environment?
      • Are there specific guidelines that external freelance designers, consultants, and/or design firms must be given before starting work?
      • Are there dimensional guidelines for the size of the site, such as a maximum or minimum width (or height), or guidelines for breakpoints in responsive designs?
      • Are there image-size limits for the purposes of fast page-loading?
      • Are there accessibility standards the designs must follow? Must they be tested for accessibility compliance?
      • Are there existing style sheets (CSS) that should be used or incorporated?
      • Are there specific colors or color palettes that must be used? Or not used?
      • Are there specific fonts or font families that must be used? Or not used?
      Redesigning Existing Websites

      In addition to the questions for new websites, you should also consider the following for redesigning sites.

      • When may a website owner request a redesign of their site?
      • Is there a special process for redesigning a site?
      • Are there any costs associated with a site redesign?
      • May a website owner, or their assignees, make design adjustments to their website between official redesigns, if they have the ability and access to do so?

       

      This post is part of a larger series of posts, which make up a Guide to Digital Governance Planning. The sections follow a specific order intended to help you start at a high-level of thinking and then focus on greater and greater levels of detail. The sections of the guide are as follows:

      1. Starting at the 10,000ft View – Define the digital ecosystem your governance planning will encompass.
      2. Properties and Platforms – Define all the sites, applications and tools that live in your digital ecosystem.
      3. Ownership – Consider who ultimately owns and is responsible for each site, application and tool.
      4. Intended Use – Establish the fundamental purpose for the use of each site, application and tool.
      5. Roles and Permissions – Define who should be able to do what in each system.
      6. Content – Understand how ownership and permissions should apply to content.
      7. Organization – Establish how the content in your digital properties should be organized and structured.
      8. URL Naming Conventions – Define how URL patterns should be structured in your websites.
      9. Design – Determine who owns and is responsible for the many aspects design plays in digital communications and properties.
      10. Personal Websites – Consider the relationship your organization should have with personal websites of members of your organization.
      11. Private Websites, Intranets and Portals – Determine the policies that should govern site which are not available to the public.
      12. Web-Based Applications – Consider use and ownership of web-based tools and applications.
      13. E-Commerce – Determine the role of e-commerce in your website.
      14. Broadcast Email – Establish guidelines for the use of broadcast email to constituents and customers.
      15. Social Media – Set standards for the establishment and use of social media tools within the organization.
      16. Digital Communications Governance – Keep the guidelines you create updated and relevant.

      Stay connected with the latest news on web strategy, design, and development.

      Sign up for our newsletter.
      Categories: Elsewhere

      Amazee Labs: The Search Experience for the Harte Research Institute

      Mon, 21/11/2016 - 16:35
      The Search Experience for the Harte Research Institute

      We recently launched a new site for the Harte Research Institute for Gulf of Mexico Studies (hereinafter HRI). You can find out more about HRI and its launch in a previous blog post. Search was an integral part of the site design and we were able to accomplish all our goals with Drupal 8 and Search API.

      Brandon Williams Mon, 11/21/2016 - 16:35 The Goal

      Most of the main pages share the same pattern: A collection of content, usually a grid, searchable by the user. A good example of that pattern is the Our Work page, where the user can search by the type of research, the type of project, and a fulltext search. We’ll call these directory pages.

      We also wanted the user to search everything, so we provide a site search page as well. This allows users to do fulltext search over all content and optionally filter by content type.

      The Plan™

      First, we created a Search API Server with an Apache Solr backend by installing and configuring the Solr Search module. This was very easy since amazee.io includes Solr and it’s correct Drupal configuration as part of the local development environment and hosting stack.

      Next we created a new Search API index for each directory page. The important step here is to add the fields that will be used for the dropdown filters and each field that you want to be fulltext searchable. We also created an index for the site search, and added almost all the fields for each content type. This works fine, but next time we may consider using the “General > Rendered HTML output” field to avoid adding everything one at a time.

      The next step is to create the pages that will show our search results. We use Page Manager for layout and Views to return search results. Views gives us the flexibility to configure filters, sorting, pagination, AJAX, returning rendered entities, etc., but also has the power of Search API and Solr behind it. When creating the view, just pick the index you want to return results from and the rest should be familiar. Our setup is fairly straightforward. Here’s the configuration of the Our Work directory view. You’ll notice this is where we’ve added the fulltext filter.

      We also want the user to search by taxonomy terms and content type. In the first screenshot those are shown as dropdowns. You can do this with Views exposed filters but we are using the Facets module. This is to prevent showing the user search options that may not return content. After installing the module, each index becomes a facet source which can have one or more facets. It’s a simple process to add a facet by selecting the source, the field, and a name. Set the widget to be dropdown and check the setting “Make sure only one result can be shown” and you’re good to go. Head back to page manager, add your new facets as blocks and rejoice! You can also optionally improve the experience by using a fancy dropdown javascript library, like Chosen.

      The last thing needed to complete the page is to tell the user about their current search query. We tell them what facets they’ve selected, as well as the fulltext search query. This shows up only after the user has searched for something.

      For this we’re using a custom module which lets us add a new block for each facet that prints out the current facet selection. It also provides a block that prints the current fulltext search query, and a block that provides a search reset link. There is an active issue in the Facets module to provide this built-in, please have a look and help with testing: Introducing the current search/summary block.

      We needed the ability to exclude certain pages (like custom 404/503 pages) from the search index. You can configure Search API to exclude whole content types from the index, but how do you exclude a few nodes from the index? As is Drupal tradition, there’s a module for that! The Search API Exclude Entity module lets you add an exclude field to any entity bundle so you can make sure certain entities don’t get indexed.

      The Issues

      Did everything work perfectly? Unfortunately, no, but we were able to work around them or work with the wonderful Search API and Facets folks to get them fixed. One minor issue is finding the right versions of Search API, Solr Search, and Facets that all play nice together. This took a little trial and error, but we found that generally a non-dev release of Search API and a dev release of Facets work. Checking the issue queue was also helpful to pick what works together.

      When you combine a views exposed filter and facets, the former will remove any facet filters the user had selected. So if a user first picks a content type, then does a fulltext search for “Oil spill,” the final results will include all content types because that facet was removed. Doing the search in the other direction works properly. There is an open issue to “allow exposed form to preserver URL query parameters,” but we used the following JavaScript to fix it instead.

      The Contributions

      The major linchpin in our plan is the combination of Search API, Facets, Views and Page Manager. When we started this project, everything worked well on their own, but there was no way to combine them all in one page. Our friend Alex Tkachev from the Zürich team was able to add views block display support to Facets which is included in the latest release.

      Another important design feature was using <select> elements in the search form, including the ability to auto-submit when the user selects a new option. At the time Facets only supported lists of links for the display widget, but now there are many options including checkboxes and dropdown. This was accomplished as part of the Widget dropdown - select issue.

      We ran into a small problem with multiple indexes and fields with matching machine names. We found content from one index was being included in the results from another index. In order to fix it we had to directly edit our config files to make index field machine names globally unique and re-import. This was much easier to do using configuration management than it would have been in Drupal 7, but it was still difficult enough that we decided to help fix the “Make field names and IDs editable” issue. As long as you’re using 8.x-1.0-beta1 or later, you can easily avoid this problem.

      The Conclusion

      Overall we’re pleased with the status of the Search API and similar modules. We’re not using any hacked or patched versions thanks to the responsiveness of the maintainers and Drupal community. We were able to build everything we designed and delivered a fully functional search system. Our client is happy with the end product and we’re excited to build with the latest Drupal technologies.

      Categories: Elsewhere

      Annertech: UX Ireland Conference Takeaways

      Mon, 21/11/2016 - 11:50
      UX Ireland Conference Takeaways

      UX Ireland conference took place at the Trinity Biomedical Sciences Institute, a very modern facility beside the classic grounds of Trinity College. The conference featured a great line-up of keynoters and speakers such as Jon Kolko (author of acclaimed books including “Well-Designed” or “Exposing the Magic of Design”) and Brenda Laurel.

      As usual with a conference of this nature, Annertech attended in force, with about 50% of our frontend/design team attending one or both days. I got a lot of takeaways from the talks and workshops: here's a synopsis of them:

      Categories: Elsewhere

      Justin Winter: Quick Look Essentials

      Mon, 21/11/2016 - 01:00
      One of those things I missed the most when I had to switch back to a Windows machine at work was access to anything similar to Quick Look on OS X.
      Categories: Elsewhere

      Acquia Developer Center Blog: Rebroadcast: Happy birthday Dries and Drupal 8!

      Sat, 19/11/2016 - 17:42

      Rebroadcast: Drupal launch interviews, one year on. Part 3 of 3 - Spend 18 minutes with Dries Buytaert and Jeffrey A. "jam" McGuire behind the scenes in Antwerp as we drive back to the dorm room where Drupal was invented and Dries seeing it for the first time in 15 years.

      Video - 18 min.

      Drupal 8 Release & Happy Birthday, Dries Mega Episode

      Don't miss the first two parts and the other material released in November 2015 to celebrate the release of Drupal 8.0.0:

      1. Part 1 - interview
      2. Part 2 - interview
      3. Part 3: Behind the scenes with Dries visiting the dorm room where he invented Drupal!
      4. Congratulating Drupalists around the world - Acquia video with Dries
      5. Celebr8Drupal8 community video
      Podcast series: Drupal 8Skill Level: BeginnerIntermediateAdvanced
      Categories: Elsewhere

      Pages