Planet Drupal

Syndicate content - aggregated feeds in category Planet Drupal
Updated: 13 min 15 sec ago

LevelTen Interactive: Drupal Con[densed] 2106: The Best Content Marketing Sessions

Wed, 05/18/2016 - 16:20
img typeof=foaf:Image src= width=600 height=300 alt=Drupal Con[densed] 2106: The Best Content Marketing Sessions / pAs a marketer, a Drupal newbie, and the newest LevelTen employee, I was super excited for DrupalCon./p pHistorically, there has not been a lot of overlap between the Drupal world and the marketing world. One one level that makes some sense: companies who need a Drupal web solution are often large enterprise-level organizations who have the resources for an in-house marketing team./p pBut it’s clear after my week at DrupalCon 2016 that more and more agencies and web developers are recognizing that they need to offer some kind of content or content strategy services to their...a href=/blog/jj-lonsdale/drupal-condensed-2106-best-content-marketing-sessions class=more-linkRead more/a/p

Jeff Geerling's Blog: Adding a role to a user programmatically in Drupal 8

Wed, 05/18/2016 - 16:18
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedpSince a quick Google search didn't bring up how to do this in Drupal 8 (there are dozens of posts on how to do it in Drupal 7), I thought I'd post a quick blog post on how you can modify a user's roles in Drupal 8. Hint: It's a lot easier than you'd think!/p pIn Drupal 7, code$user/code was an object... but it was more like an object that acted like a dumb storage container. You couldn't really do anything with it directly—instead, you had to stick it in functions (like codeuser_multiple_role_edit()/code) to do things like add or remove roles or modify account information./p pIn Drupal 8, code$user/code is a real, useful object. Want to modify the account name and save the change?/p/div/div/div

OSTraining: Track Google Analytics Clicks and Downloads in Drupal

Wed, 05/18/2016 - 15:58
div class=ost-intro-imageimg src= alt=Track Google Analytics Clicks and Downloads in Drupal width=200 height=134 //div pOver the last week, several people have asked us about tracking Google Analytics events on their Drupal site./p pEvents describe anything from clicking on an external link to leave your site or downloading a file./p pWe're going to use the Google Analytics module which is available for Drupal 6, 7 and 8./p

Pixelite: 10 things I learnt building in Drupal 8

Wed, 05/18/2016 - 14:00
h2 id=introductionIntroduction/h2 pI have had the chance to be involved with 2 fresh builds with Drupal 8 now, I thought I would describe some of the neat things I have found during this time and some of my lessons learned. My hope is that blog post will help you in your journey with Drupal 8./p h2 id=drupal-console-is-awesome1. Drupal Console is awesome/h2 pEvery time you need to generate a custom module, or a new block in a custom module, you can quickly and easily use a href= Console/a to produce the code scaffolding code for you. This quite easily makes the job of a developer a lot less stressful, and allows you to focus on actually writing code that delivers functionality./p pI plucked these example commands that I use frequently from my bash history:/p figure class=highlightprecode class=language-bash data-lang=bashdrupal site:mode dev drupal generate:module drupal generate:plugin:block drupal generate:routesubscriber drupal generate:form:config/code/pre/figure pDocumentation is a href= but for the most part, the commands are self documenting, if you use the code--help/code option, then you get a great summary on the command, and the other options you can pass in./p pThe other nice thing is that this is a a href= Console/a application, so it should feel very familiar to you if you used another tool written in the same framework./p h2 id=custom-block-types-are-amazing2. Custom block types are amazing/h2 pIn Drupal 7 land there was a href= which was an attempt to stop making ‘meta’ nodes to fill in content editable parts of complex landing pages. Now, fast forward to Drupal 8, and custom block types are now in Drupal Core./p pThis basically means as a site builder you now have another really powerful tool at your disposal in order to model content effectively in Drupal 8./p pEach custom block type can have it’s own fields, it’s own display settings, and form displays./p pHere are the final custom block types on a recent Drupal 8 build:/p pimg src=/img/d8/blocktypes.png alt=Custom block types in Drupal 8 class=img-responsive img-thumbnail //p pOne downside is that there is no access control per custom block type (just a global permission “administer blocks”), no doubt contrib will step in to fill this hole in the future (does anyone know a module that can help here?). In the mean time there is a href= issue/a on the subject./p pI also found it weird that the custom blocks administration section was not directly under the ‘structure’ section of the site, there is another a href= issue/a about normalising this as well. Setting up some default shortcuts really helped me save some time./p pimg src=/img/d8/shortcuts.png alt=Shortcuts are handy in Drupal 8 to remember where the custom block section is class=img-responsive img-thumbnail //p h2 id=view-modes-on-all-the-things3. View modes on all the things/h2 pTo create custom view modes in Drupal 7 required either a custom module or Dave Reid’s a href= contrib module. Now this is baked into Drupal 8 core./p pView modes on your custom block types takes things to yet another level still as well. This is one more feather in the Drupal site builder’s cap./p h2 id=twig-is-the-best4. Twig is the best/h2 pIn Drupal 7 I always found it weird that you could not unleash a front end developer upon your site and expect to have a pleasant result. In order to be successful the themer would need to know PHP, preprocess hooks, template naming standards, the mystical specific order in which the templates apply and so on. This often meant that a backend and front end developer would need to work together in order to create a good outcome./p pWith the introduction of Twig, I now feel that theming is back in the hands of the front end developer, and knowledge of PHP is no longer needed in order to override just about any markup that Drupal 8 produces./p pstrongPro tip/strong - use the Drupal Console command codedrupal site:mode dev/code to enable Twig development options, and disable Drupal caching. Another positive side effect is that Twig will then render the entire list of templates that you could be using, and which one you actually are using (and where that template is located)./p pimg src=/img/d8/twigdevel.png alt=Twig developer comments in HTML are the best class=img-responsive img-thumbnail //p pstrongPro tip:/strong - If you want to use a template per custom block type (to which I did), then you can use this PHP snippet in your theme’s code.theme/code file (taken from a href= figure class=highlightprecode class=language-php data-lang=phpspan class=cplt;?php/span span class=sd/**/span span class=sd * Implements hook_theme_suggestions_HOOK_alter() for form templates./span span class=sd */span span class=sd * @param array $suggestions/span span class=sd * @param array $variables/span span class=sd *//span span class=kfunction/span span class=nfTHEMENAME_theme_suggestions_block_alter/spanspan class=p(/spanspan class=karray/span span class=oamp;/spanspan class=nv$suggestions/spanspan class=p,/span span class=karray/span span class=nv$variables/spanspan class=p)/span span class=p{/span span class=kif/span span class=p(/spanspan class=nbisset/spanspan class=p(/spanspan class=nv$variables/spanspan class=p[/spanspan class=s1#39;elements#39;/spanspan class=p][/spanspan class=s1#39;content#39;/spanspan class=p][/spanspan class=s1#39;#block_content#39;/spanspan class=p]))/span span class=p{/span span class=nbarray_splice/spanspan class=p(/spanspan class=nv$suggestions/spanspan class=p,/span span class=mi1/spanspan class=p,/span span class=mi0/spanspan class=p,/span span class=s1#39;block__bundle__#39;/span span class=o./span span class=nv$variables/spanspan class=p[/spanspan class=s1#39;elements#39;/spanspan class=p][/spanspan class=s1#39;content#39;/spanspan class=p][/spanspan class=s1#39;#block_content#39;/spanspan class=p]/spanspan class=o-gt;/spanspan class=nabundle/spanspan class=p());/span span class=p}/span span class=p}/span/code/pre/figure h2 id=panelizer--panels-ipe-is-a-formidable-site-building-tool5. Panelizer + panels IPE is a formidable site building tool/h2 pWhen looking for a layout manager to help build the more complex landing pages, I came across a href= + a href= IPE/a. Using panelizer you are able to:/p ul licreate per node layout variants/li liapply a single layout to all nodes of a particular bundle (e.g. all your news articles have the same layout)/li /ul pThe other neat thing is that the layouts themselves are now standardised between all the various layout managers using a contrib module called a href= Also they are just YAML and Twig. Simple. There is even an effort to get this a href= into Drupal 8.2/a which I think would be a great idea./p pstrongDownside/strong - all JS is still rendered on the page even though the user (e.g. anonymous users) have no access to panelizer. There is a patch on a href= to help fix this./p pSince starting this build there has also been a stable release of a href= suite/a come out for Drupal 8 as well giving you even more options./p h2 id=you-can-build-a-rather-complex-site-with-very-little-contributed-modules6. You can build a rather complex site with very little contributed modules/h2 pFor this most recent site I build I got away with using only 10 contributed modules (one of which - a href= was purely for debugging purposes)./p ul lictools/li ligoogle_analytics/li limetatag/li lipanels/li litoken/li licontact_block/li lidevel/li lilayout_plugin/li lipanelizer/li lipathauto/li /ul pThis means you are inherently building a more stable and supportable site, as most of the functionality now comes out of Drupal core./p h2 id=the-contact-module-now-is-supercharged7. The contact module now is supercharged/h2 pIn Drupal 7, the contact module was one of those modules to which I never turned on, as it was rather inflexible. You could not change the fields in a UI, nor add email recipients, or have more than 1 form. Now in Drupal 8 you can have as many “contact” forms as you want, each one is fieldable, and can send emails to as many people as needed./p pYou can also enhance the core module with:/p ul lia href= - allows you to place the contact form in a block/li lia href= - allows you to store the submissions in the database, rather than firing an email and forgetting about it/li /ul pThere is still a place for webform, namely:/p ul lilarge complex form with lots of fields/li limulti-step forms/li liforms you want to ‘save draft’/li /ul pYou can read more about this in the a href= training blog post/a on the contact module./p pstrongDownside/strong - I wanted to have a plain page use the path code/contact/code but the contact module registers this path, so pathauto gave my contact page a path of code/contact-0/code. Luckily creating a a href= subscriber/a with Drupal Console was painless, so altering the contact module route was very simple to do. I can paste the code here if needed, but most of it is the code that Drupal Console generates for you./p h2 id=phpunit-is-bundled-into-core8. PHPunit is bundled into core/h2 pNow that Drupal 8 is largely Object Oriented (OO), you are able to test classes using PHPunit. I have a href=/article/writing-phpunit-tests-for-your-custom-modules-in-drupal-8/wrote about phpunit/a in the past if you want to know more./p h2 id=views-is-in-core9. Views is in core/h2 pThis was the main reason why adoption of Drupal 7 was so slow after it’s initial 7.0 release, as everyone needed views to be stable before jumping ship. Now with views bundled into core, views plugins are also being ported at a great rate of knots too./p h2 id=ckeditor-is-in-core10. CKEditor is in core/h2 pI often found that this was one library that never (or hardly ever) got updated on sites that had been around for a while. More worryingly, CKEditor (the library) would from time to time fix security related issues. Now that this comes with Drupal 8 core, it is just one less thing to worry about./p pAlso I would love to shout out to a href= Leers/a (and other contributors) for a href= the image dialog/a with alignment and caption options. I cannot tell you how much pain and suffering this caused me in Drupal 7./p pimg src=/img/d8/image.png alt=The image dialog bundled with Drupal 8 in CKeditor is amazing class=img-responsive img-thumbnail //p h2 id=commentsComments/h2 pIf you have built a site recently in Drupal 8 and have found anything interesting or exciting, please let me know in the comments. Also keen to see what sites people have built, so post a link to it if it is public./p

IXIS: British Council win RealIT Award 2016 for Infrastructure as an Enabler

Wed, 05/18/2016 - 13:10
div class=field field-type-filefield field-field-blogimage div class=field-items div class=field-item odd img src= alt=teaser image for blog post title=British Council Digital team with their RITA2016 award class=imagecache imagecache-blogfull imagecache-default imagecache-blogfull_default width=435 height=338 / /div /div /div pMembers of the British Council Digital team were delighted to receive the a href= award last Thursday for the huge change in IT cloud infrastructure that Ixis delivered in the summer of 2015./ppa href= target=_blankread more/a/p

Radium on Drupal: My road to Drupal and GSoC

Wed, 05/18/2016 - 13:02
I am very happy that my GSoC project, Web Component-ize Drupal 8, got accepted this year. I would like to say thanks to my mentors skyredwang and wimleers, as well as all the members of the community who are supportive of the Google Summer of Code program, in particular Slurpee who has spent a lot of time coordinating and helping students.

IXIS: When Poor Security Practices Go Bad

Wed, 05/18/2016 - 11:27
div class=field field-type-filefield field-field-blogimage div class=field-items div class=field-item odd img src= alt=teaser image for blog post title=Security hacker class=imagecache imagecache-blogfull imagecache-default imagecache-blogfull_default width=435 height=205 / /div /div /div pIn this blog postnbsp;I#39;ll discuss some methods of ensuring that your software is kept up to date, and some recent examples of why you should consider security to be among your top priorities instead of viewing it as an inconvenience or hassle./p pCritics often attack the stability and security of Open Source due to the frequent releases and updates as projects evolve through constant contributions to their code from the community. They claim that open source requires too many patches to stay secure, and too much maintenance as a result./ppa href= target=_blankread more/a/p

Drop Guard: Top 5 sessions of DrupalCon New Orleans (security and maintenance related)

Wed, 05/18/2016 - 11:03
span data-quickedit-field-id=node/77/title/en/rss class=field field--name-title field--type-string field--label-hiddenTop 5 sessions of DrupalCon New Orleans (security and maintenance related)/span span data-quickedit-field-id=node/77/uid/en/rss class=field field--name-uid field--type-entity-reference field--label-hiddenspanIgor Kandyba/span/span span data-quickedit-field-id=node/77/created/en/rss class=field field--name-created field--type-created field--label-hiddenWed, 18.05.2016 - 11:03/span div data-quickedit-field-id=node/77/field_teaser_image/en/rss class=field field--name-field-teaser-image field--type-image field--label-hidden field__item img src=/blog/sites/default/files/styles/medium/public/2016-05/new-orleans.png?itok=wY2EG9iy width=220 height=85 alt=DrupalCon New Orleans class=image-style-medium / /div div data-quickedit-field-id=node/77/body/en/rss class=clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__itempDrop Guard team didn't make it to DC North America this year, but we've spent quite a time talking to our colleagues there, interacting with people via Twitter and Facebook, and obviously - enjoying the sessions as soon as they're available for the online viewing./p pWe are really excited about the number of the highest quality sessions on various topics, and to be honest we recommend to watch a href= of them/a (although be aware of the time you need to complete the whole list)./p pHowever, for those interested in all things security, support and maintenance related, and not having too much time to enjoy the full playlist, we've hand-picked a limited amount of videos which we found most insightful and would recommend to the Drop Guard blog readers./p /div div data-quickedit-field-id=node/77/field_blog_post_tags/en/rss class=field field--name-field-blog-post-tags field--type-entity-reference field--label-hidden field__items div class=field__itema href=/blog/taxonomy/term/9 hreflang=enDrupalcon/a/div div class=field__itema href=/blog/taxonomy/term/51 hreflang=envideo/a/div div class=field__itema href=/blog/taxonomy/term/3 hreflang=enDrupal Planet/a/div /div

Jason Pamental's Blog: DrupalCon Recap

Wed, 05/18/2016 - 03:50
div class=field-body pI had the honor of speaking last week at DrupalCon in New Orleans, and got to see a whole slew of great presentations. For a recap at our local DrupalPVD meetup I put together a few slides listing some of my favorites, and a few others that I know had generated a lot of buzz. All the session videos are live, so be sure to have a look at the a href= span class=capsNOLA/span/a site to see all the rest of them./p /div

Acquia Developer Center Blog: Drupal 8 of the week: Drupal 8.1.x!

Tue, 05/17/2016 - 20:59
div class=field field-name-field-blog-image field-type-image field-label-hiddendiv class=field-itemsdiv class=field-item evenimg typeof=foaf:Image src= width=140 height=85 alt=Drupal 8 logo title=Drupal 8 logo //divdiv class=field-item oddimg typeof=foaf:Image src= width=140 height=85 alt=CC licensed photo by Amazee Labs - title=DrupalCon Asia Mumbai Sprints 3 //divdiv class=field-item evenimg typeof=foaf:Image src= width=140 height=85 alt=CC licensed photo by Amazee Labs - - title=DrupalCon Asia Mumbai Sprints 2 //divdiv class=field-item oddimg typeof=foaf:Image src= width=140 height=85 alt=CC licensed photo by Amazee Labs - - title=DrupalCon Asia Mumbai Sprints 1 //divdiv class=field-item evenimg typeof=foaf:Image src= width=140 height=85 alt=CKEditor with language and spelling buttons title=CKEditor with language and spelling buttons //divdiv class=field-item oddimg typeof=foaf:Image src= width=140 height=85 alt=CKEditor with language and spelling buttons title=CKEditor with language and spelling buttons //div/div/divdiv class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedpSemantic versioning special! Every day, developers in the Drupal community work on improving our open source software. So far in this series, we have been concentrating on profiling some of the most useful modules, projects, and tools available for Drupal 8. This week, however, we're talking about something brand new in Drupal: significant new features being added to our current major release and the ability to do this on a predictable, regular basis! Welcome, Drupal 8.1.x!/p /div/div/divdiv class=field field-name-field-blog-tags field-type-taxonomy-term-reference field-label-inline clearfixdiv class=field-labelTags:nbsp;/divdiv class=field-itemsdiv class=field-item evena href=/tags/acquia-drupal-planet typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=acquia drupal planet/a/divdiv class=field-item odda href=/tags/ultimate-guide typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=ultimate guide/a/divdiv class=field-item evena href=/tags/drupal-8 typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=drupal 8/a/divdiv class=field-item odda href=/tags/d8 typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=D8/a/divdiv class=field-item evena href=/tags/81x typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=8.1.x/a/divdiv class=field-item odda href=/tags/semver typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=semver/a/divdiv class=field-item evena href=/tags/semantic-versioning typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=semantic versioning/a/div/div/div

Radium on Drupal: Retrieving Entities from MongoDB in Drupal 8

Tue, 05/17/2016 - 18:49
Normally in Drupal, all the entities are stored in the same database, which is usually MySQL or other Relational Databases. What if we have data elsewhere, and want to access them in Drupal? I often use MongoDB, and I think it is a good idea if I could directly retrieve or edit from Drupal, without having to import data into Drupal. What we could utilize is a module called External Entities. It does what its name says: allowing Drupal to treat external resources as a special type of entities. Similar modules include Remote Entity API (which doesn't have a Drupal 8 version yet). Currently, External Entities comes with two build-in drivers: REST and Wiki. We will be creating a new driver for MongoDB. Today, we will just deal with retrieving data, not modifying.

Acquia Developer Center Blog: Drupal in China: Impressions after a Hackaton and a DrupalCamp

Tue, 05/17/2016 - 16:49
div class=field field-name-field-blog-image field-type-image field-label-hiddendiv class=field-itemsdiv class=field-item evenimg typeof=foaf:Image src= width=140 height=85 alt=At the Chinese Hackathon //div/div/divdiv class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedpIn the Open Source community, the best way to get involved, and learn, is to dive in, head-first, at the deep end./p pThis is exactly the reason why we run hackathons: to introduce new concepts to developers in an environment where they can be nurtured. By combining a hackathon with a DrupalCamp, developers get enveloped in a blanket of Drupal and Open Source for a few days, essential for rapid development of skills in new technology./p/div/div/divdiv class=field field-name-field-blog-tags field-type-taxonomy-term-reference field-label-inline clearfixdiv class=field-labelTags:nbsp;/divdiv class=field-itemsdiv class=field-item evena href=/tags/acquia-drupal-planet typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=acquia drupal planet/a/div/div/div

LevelTen Interactive: Drupal Commerce - How to set up Search API to search SKUs with and without dashes

Tue, 05/17/2016 - 07:00
img typeof=foaf:Image src= width=600 height=300 alt=drupal commerce / pSo, you've built your Drupal Commerce site and are now setting up Search. You probably aren't going to use Drupal core's search since it won't give you enough control over what and how search results are returned. You are going to set up your own search server and index using Search API./p pIn this example, I am using Solr Search with Acquia Search for Search API. It doesn't matter how you have your index and server set up - as long as you can index your Commerce Products and Product displays, the custom module that I will describe shortly should work. For my setup, I have downloaded...a href=/blog/kristin-brinner/drupal-commerce-how-set-search-api-search-skus-and-without-dashes class=more-linkRead more/a/p

FFW Agency: Community, Connections, Console Personalization. FFW Rocks DrupalCon.

Tue, 05/17/2016 - 05:08
span property=schema:name data-quickedit-field-id=node/3336/title/en/rss class=field field--name-title field--type-string field--label-hiddenCommunity, Connections, Console amp; Personalization. FFW Rocks DrupalCon./span span data-quickedit-field-id=node/3336/uid/en/rss class=field field--name-uid field--type-entity-reference field--label-hiddenspan lang= about=/user/brent-bice typeof=schema:Person property=schema:name datatype=brent.bice/span/span span data-quickedit-field-id=node/3336/created/en/rss class=field field--name-created field--type-created field--label-hiddenTue, 05/17/2016 - 03:08/span div property=schema:articleBody data-quickedit-field-id=node/3336/body/en/rss class=clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__itempA week of beignets, beer and learning Drupal! FFW let the good times roll at DrupalCon 2016 New Orleans. In case you missed out, here are four must watch presentations to jazz up your week./p h2Is size just a number?: Reflecting on community growth, mentoring, and where we spend our efforts/h2 p align=centeriframe allowfullscreen= frameborder=0 height=480 src= width=853/iframe/p pFFW’s Dave Hernandez discusses the challenges our Drupal community faces as one of the largest open source communities in the world. From capacity to growing pains, Dave tackles potential problems such as the limited number of high-end contributors and burnout./p pHe also discusses ways we might shift our focus, like supporting smaller, more productive events, one-on-one mentoring programs to help nurture existing contributors, and other ways to make sure we get the most out of our limited volunteer hours and efforts./p h2GE Energy Connections amp; FFW: Delivering Business Results Beyond Clicks and Conversions /h2 p align=centeriframe allowfullscreen= frameborder=0 height=480 src= width=853/iframe/p pGE Energy Connections Digital Strategy Leader, Holly Bounds and FFW’s Brent Bice share stories about how Drupal not only generates traffic, conversion and increased revenue, but provides significant intrinsic value to organizations through:/p ulliReduced support and maintenance/li liImproved internal collaboration/li liIncreased productivity/li liAnd significant cost savings./li /ulp​Looking for ways to reduce support costs by 22% and save millions of dollars per year? Watch this presentation!/p h2Writing Command Line Tools for Drupal 8 Modules/h2 p align=centeriframe allowfullscreen= frameborder=0 height=480 src= width=853/iframe/p pFFW’s Jesus Olivas, maintainer of Drupal Console, and other panelists discuss a new collaborative effort to unify the way that command line tools should be written for Drupal 8 modules. Jesus provides a great walk through of writing a scripting interface for your Drupal 8 modules code using an object-oriented API built on top of Symfony Console /br / Going beyond the implementation of the CLI tool, they also provide guidance on best practices for decoupled module development and the latest progress and future plans for collaborative efforts between the teams to use common implementations for some of the more complex common functions, such as site installation, configuration management, and bootstrapping, and what you can do to help make the future of command line tools easier for everyone to manage./p h2Web Personalization for Drupal: Your Roadmap to Get Started/h2 p align=centeriframe allowfullscreen= frameborder=0 height=480 src= width=853/iframe/p pDave Sawyer, FFW’s leading personalization expert, and Acquia’s John Money deliver a fantastic presentation for getting started with personalizing user experiences in Drupal. In this presentation, Dave covers use cases, prerequisites and much more as he explains why Drupal is the best CMS to execute a personalization strategy./p /div div data-quickedit-field-id=node/3336/field_image/en/rss class=field field--name-field-image field--type-image field--label-hidden field__item picture !--[if IE 9]video style=display: none;![endif]-- source srcset=/sites/default/files/styles/blog_single_desktop/public/1Q7A3742.jpg?itok=qYqk83Xd 1x, /sites/default/files/styles/blog_single_desktopx/public/1Q7A3742.jpg?itok=eHsyFrVv 2x media=screen and (min-width: 1601px) type=image/jpeg/ source srcset=/sites/default/files/styles/blog_single_desktop/public/1Q7A3742.jpg?itok=qYqk83Xd 1x, /sites/default/files/styles/blog_single_desktopx/public/1Q7A3742.jpg?itok=eHsyFrVv 2x media=screen and (min-width: 1201px) type=image/jpeg/ source srcset=/sites/default/files/styles/blog_single_tablet/public/1Q7A3742.jpg?itok=rN6xN9lb 1x, /sites/default/files/styles/blog_single_tabletx2/public/1Q7A3742.jpg?itok=eSCnehpI 2x media=screen and (min-width: 769px) type=image/jpeg/ source srcset=/sites/default/files/styles/blog_single_mobile/public/1Q7A3742.jpg?itok=9Cc6JItw 1x, /sites/default/files/styles/blog_single_mobile2x/public/1Q7A3742.jpg?itok=yD3hA0Km 2x media=(min-width: 0px) type=image/jpeg/ !--[if IE 9]/video![endif]-- img property=schema:image srcset=/sites/default/files/styles/blog_single_desktop/public/1Q7A3742.jpg?itok=qYqk83Xd alt=FFW at DrupalCon 2016 typeof=foaf:Image / /picture /div h6 class=field-label headingTagged with/h6 ul class=links field-items lia href=/drupalcon property=schema:keywords hreflang=enDrupalcon/a/li lia href=/drupal-console property=schema:keywords hreflang=enDrupal Console/a/li lia href=/drupal-community property=schema:keywords hreflang=enDrupal Community/a/li lia href=/personalization property=schema:keywords hreflang=enpersonalization/a/li /ul section property=schema:comment data-quickedit-field-id=node/3336/field_comment/en/rss h2Comments/h2 drupal-render-placeholder callback=comment.lazy_builders:renderForm arguments=0=nodeamp;1=3336amp;2=field_commentamp;3=ffw_comments token=baf84f89/drupal-render-placeholder /section

ActiveLAMP: Going back to Drupal, it's fun again!

Tue, 05/17/2016 - 04:00
divimg src= //divpActually, we never left. We didn’t stop building Drupal sites, even through the long release cycle. However, we did move our company website, a href=, off of Drupal about 18 months ago. Our company site had been built on Drupal since the emDrupal 4.7/em days. That was back when it started to become uncool to write and maintain your own home-grown CMS. I eventually found Drupal, ditched my custom CMS, and never looked /br /Our site started on emDrupal 4.7/em, upgraded onto emDrupal 5/em, then emDrupal 6/em, and also emDrupal 7/em all at the beginning of the release cycles of Drupal. About 18 months ago, when our site was in dire need of an update, we evaluated emDrupal 8/em but realized with no release date in sight, and the fact that we did not want to chase HEAD and develop on unstable API’s, we decided to go a different route and build our updated site on a href=http://jekyllrb.comJekyll/a, a popular static generator. strongIt’s more fun to tinker with new technology when working on non-billable stuff/strong, which is what we did. We brushed up on our Ruby skills and built out a emJekyll/em site (which is this site you’re looking at if you’re reading this blog post before Q3 of 2016).br /br /We’re getting ready for another update to our company website and moving back to emDrupal/em to do it. emJekyll/em was great, but it came with its disadvantages over something like emDrupal/em. This post will highlight some of the advantages and disadvantages of working with emJekyll/em the past 18 months, as well as highlight why we’re excited to put on emDrupal 8/em in Q3 of this year./p a href= more.../a

Virtuoso Performance: DrupalCon NOLA migration sprint summary

Tue, 05/17/2016 - 01:00
span property=schema:name data-quickedit-field-id=node/31/title/en/fulltext class=field field--name-title field--type-string field--label-hiddenDrupalCon NOLA migration sprint summary/span div property=schema:text data-quickedit-field-id=node/31/body/en/fulltext class=clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__itempDrupalCon NOLA is over - perhaps too soon for those of us who love this great city, or perhaps just soon enough for those who have given Drupal and the city of New Orleans every last ounce of energy they had this past week./p pWe had a very productive week sprinting for migration - it may not be reflected in the number of commits made by the end of the extended sprints, but we'll see the fruits over the coming weeks. Our focus was on triaging the issue queue, and on diving deeply into some of the more complex outstanding issues, rather than picking the low-hanging fruit./p h2Triage/h2 pI a href=/blog/mikeryan/drupalcon-nola-food-music-sprint-rinse-and-repeatpreviously wrote/a about the upfront triage the first Sunday - I prepped a a href= sheet/a with various breakdowns of outstanding core migration system issues, and with a href= and a href= leading the way we got about halfway through the a href=;status[]=Openamp;version[]=8.xamp;issue_tags_op=%3Damp;issue_tags=Migrate+criticalMigrate critical issues/a. We picked up with the other half on Friday, with a few more people attending - a href= Weal/a, a href=, a href=, a href=, and a few more gathered around the table. Because we were working through from the oldest created issues to newest, the first round caught most of the hardest issues and the Friday session went quicker. As of Sunday morning, we were down to 18 open migrate-criticals, of which 14 were touched in the past week (11 in the previous 48 hours), so we've got momentum going./p h2Specific issues addressed at NOLA/h2 pI had meant to cover strongeverything/strong worked on this week - but I had to cut it off, for space and time. This represents fewer than half the migration issues that saw work during DrupalCon./p h3a href= D6 i18n nodes/a/h3 pThis is the biggest outstanding issue at the moment. The problem here is quite complex - the representation of translated content has completely changed in Drupal 8. In particular, translations of a node are no longer separate nodes - all translations of a specific piece of content are represented by a single node, so merging the revision histories of multiple nodes into one is... challenging. vasi has come up with a clever solution here - my current project needs this, so I had real-world data to test against. This week:/p ollivasi got the tests green/li liI rerolled the patch against 8.1.x (the issue is targeting 8.2.x, but my client is on 8.1.x at the moment)./li lia href= performed a manual test - migrating from D6 to 8.1.1 (using my reroll) using the core upgrade UI - and successfully validated that the right translations and revision history were in the right place./li liI performed a manual test with my client's data, with less successful results. Our scenario is a custom migration into a site containing manually-entered data, so we cannot preserve node and revision IDs. It turns out that the patch is assuming source revision IDs match the destination, when it attempts to consolidate multiple translations into a single revision./li liFor the patch to do that, it needs to perform a lookup in the migration map table given just a revision ID. The revision map table has a two-column key - revision ID and language - and the API (MigrateIdMapInterface) doesn't currently support partial lookups./li liSo, vasi a href= an issue to extend the API/a and implemented a solution there, which is has now been committed./li /olpAt this writing, vasi is working on the next version of the node i18n patch using the idmap extension, and I'll be testing it against my client's data./p h3a href= content type language settings from Drupal 6 amp; 7/a/h3 pSpeaking of i18n, penyaskito, a href= (remotely), and vasi have moved this issue forward, rerolling the previous 8.0.x patch for 8.2.x and continuing to refine it. Next step (per penyaskito): Add an assertion that language_alterable is TRUE when there's no i18n_lock_node_TYPE./p h3a href= passwords after D7 to D8 migration/a/h3 palexpott took this one on and produced a patch which quietone has now manually verified - next step is complete code review./p h3a href= failure in \Drupal\migrate_drupal_ui\Tests\d7\MigrateUpgrade7Test/a/h3 pA major annoyance with testing on, this test has started randomly failing. This tests the upgrade UI, which is batched, and what happens per batch is non-deterministic (affected by timing/load), so it's difficult to track down. We had some discussion about this at the closing weekend Saturday extended sprint, and alexpott has been actively pursuing it./p h3a href= EntityFile and use process plugins instead/a/h3 pI created a patch for this, which vasi and quietone have helped refine, and benjifisher applied CodeSniffer. Next step is for me to respond to a href='s review./p h3a href= bundle set in destination plugin, not in process/a/h3 pI've created a first draft of this patch, which the testbot tells me still needs work./p h3a href= tight coupling of migration destination plugins/a/h3 pquietone provided a suggested draft for the change record, and I tweaked the patch to deprecate rather than entirely remove md_entity:field_storage_config./p h3a href= Plugins must distinguish core versions/a/h3 pa href= has continued refining this patch./p h2Mentored sprint/h2 pThe a href= core sprint/a (with mentors including a href=, a href=, and a href= on Friday also contributed. /p h3a href= to docs and code style for migrate/src/*.php files/a/h3 pA few sprinters participated in rerolling the existing patch for 8.1.x (with some guidance from a href= a href=, a href=, a href=, and a href= Sean/a./p h3a href= MigrationCreationTrait as it no longer creates migrations - it configures them/a/h3 pParticipants in this patch include a href=, hussainweb, a href=, and a href= h3a href= should be null when is produced skip process/a/h3 pa href= submitted a reroll of this patch, a href= also worked on it. This one is committed!/p h3a href=;D8: Migrating links without leading slash leads to fatal error/a/h3 pa href= and a href= did manual testing on D6 and D7 respectively - looks like this is something we only need to worry about on D6./p h2Non-NOLA progress/h2 pNot everyone gets to go to every DrupalCon - while we fortunate ones were sprinting on-site, work progressed around the world.../p h3a href= doesn't adhere to MigrateIdMapInterface::getRowBySource/a/h3 pOn the BC-breakers list but the NOLA sprinters didn't get to this - quietone working remotely rerolled the 7-month-old patch that was there, it's now ready for review./p h3a href= custom block body field is hidden on form and display/a/h3 pa href= identified this problem and has provided a patch - ready for review./p h3a href= imported timestamps not set in map tables/a/h3 pa href= found a nasty oops! in a recent patch - looks good, just needs tests./p h3a href= to config: statistics.settings [d7]/a/h3 pa href= rerolled the existing patch and quietone reviewed./p h2Next steps/h2 pA lot of the work done at DrupalCon (not to mention a lot of work done previous to DrupalCon as well) needs review - let's get in there and see what we can move forward to RTBC./p pI feel like we have a lot of momentum going now - but in my experience that DrupalCon momentum can dissipate pretty quickly. Let's keep it going - I'd like to propose ongoing migration sprints on a regular basis. Specifically:/p olliEach sprint lasts a calendar day - during that day (according to your local calendar), those interested in pushing D8 migration forward try to find at least one chunk of time to work on migration issues, coordinating on IRC in #drupal-migrate./li liFor now, the theme will be a href=;status[]=Openamp;version[]=8.xamp;issue_tags_op=%3Damp;issue_tags=Migrate+criticalMigrate-critical issues/a. Once we trim that list down to just a couple, we can pick different themes./li liSince not every day of the week is equally open for everyone, let's rotate it - I suggest doing it every 8 days. So, Monday May 23 (8 days after the last DrupalCon extended sprint), Tuesday May 31, Wednesday June 8, etc.../li liI'll try to put out a blog post the day before each sprint day going over the status of key migrate-criticals./li /olh2Obligatory travelogue/h2 pI just couldn't keep up the daily blogging pace from mid-week on... Most of the meals have faded from my memory (and frankly I was finding better food earlier in the week than I was later), but I will leave you with my musical memories./p pWednesday night, sleep-deprived, I was heading back to my hotel on Esplanade when I ran into a couple of former a href= colleagues on Royal. With very little arm-twisting, they convinced me to lead them to Frenchmen Street, where we picked a club pretty much at random (a href=°/-90°/a). It was shortly after 9pm and the band started up right after we got there, so I figured I'd stay for one set and still get a good night's sleep. It turned out they only played one set - and it lasted almost to 1am. And that band (a href= Company/a, with a somewhat different lineup than you see there) was simply awesome - high-energy jazz-funk (or funk-jazz?), very tight as they ran through covers of Herbie Hancock, Stevie Wonder, CCR/Ike amp; Tina, and many more. They closed with a medley of Kiss and Purple Rain, with a guest singer whose falsetto would have made Prince (R.I.P.) himself jealous. The late night pretty much wiped out my Thursday, but it was well worth it./p pSaturday night I closed out the week with an actual plan - local legend a href= Boutté/a, (yes, I only knew him from Treme) was at a href=, so I made sure to get there good and early. This show was, unfortunately, a mixed bag - people gabbing loudly in the back of the room made it difficult to enjoy the performance, especially on the quieter tunes./p plt;rantgt;Who are these idiots who pay a cover for a show and then pay absolutely no attention to the artist!? WHY ARE YOU EVEN HERE!!!?lt;/rantgt;/p pSigh... Anyway, Boutté and his band (3+ piece horn section, guitar, and bass) did a fine job despite the distractions. Highlights were gentle takes on Time After Time and Hallelujah, with the emotional center being a combination of a nearly-a-cappella You've Got to Be Carefully Taught followed by a funky Southern Man./p pAnd so, as my train departed Sunday, I left satisfied - a great week in and out of the convention center, can't wait until DrupalCon comes back here (hint, hint...)!/p/div span data-quickedit-field-id=node/31/uid/en/fulltext rel=schema:author class=field field--name-uid field--type-entity-reference field--label-hiddenspan lang= about=/user/6 typeof=schema:Person property=schema:name datatype=mikeryan/span/span span property=schema:dateCreated content=2016-05-16T23:00:00+00:00 data-quickedit-field-id=node/31/created/en/fulltext class=field field--name-created field--type-created field--label-hiddenMon, 05/16/2016 - 18:00/span div data-quickedit-field-id=node/31/field_tags/en/fulltext class=field field--name-field-tags field--type-entity-reference field--label-above clearfix h3 class=field__labelTags/h3 ul class=links field__items lia href=/tags/planet-drupal property=schema:about hreflang=enPlanet Drupal/a/li lia href=/tags/drupal property=schema:about hreflang=enDrupal/a/li /ul /div section rel=schema:comment data-quickedit-field-id=node/31/comment/en/fulltext class=field field--name-comment field--type-comment field--label-above comment-wrapper /section div class=node__links ul class=links inlineli class=comment-forbiddena href=/user/login?destination=/blog/mikeryan/drupalcon-nola-migration-sprint-summary%23comment-formLog in/a or a href=/user/register?destination=/blog/mikeryan/drupalcon-nola-migration-sprint-summary%23comment-formregister/a to post comments/li/ul /div 12 Things I learned at my first DrupalCon

Mon, 05/16/2016 - 23:00
pFor years I have been hearing about DrupalCon from Brice and Amitai. Every six months they would send me a massive group photo and challenged me to locate them among the crazy mustaches, viking helmets, and identical t-shirts. Needless to say, I failed every time and the number of people in those pictures grew every year. Irsquo;m also happy to say that that last group photo - from a week ago - included me as well (Bonus points if you can a href= me/a)./p div class=thumbnail div class=img-wrapper img src= /div div class=caption2016 DrupalCon Group Photo./div /div pMy first Con was an overwhelmingly great experience and I learned a ton of new things. Here are the top 12:/p h21) Count down from 100 if you canrsquo;t fall asleep at night/h2 pDrupalCon’s sessions and keynotes are diverse and engaging. For instance, the a href= Keynote/a by a href= (Michael Schmid), was full of tips to keep your brain ready and aware, such as: Start your day doing things you dislike, drink plenty of water that will force you to take a lot of pee breaks, and a href= with kids/a to clear your mind./p pThe enormous amount of people and ideas exchanged in DrupalCon are so invigorating that you might find it hard to sleep at night. Try counting backwards slowly from hundred to zero. I have already put it to the test and it works - that tip alone was worth the trip./p div class=thumbnail div class=img-wrapper img src= /div div class=captionMichael Schmid (@schnitzel) delivers the Community Keynote/div /div h22) Gator omelette for breakfast/h2 pNew Orleans is a seafood and meat town. Crab, crawfish, sausages, bbq, and alligator - the Queen City is not known for its consumptions of vegetables./p pBreakfast portions are huge and everything is golden-brown. But in New Orleans there is a special name for that little strip of green ground in the middle of a boulevard - ldquo;neutral groundrdquo; (thanks Trivia Night!). Perhaps they can grow fresh vegetables there!/p div class=thumbnail div class=img-wrapper img src= /div div class=captionA typical three-person breakfast. Wersquo;ve never finished it!/div /div pa href= reading…/a/p

OSTraining: How to Use Pathauto in Drupal 8

Mon, 05/16/2016 - 20:10
pMany modules have been in flux during the early stages of Drupal 8's development./p pFew modules have changed as much as Pathauto, which the vast majority of Drupal sites use to control their URLs./p pIn this tutorial, I'll show you the current way to use Pathauto with your Drupal 8 site./p

Dries Buytaert: Cross-channel user experiences with Drupal

Mon, 05/16/2016 - 16:55
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedpLast year around this time, I wrote that a href= Big Reverse of Web/a would force a major re-architecture of the web to bring the right information, to the right person, at the right time, in the right context. I believe that conversational interfaces like a href= Echo/a are further proof that the big reverse is happening./p pNew user experience and distribution platforms only come along every 5-10 years, and when they do, they cause massive shifts in the web's underlying technology. The last big one was mobile, and the web industry adapted. Conversational interfaces could be the next user experience and distribution platform – just look at a href= Echo/a (aka Alexa), a href='s messenger/a or a href='s Conversation-as-a-Platform/a./p pToday, hardly anyone questions whether to build a mobile-optimized website. A decade from now, we might be saying the same thing about optimizing digital experiences for voice or chat commands. The convenience of a customer experience will be a critical key differentiator. As a result, no one will think twice about optimizing their websites for multiple interaction patterns, including conversational interfaces like voice and chat. Anyone will be able to deliver a continuous user experience across multiple multiple channels, devices and interaction patterns. In some of these cross-channel experiences, users will never even look at a website. Conversational interfaces let users disintermediate the website by asking anything and getting instant, often personalized, results./p pTo prototype this future, my team at a href=http://acquia.comAcquia/a built a fully functional demo based on Drupal 8 and recorded a video of it. In the a href= video below/a, we show a sample supermarket chain called Gourmet Market. Gourmet Market wants their customers to not only shop online using their website, but also use Echo or push notifications to do business with them./p pWe built an a href= integration module/a to connect Alexa to the Gourmet Market site and to answer questions about sale items. For example, you can speak the command: Alexa, ask Gourmet Market what fruits are on sale today. From there, Alexa would make a call to the Gourmet Market website, finding what is on sale in the specified category and pull only the needed information related to your ask./p pOn the website's side, a store manager can tag certain items as on sale, and Alexa's voice responses will automatically and instantly reflect those changes. The marketing manager needs no expertise in programming -- Alexa composes its response by talking to Drupal 8 using web service APIs./p pThe a href= video/a also shows how a site could deliver smart notifications. If you ask for an item that is not on sale, the Gourmet Market site can automatically notify you via text once the store manager tags it as On Sale./p iframe width=640 height=360 src= frameborder=0 allowfullscreen/iframep / pFrom a technical point of view, we've had to teach Drupal how to respond to a voice command, otherwise known as a Skill, coming into Alexa. Alexa Skills are fairly straightforward to create. First, you specify a list of Intents, which are basically the commands you want users to run in a way very similar to Drupal's routes. From there, you specify a list of Utterances, or sentences you want Echo to react to that map to the Intents. In the example of Gourmet Market above, the Intents would have a command called codeGetSaleItems/code. Once the command is executed, your Drupal site will receive a webhook callback on code/alexa/callback/code with a payload of the command and any arguments. The a href= module for Drupal 8/a will validate that the request really came from Alexa, and fire a Drupal Event that allows any Drupal module to respond./p pIt's exciting to think about how new user experiences and distribution platforms will change the way we build the a href= in the future/a. As I referenced in a href= New Orleans keynote/a, the Drupal community needs to put some thought into how to design and build multichannel customer experiences. Voice assistance, chatbots or notifications are just one part of the greater equation. If you have any further thoughts on this topic, please share them in the comments./p figure class=figure div class=img no-resize style=border: 1px solid #ccc; display: inline-blockimg src= style=display:block alt=Digital trends//div figcaption style=font-style: italic; color: #777;/figcaption /figure /div/div/div

Red Route: Jumping through hoops with the golden flexbox hammer

Mon, 05/16/2016 - 16:11
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=schema:articleBody content:encodedpI've been a big proponent of using Flexbox for a while, especially since hearing a href= Mickley Gillenwater speaking about it/a at a href= Conference Oxford 2014/a./p pIn particular, I use codejustify-content: space-between/code a lot. But one issue with it is what happens in the last row. If the number of child items doesn't divide nicely into the number of items per row, there will be a big gap between them, as you can see from this Codepen example:/p p data-height=265 data-theme-id=0 data-slug-hash=YqbPxw data-default-tab=result data-user=malcomio data-embed-version=2 class=codepenSee the Pen a href= by malcomio (a href= on a href=http://codepen.ioCodePen/a./p script async= src=// can look pretty ugly, especially if the parent element is wide. One possible solution is to have a href= items in the last row fill the available space/a. But for a href= tiles layout on the Gallery Guide/a, that wouldn't work - it would make the last row items much too big. Ideally, the last row would be given a different behaviour - perhaps using a different codejustify-content/code value, perhaps using floats, but as far as I'm aware, there isn't a nice CSS way to achieve this./p pThe suggestion I found on a href= is to add extra elements. Given that the rows are being generated by a Drupal view, we can achieve this using a preprocess function, adding dummy rows, which don't affect small screens because their height is set to zero./p pHere's a Codepen example showing the idea:/p p data-height=265 data-theme-id=0 data-slug-hash=YqbPOG data-default-tab=result data-user=malcomio data-embed-version=2 class=codepenSee the Pen a href= with dummy rows/a by malcomio (a href= on a href=http://codepen.ioCodePen/a./p script async= src=// relevant views all use the unformatted list format, so in the implementation of codetemplate_preprocess_views_view_unformatted/code we add a variable to say how many extra rows are needed to make it fit nicely:/p precode class=language-php define('GALL_VIEWS_ITEMS_PER_ROW', 4); /** * Implements template_preprocess_views_view_unformatted(). */ function gall_preprocess_views_view_unformatted(amp;$variables) { // Add dummy rows so that flexbox looks nice. $view_id = $variables['view']-gt;id(); $tiles_views = _gall_tiles_views(); if (in_array($view_id, $tiles_views)) { $remainder = count($variables['view']-gt;result) % GALL_VIEWS_ITEMS_PER_ROW; $rows_to_add = GALL_VIEWS_ITEMS_PER_ROW - $remainder; if ($remainder amp;amp; $rows_to_add) { $variables['extra_rows'] = $rows_to_add; } } } /code/pre pOnce we've added this counter, we can use it to create a loop in our codeviews-view-unformatted.html.twig/code template:/p precode class=language-twig {% if extra_rows %} {% for i in 1..extra_rows %} div class=views-row dummy-row/div {% endfor %} {% endif %} /code/pre pAnd, a href= if by magic/a, the view rows are aligned left. Problem solved./p pBut maybe the problem was one of my own making. Even before I'd finished building this, I was realising that maybe it would have been easier to just use floats. To paraphrase a href= Maslow, or perhaps Abraham Kaplan/a, someone who has just discovered a hammer will always be looking for nails. As always, there's another way I could have solved this, and the new way isn't always better than the old way. Having said that, I do like the way that flexbox helps to keep my margins tidy.../p /div/div/divdiv class=field field-name-taxonomy-vocabulary-4 field-type-taxonomy-term-reference field-label-above div class=field-labelTags:nbsp;/div div class=field-items div class=field-item evena href=/category/tags/drupal typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=Drupal/a/div div class=field-item odda href=/category/tags/drupal-8 typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=Drupal 8/a/div div class=field-item evena href=/category/tags/gallery-guide typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=The Gallery Guide/a/div div class=field-item odda href=/category/tags/css typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=CSS/a/div div class=field-item evena href=/category/tags/flexbox typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=flexbox/a/div /div /div a href=/blog/terms class=taxonomy-link-allAll tags/a span rel=schema:url resource=/articles/jumping-through-hoops-with-golden-flexbox-hammer class=rdf-meta element-hidden/spanspan property=schema:name content=Jumping through hoops with the golden flexbox hammer class=rdf-meta element-hidden/span