Planet Drupal

Syndicate content - aggregated feeds in category Planet Drupal
Updated: 11 min 37 sec ago

Wunderkraut Sweden Blog: Drupal Meetup 15/3 Stockholm

Sat, 03/04/2017 - 11:43
It has been a while, but now it is time again for a Drupal Meetup in Stockholm, and it will be at the Wunderkraut office in Stockholm, signup for a href= here/a. There will be beer, mingle, talk about caching in Drupal 8, and more. Bring a friend or two!

Hook 42: Hook 42 at Stanford Camp 2017

Sat, 03/04/2017 - 04:37
div class=image div class=field-items class=field-items div class=field-item even rel=og:image rdfs:seeAlso resource= class=field-item evenimg typeof=foaf:Image src= width=375 height=220 alt=Hook 42 at Stanford Drupal Camp title=Hook 42 at Stanford Drupal Camp //div /div /div div class=field field-name-body field-type-text-with-summary field-label-hidden field-wrapper body field div class=field-items class=field-items div class=field-item even property=content:encoded class=field-item evenpIt's that time of the year again! Time to connect in the South Bay!nbsp;a href= Camp/a is happening March 10supth/sup amp; 11supth/sup and will be here before we know it.nbsp;/p /div /div /div

Drupal core announcements: Core will be updated to use short array syntax (many patches will need rerolls)

Fri, 03/03/2017 - 23:11
pDrupal 8.3.x has entered its release candidate phase with the release of a href=, which means we will now undertake disruptive cleanup tasks like adjusting coding standards. The main standards change during this release candidate phase will be the a href= adoption of short array syntax/a, e.g.:br //pdiv class=codeblockcodespan style=color: #000000span style=color: #0000BBlt;?phpbr /  /spanspan style=color: #FF8000// Before:br /  // $array = array('foo', 'bar');br /br /  // After:br /  /spanspan style=color: #0000BB$array /spanspan style=color: #007700= [/spanspan style=color: #DD0000'foo'/spanspan style=color: #007700, /spanspan style=color: #DD0000'bar'/spanspan style=color: #007700];br //spanspan style=color: #0000BB?gt;/span/span/code/div pa href= is underway to patch core for this change/a, which will touch many files, so be aware that you will need to reroll patches for conflicts and adjust them to use the new standard./p

ThinkShout: See You at the NTC

Fri, 03/03/2017 - 15:00
pThe Nonprofit Technology Conference is just around the corner, and we’re hard at work making those final preparations for our trip to D.C. We have some exciting things in store for you this year, so mark your calendars!/p h2 id=drupal-salonDrupal Salon/h2 pThis year, we’re honored to coordinate the first ever Drupal Salon at the NTC. In lieu of the traditional pre-conference days as we’ve done in previous years, NTEN set aside space and time for subject matter experts to present nine twenty-minute-long talks on all things Drupal on Thursday, March 23rd. These talks will take place as part of the formal NTC schedule, and sessions can be viewed in the a href= amp; Drupal Salon tracks on the NTC site/a./p pWe’re excited to have experts from the Southern Poverty Law Center, Shatterproof, and the Center for Strategic and International Studies share their Drupal insight and experiences. ThinkShout will also be providing one-on-one consulting at our Drupal Salon table, so bring us all of your Drupal questions! Drupal hosting providers Pantheon and Acquia will also be on hand to tackle whatever Drupal hosting questions you may have./p pWe hope you’ll be able to join us! Here’s what we’ll be talking about:/p ul li p“a href= that Matter: How the SPLC Responded to the 2016 Election/a” - Alex Amend, Digital Media Director (The Southern Poverty Law Center)/p /li li p“a href= Response Options in Drupal/a” - Eric Paxton, Senior Front End Engineer (ThinkShout)/p /li li p“a href= Digital Storytelling/a” - Brett Meyer, Director of Strategy (ThinkShout)/p /li li p“a href= as a Hub: Custom Integrations for CSIS/a” - Ian Gottesman, Chief Information Officer (CSIS)/p /li li p“a href= Drupal and Salesforce/a” - Lev Tsypin, President amp; CEO (ThinkShout)/p /li li p“a href= Registration with Drupal/a” - Gabe Carleton-Barnes, Engineering Manager (ThinkShout)/p /li li p“a href= Shatterproof Fights Addiction with Compelling Content/a” - Anthony Della Camera, Technology Director amp; Jessica Ishikawa, Interactive Designer (Shatterproof)/p /li li p“a href= Modeling for Drupal-based Websites/a” - Brett Meyer, Director of Strategy (ThinkShout)/p /li li p“a href= Drupal in Your Marketing Strategies/a” - Natania LeClerc, Senior Digital Engagement Strategist (ThinkShout)/p /li /ul pWe’re confident that the Drupal Salon sessions will have a little something for everyone, and we look forward to connecting with the nonprofit community with this new format./p h2 id=meet-the-thinkshout-teamMeet the ThinkShout Team/h2 pBe sure to catch our team session on March 23rd, as well!/p ul li“a href= to Learn to Stop Worrying and Love Your Digital Agency/a” - Alex Amend (Southern Poverty Law Center), Michele Kayal (Relief International), Alex MacMillan (ThinkShout), and Lev Tsypin (ThinkShout)/li /ul pThe ThinkShout team will have a presence in the Exhibit Hall this year, of course. Stop by our booth (#501) and chat; we’ll be debuting brand new t-shirts and we’re excited to share them with you all (for free)! This is a great opportunity to learn more about our work and the organizations we partner with. We’re also available to talk about anything B Corp related, so send those questions our way!/p pIf you’d like to schedule a time to meet with our staff at the NTC in advance, drop us a line through our a href= form/a. See you in the capitol!/p

Third Grove: Magento 2 Cluster Deployments With Deployer

Fri, 03/03/2017 - 14:19
span property=schema:name class=field-name--titleMagento 2 Cluster Deployments With Deployer/span span class=field-name--uid rel=schema:authorspan lang= about= typeof=schema:Person property=schema:name datatype= xml:lang=jwatts/span/span span property=schema:dateCreated content=2017-03-03T13:19:49+00:00 class=field-name--createdFri, 03/03/2017 - 08:19/span

OSTraining: How to make a complex webform in Drupal 8

Fri, 03/03/2017 - 12:45
div class=ost-intro-imageimg src= alt=how to make a complex webform in drupal 8 width=200 height=133 //div pOne of our OSTraining members asked us how to make a user input form using Drupal 8 Webform module. So, we thought what could be a more useful answer than a comprehensive, easy to follow lesson./p pFor the purpose of this tutorial we will use the a href= module./a If you would like to use the Webform Devel option, you will also need the a href= module/a./p

Aram Boyajyan: Programmatically creating custom block types for Panels

Fri, 03/03/2017 - 00:37
article role=article about= typeof=schema:TechArticle class=node node--type-article node--view-mode-teaser clearfixh2 class=node--title a href= rel=bookmarkspanProgrammatically creating custom block types for Panels/span /a /h2 footerdiv spanFri, 03/03/2017 - 00:37/span /div /footerdiv class=node--content clearfix divpThe most potent Drupal module for creating very complex layouts is definitely a href= It integrates with a lot of other parts of your Drupal site, so you can show views, nodes, webforms, blocks, and pretty much anything else you can think of. Page builder is very easy to use and allows administrators visual representation of complex pages./p/div ul class=links inlinelia href= rel=tag title=Programmatically creating custom block types for Panels hreflang=enRead morespan class=visually-hidden about Programmatically creating custom block types for Panels/span/a/li/ul/div /article

Drupal Association blog: Saving time and money for the Drupal community

Fri, 03/03/2017 - 00:20
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item evenpAs you know, we've been highlighting the work of the Drupal Association Engineering Team during our membership campaign. Every day, this small team moves the needle forward so that we all have a better experience as users of In this post, we explore how the team's recent work results in faster, less expensive Drupal development.  /p h2Helping Drupal development move faster with DrupalCI/h2 pDrupalCI testbots are the next generation of testing infrastructure for, funded by the Drupal Association and maintained by the Engineering team. For any project on the site, DrupalCI testing can be enabled from the Automated Testing link on the Project page. Every time a contribution to the Drupal project needs to be tested, DrupalCI spins up a testbot on AWS to test those changes. The DrupalCI testbots are helping Drupal contributors to test patches faster than ever before and they are more cost effective than our last generation testbots, both in price-per-test and in expense to maintain./p pIn recent months, we've added a number of new features including:/p ulli pa href= rel=nofollowcheckstyle testing/a to ensure code contributions adhere to Drupal coding standards/p /li li pa href= rel=nofollowautomatic builds of vagrant boxes/a so you can easily use DrupalCI testing on your local machine/p /li li pa href= rel=nofollowupdates to the PHP containers/a to make tests compatible with a variety of PHP versions/p /li li pa href= rel=nofollowand quite a few other improvements/a per the a href= rel=nofollowDrupalCI roadmap/a./p /li /ulpWe're proud to say that our work on DrupalCI has increased the speed of Drupal development, saving time and money!/p pWe'd also like to thank the volunteers who've helped us to bring this project to life: a href= rel=nofollowMile23/a, a href= rel=nofollowjthorson/a, a href= rel=nofollownick_schuch/a, a href= rel=nofollowdasrecht/a, a href= rel=nofollowricardoamaro/a, a href= rel=nofollowmikey_p/a, a href= rel=nofollowchx/a, a href= rel=nofollowshyamala/a, a href= rel=nofollowwebchick/a, and a href= rel=nofollowjhedstrom/a./p pa href= rel=nofollowimg alt=Icon of checklist on a clipboard with a pencil class=left height=35 src=/files/icon-gray-checklist.png width=35 //aWant to keep up with the engineering team?a href= rel=nofollow Subscribe to change notifications/a so you can see ongoing improvements./p h2Making the greatest impact with member and donor funds with a leaner p is more portable and maintainable because of updates in 2016 that streamline our infrastructure. We've virtualized the majority of the infrastructure and standardized on Debian 8 images. We've also updated our configuration and user management from Puppet 3 + LDAP to Puppet 4 + Hiera. Dev sites are more robust and we can create staging and development environments faster than before./p pAll of this makes more cost-effective to run, easier to maintain, and increases our development velocity when we're working on new features to support the community. These efficiencies help to conserve membership and donor funds for other programs to help the Drupal community, like fiscal sponsorship for camps, and Community Cultivation Grants./p h2Improving developers' lives by supporting Composer workflows for Drupal/h2 pComposer is the defacto standard for managing dependencies in the PHP world. Over the course of 2016, the Drupal Association Engineering Team developed a href= rel=nofollowComposer endpoints for Drupal/a allowing Drupal developers to use Composer to manage dependencies, and allowing PHP developers at large to manage Drupal as part of their larger PHP projects in this standard workflow./p pComposer is a force multiplier for enterprise site owners and developers within the Drupal community and at large. By supporting Composer, we've further opened Drupal to the wider PHP community, thus bringing new people into the fold to contribute./p pA big thanks to everyone who helped with Composer: a href= rel=nofollowseldeak/a - the creator of Composer and, a href= rel=nofollowwebflo/a - the creator and maintainer of a href= rel=nofollow, /aa href= rel=nofollowtimmillwood/aa href= rel=nofollow, dixon_/aa href= rel=nofollow, badjava/aa href= rel=nofollow, cweagans/aa href= rel=nofollow, tstoeckler/aa href= rel=nofollow, mile23/a, and also a href= rel=nofollowAppnovation/a, who sponsored the initial development of's composer endpoints./p h2A more secure home for the Drupal community/h2 pKeeping secure is also the responsibility of the Drupal Association Engineering Team (though we rely on some trusted volunteers to help - thanks, a href= rel=nofollowmlhess/a and a href= rel=nofollowbasic/a!). From heartbleed, to dirtycow, to cloudbleed - the team is always ready to respond when a vulnerability is disclosed. But the team is not just reactive - they also take proactive steps to keep and all our users' data safe. From ensuring that most of our servers are only available to each other on a back-end network, to putting in protections against DDOS attacks, to building anti-spam tools to prevent bad actors from registering accounts on the site- the Engineering Team is looking to prevent problems before they happen./p h2We'll keep at it, with your support/h2 pEvery day, we're on call to keep running and improving. The list of small changes we make to have a big impact on your experience grows by the day. You can help sustain the work of the Drupal Association by a href= rel=nofollowjoining as a member/a. Thank you!/p/div/div/div

Metal Toad: Extending Drupal 8 Fields That Contain Data

Thu, 03/02/2017 - 23:21
span class=field field--name-title field--type-string field--label-hiddenExtending Drupal 8 Fields That Contain Data/span span class=field field--name-uid field--type-entity-reference field--label-hidden a title=View user profile. href= lang= about= typeof=schema:Person property=schema:name datatype= xml:lang=Marcus Bernal/a/span span class=field field--name-created field--type-created field--label-hiddenThu, 03/02/2017 - 22:21/span div class=clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden div class=field-items div class=field-itemh2The Exception/h2 pData protection is one of the primary advantages of Drupal, but sometimes there are exceptions to the rule and you might need to modify a field to account for some change in business needs. There are a few rule bends (read hacks) that can be done to circumvent Drupal's checks and still maintain data integrity. You should only perform this when extending a field or changing something reasonable that is allowed by the database server. For example, expanding a varchar length or changing unformatted string into a formatted text field./p/div /div /div

Lullabot: Users Gonna Use—How Lullabot Does Usability Testing

Thu, 03/02/2017 - 22:00
Matt and Mike sit down with three of Lullabot's senior UX designers to talk the ins and outs of usability testing within our design process.

David Lohmeyer's Blog: Reverse core threaded comment ordering in Drupal 8!

Thu, 03/02/2017 - 21:09
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedpThe default ordering of all comments in Drupal 8's core comment module is ascending, meaning the oldest comments are displayed first. Sometimes you don't want this./p pAssuming your comment field's machine name is field_comments, put this code into a module to get descending comments. I was having trouble with threaded comments, but this works since it alters the query by the c.thread database column instead of just 'torder':/p/div/div/div

Drupalize.Me: New Hands-on Exercises for Module Development

Thu, 03/02/2017 - 19:17
div class=field field-name-body field-type-text-with-summary field-label-hidden text-content text-secondarydiv class=field-itemsdiv class=field-item evenpWe've added several new tutorials to our free a href= Exercises: Movie Project/a, which dive into module development. The first 16 exercises covered site building and theming. These latest additions continue to develop the same movie review site. They require you to start building your own custom modules to add a custom form for adding movie information to the site and use an external API to find and grab the information you need./p /div/div/divdiv id=comment-wrapper-nid-2811/div

TheodorosPloumis blog: Creating custom Backend with Drupal 8. Tips and proposals.

Thu, 03/02/2017 - 17:17
div class=field field-name-field-top-image field-type-image field-label-hiddendiv class=field-itemsdiv class=field-item evenimg typeof=foaf:Image src= width=500 height=312 alt= //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:encodedpDrupal is a powerful system. Butnbsp;one of the disadvantages is the lack of a unified backend. Others can say that the backend is targeted on professionals. In fact there is a backend already on core but since Drupal is so flexible and customizable each Drupal website or app may need different backend design and development. For examplenbsp;a user that already knows how to manage a Wordpress site should probably be able to manage another Wordpress sitenbsp;in the feature. This is not always true with Drupal and the UX may vary from site to site./p pAll these years while building websites for customers I have ended to some main best practices and tips for the backend of a Drupal project. The larger a project is with many content types and user roles the most required is the backend. If there is a redesign process happening it is mandatory to ask the admins what were their problems with the backend./p pBut let’s get to the point. strongHere are some proposals and tips./strong/p /div/div/div

Agaric Collective: Start contributing to Drupal

Wed, 03/01/2017 - 21:50
p class=leadI’ve been working on open source projects for a long time and contributing to Drupal for 6 years now./p p class=leadAnd I want to share my experience and the things that helped me contribute to Drupal./p h2Where you can help:/h2 pI think one of the first problems I had to face when I started contributing was picking up an issue from the Drupal issue queue and to start working on it. When I started, all the issues seemed very hard or complex (and some are), fortunately a href=[0]=1amp;status[1]=8amp;status[2]=13amp;issue_tags_op=%3Damp;issue_tags=Novicethere are a list of issues for people who want to start contributing to Drupal, these issues have the Novice tag/a. The idea of these issues is for someone to feel the experience of working on an issue./p h2What you need to know/h2 pSome of the things to learn while working on novice issues are:/p ullia href= git/a /li lia href= to create a patch using git/a/li liWhen a ticket is old and the patch doesn’t apply anymore it is necessary to a href= the patch/a, that is a very common thing on the issue queue and is just updating the patch so it can be applied to the project again./li liEvery time a new patch is uploaded, it is necessary to a href= an interdiff/a. An interdiff is just a file showing what changed from the previous patch to the new one. This is a very important thing as it helps a lot for the reviewer to know what has changed. This is especially important if it is a big patch./li liUse the a href= Coding Standards/a, and the easiest way to follow along is by using a href= and later a href= it with your IDE/a/li liThe changes must pass the a href= Gates/a which essentially are checklists of things that every contribution must have in order to keep the quality of the code up to standards. /li/ulh2Don’t work on novice issues forever/h2 pWhile working on novice issues is a good way to start, it is necessary to jump to issues not marked as novice as soon as we feel comfortable with the things listed above. The non-novice issues are where we can really learn how Drupal works. /p pA few ways to start working on non-novice issues are:/p ulli a href=;assigned=amp;submitted=amp;project_issue_followers=amp;status%5B%5D=8amp;version%5B%5D=8.xamp;issue_tags_op=%3Damp;issue_tags=reviewing patches/a from other users, so you can learn how a change is done and start checking how the core works, reading code from others is a great way to improve your abilities as developer and at the same time help to keep moving the issues along, so they can be fixed. /li liAnother way to contribute is by writing tests, every patch with a fix must have a test to avoid regressions. While writing tests sounds like a hard thing to do, Drupal 8 help us a lot with this. a href= is a whole page written about the topic/a. Also the a href= module/a does not just provide examples of how to do things with Drupal but also how to strongtest them/strong, so keep that module at hand as it is a great resource. Drupal 8 has thousands of tests already, so for sure there is at least one which is very similar to what you need to do./li liPick an issue related to the component you want to know more about, Drupal 8 has a lot of components, and if you want to know how a specific part works just pick one of its bugs and work on it. Don’t worry if the bug seems easy to fix in the issue but in the code it is not, that is normal. Before you start fixing the bug, it is necessary to understand what the problem is and part of that is learning how that specific part of the component works. So when finally a patch can be provided for that issue you will now know how that component works. This is (for me) the best way to learn. While you help Drupal to be more stable, at the same time you gain understanding on a very deep level of how Drupal works./li liBe your own critic while you are working on client work, if there is something which doesn’t seem right, don’t hesitate to look at an issue with that problem before you do a workaround, maybe someone has already written a patch and it might just need a reroll, a review or a test. Sometimes you can help while working on a project. At Agaric we recently found a bug while working on a project and it was a a href= year old issue that just needed a review and an extra test/a. Now it is fixed, for us and for everyone./li /ulh2Final comments/h2 pWhen feeling frustrated while working on an issue, remember the Thomas Edison quote iGenius is one percent inspiration, ninety-nine percent perspiration/i, while we keep trying and keep working and asking questions and trying new things, just don’t give up, eventually we will make it happen. When someone starts contributing, it is normal to feel like they are not good enough. Just keep trying!/p pRemember, contributing for most of the people is an unpaid labor, don’t feel disappointed if there is an issue where you spent a good amount of time and no one reviews it, there are issues that have been around for years which aren’t committed, but even if they aren’t, the next developer with your same problem will find your patch and use it. So even if your code is not part of a module/core it still helps. /p pGoing to conferences and meeting Drupalistas is a good way to keep you motivated and to learn new things. It is fun to meet in person the users who helped you in the issue queue./p pAnother thing that might help to keep you motivated is to see your name at a href= There you can see a list of users and mentions: for every new mention/contribution your nick will gain a few place in that rank. /p

Freelock : 6 things to consider before the next AWS outage

Wed, 03/01/2017 - 20:28
div class=g-plusone-wrapper style=margin: 0 1em 1em 1em;float:right g:plusone href= size=medium annotation=bubble width=250 /g:plusone/divdiv class=field field-name-field-media field-type-file field-label-hiddendiv class=field-itemsdiv class=field-item evendiv id=file-559 class=file file-image file-image-jpeg class=file file-image file-image-jpeg h2 class=element-invisiblea href=/file/server-rack-spacejpgserver-rack-space.jpg/a/h2 div class=content img src= width=260 height=91 alt= title= / /div /div /div/div/divdiv class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item evenpYesterday Amazon Web Services (AWS) had a major outage in their US-East datacenter, in Virgina. It made all sorts of national news, largely because it affected some major online services./p/div/div/divdiv class=field field-name-taxonomy-vocabulary-5 field-type-taxonomy-term-reference field-label-hiddendiv class=field-itemsdiv class=field-item evena href=/tag/drupal-planetDrupal Planet/a/divdiv class=field-item odda href=/tag/amazonAmazon/a/divdiv class=field-item evena href=/tag/cloudCloud/a/divdiv class=field-item odda href=/tag/network-administationNetwork Administation/a/divdiv class=field-item evena href=/tag/networksNetworks/a/divdiv class=field-item odda href=/tag/serverServer/a/divdiv class=field-item evena href=/tag/maintenancemaintenance/a/divdiv class=field-item odda href=/tag/hostingHosting/a/div/div/div

Lullabot: Drupal Serialization Step-by-Step

Wed, 03/01/2017 - 20:24
div class=rich-textdiv class=rich-text__contentpIn my previous a href=;about the serializer component, I touched on the basic concepts involved when serializing an object. To summarize, serialization is the combination of encoding and normalization. Normalizers simplify complex objects, like codeUser/code#xA0;or codeComplexDataDefinition/code. Denormalizers perform#xA0;the reverse operation. Using a structured array of data, they generate complex objects like the ones listed above./p pIn this article, I will focus on the Drupal integration of the Symfony serializer component. For this, I will guide you step-by-step through a module I created as an example. You can find the module at I have created a different commit for each step of the process, and this article includes a link to the code in each step at the beginning of each section. However, you can use GitHub UI to browse the code at any time and see the diff./p /divdiv class=rich-text__embedundefined/divdiv class=rich-text__content pWhen this module is finished, you will be able to transform any content entity into a Markdown representation of it. Rendering a content entity with Markdown might be useful if you wanted to send an email summary of a node, for instance, but the real motivation is to show how serialization can be important outside the context of web services./p h2Add a new normalizer service/h2 pema href=;are the changes for this step. You can browse the state of the code at this step in a href= pSymfony#x2019;s serializer component begins with a list of normalizer classes. Whenever an object needs to be normalized or serialized the serializer will loop through the available normalizers to find one that declares support for the type of object at hand, in our case a content entity. If you want to add a class to the list of eligible normalizers you need to create a new tagged service./p pA tagged service is just a regular#xA0;a href= definition/a#xA0;that comes with a href= entry/a#xA0;in the;so the a href= container/a#xA0;can find it and instantiate it whenever appropriate. For a service to be a a href= as a service/a#xA0;you need to add a codetags/code#xA0;property with a codename/code. You can also add a priority integer to convey precedence with respect to services tagged with the same name. For a normalizer to be recognized by the serialization module, you need to add the tag name emnormalizer/em./p pWhen Drupal core compiles the service container, our newly created tagged service will be added to the serializer list in what it#x2019;s called a compiler pass. a href= is the place/a#xA0;in Drupal core where that happens. The service container is then cached for performance reasons. That is why you need to clear your caches when you add a new normalizer./p pa href= normalizer/a#xA0;is an empty class at the moment. We will fix that in a moment. First, we need to turn our attention to another collection of services that need to be added to the serializer, the encoders./p h2Include the encoder for the Markdown format/h2 pema href=;are the changes for this step. You can browse the state of the code at this step in a href= pSimilarly to a normalizer, the encoder is also added to the serialization system via a tagged service. It is crucial that this service implements `EncoderInterface`. Note that at this stage, the a href=;does not contain its most important method codeencode()/code. However, you can see that it contains codesupportsEncoding()/code. When the serializer component needs to encode an structured array, it will test all the encoders available (those tagged services) by executing codesupportsEncoding()/code#xA0;and passing the format specified by the user. In our case, if the user specifies the codeapos;markdownapos;/code#xA0;format.#xA0;Then, our encoder will be used to transform the structured array into a string, because codesupportsEncoding()/code#xA0;will return codeTRUE/code. To do the actual encoding it will use the codeencode()/code#xA0;method. We will write that method later. First, let me describe the normalization process./p h2Normalize content entities/h2 pThe normalization will differ each time. It depends on the format you want to turn your objects into, and it depends on the type of objects you want to transform. In our example, we want to turn a content entity into a Markdown document./p pFor that to happen, the serializer will need to be able to:/p olliKnow when to use our normalizer class./li liNormalize the content entity./li liNormalize any field in the content entity./li liNormalize all the properties in every field./li /ol h3Discover our custom normalizer/h3 pema href=;are the changes for this step. You can browse the state of the code at this step in a href= pFor a normalizer to be considered a good fit for a given object it needs to meet a href= conditions/a:/p ulliImplement the `NormalizerInterface`./li liReturn `TRUE` when calling `supportsNormalization()` with the object to normalize and the format to normalize to./li /ul pThe process is nearly#xA0;the same as the one we used to determine which encoder to use. The main difference is that we also pass the object to normalize to the codesupportsNormalization()/code#xA0;method. That is a critical part since it is very common to have multiple normalizers for the same format, depending on the type of object that needs to be normalized. A codeNode/code#xA0;object will have different code that turns it into an structured array when compared to an codeHttpException/code. We take that into account in a href= example/a#xA0;by checking if the object being normalized is an instance of a codeContentEntityInterface/code./p h3Normalize the content entity/h3 pema href=;are the changes for this step. You can browse the state of the code at this step in a href= pThis step contains a first attempt to normalize the content entity that gets passed as an argument to the codenormalize()/code#xA0;method into our normalizer./p pImagine that our requirements are that the resulting markdown document needs to include an introductory section with the entity label, entity type, bundle and language. After that, we need a list with all the field names and the values of their properties. For example, the body field of a node will result in the name emfield_body/em#xA0;and the values for emformat/em, emsummary/em#xA0;and emvalue/em. In addition to that any field can be single or multivalue, so we will take that into consideration./p pTo fulfill these requirements, Iapos;ve written a bunch of code that deals with the specific use case of normalizing a content entity into an structured array ready to be encoded into Markdown. I don#x2019;t think that the specific code is relevant to explain how#xA0;normalization works, but Iapos;ve added code comments to help you follow my logic./p pYou may have spotted the presence of a helper method called codenormalizeFieldItemValue()/code#xA0;and a comment that says emNow transform the field into a string version of it/em. Those two are big red flags suggesting that our normalizer is doing more than it should, and that it#x2019;s implicitly normalizing objects that are not of type codeContentEntityInterface/code#xA0;but of type codeFieldItemListInterface/code#xA0;and codeFieldItemInterface/code. In the next section we will refactor the code in codeContentEntityNormalizer/code#xA0;to defer that implicit normalization to the serializer./p h3Recursive normalization/h3 pema href=;are the changes for this step. You can browse the state of the code at this step in a href= pWhen the serializer is initialized with the list of normalizers, for each one it checks if they implement codeSerializerAwareInterface/code. For the ones that do, the serializer adds a reference to itself into them. That way you can serialize/normalize nested objects during the normalization process. You can see how our codeContentEntityNormalizer/code#xA0;extends from codeSerializerAwareNormalizer/code, which implements the aforementioned interface. The practical impact of that is that we can use code$this-gt;serializer-gt;normalize()/code#xA0;from within our codeContentEntityNormalizer/code. We will use that to normalize all the field lists in the entity and the field items inside of those./p pFirst turn your focus to the new version of the a href= You can see how the normalizer is divided into parts that are specific to the entity, like the label, the entity type, the bundle, and the language. The normalization for each field item list is now done in a single line: code$this-gt;serializer-gt;normalize($field_item_list, $format, $context);/code. #xA0;We have reduced the a href=;to almost half, and the a href= complexity/a#xA0;of the class even further. This has a great impact on the maintainability of the code./p pAll this code has now been moved to two different normalizers:/p ullicodeFieldItemListNormalizer/code#xA0;contains the code that deals with normalizing single and multivalue fields. It uses the serializer to normalize each individual field item./li licodeFieldItemNormalizer/code#xA0;contains the code that normalizes the individual field items values and their properties/columns./li /ul pYou can see that for the serializer to be able to recognize our new `FieldListItemNormalizer` and `FieldItemNormalizer` objects we need to add them to the service container, just like we did for the codeContentEntityIterface/code#xA0;normalizer./p pA very nice side effect of this refactor, in addition to the maintainability improvement, is that a third party module can build upon our code more easily. Imagine that this third party module wants to make all field labels bold. emBefore the refactor/em#xA0;they would need to introduce a normalizer for content entities#x2014;and play with the service priority so it gets selected before ours. That normalizer would contain a big copy and paste of a big blob of code in order to be able to make the desired tweaks. emAfter the refactor,/em#xA0;our third party would only need to have a normalizer for the field item list (which outputs the field label) with more priority than ours. That is a great win for extensibility./p h2Implement the encoder/h2 pAs we said above the most important part of the encoder is encapsulated in the `encode()` method. That is the method in charge of turning the structured array from the normalization process into a string. In our particular case we treat each entry of the normalized array as a line in the output, then we append any suffix or prefix that may apply./p h2Further development/h2 pAt a href= point/a#xA0;the Entity Markdown module is ready to take any entity and turn it into a Markdown document. The only question is how to execute the serializer. If you want to execute it programmatically you only need do:/p div class=codepre code\Drupal::service(#x2018;serializer#x2019;)-gt;serialize(Node::load(span class=code__number1/span), #x2018;markdown#x2019;);/code/pre/div pHowever there are other options. You could declare a REST format like the a href= module/a#xA0;so you can make an HTTP request to and get a Markdown representation of the node in response (after configuring the corresponding REST settings)./p h2Conclusion/h2 pThe serialization system is a powerful tool that allows you to reform an object to suit your needs. The key concepts that you need to understand when creating a custom serialization are:/p ulliTagged services for discovery/li liHow a normalizer and an encoder get chosen for the task/li liHow recursive serialization can improve maintainability and limit complexity./li /ul pOnce you are aware and familiar with the serializer component you will start noticing use cases for it. Instead of using hard-coded solutions with poor extensibility and maintainability, start leveraging the serialization system./p /div/div

OSTraining: Drupal 8.3

Wed, 03/01/2017 - 20:23
pBig Pipe is stable/p h3Layout/h3 pField layout module is new, as is Layout Discover/p pa href= href= pa href= href= pspan style=color: #222222; font-family: 'Lucida Grande', 'DejaVu Sans', 'Bitstream Vera Sans', Verdana, Arial, sans-serif;See thenbsp;/spana href= rel=nofollow style=margin: 0px; padding: 0px; border: 0px; line-height: inherit; font-family: 'Lucida Grande', 'DejaVu Sans', 'Bitstream Vera Sans', Verdana, Arial, sans-serif; vertical-align: baseline; color: #0678be; text-decoration: none;entity display layout roadmap/aspan style=color: #222222; font-family: 'Lucida Grande', 'DejaVu Sans', 'Bitstream Vera Sans', Verdana, Arial, sans-serif;nbsp;for the next steps for this module./span/p h3Workflows/h3 pWorkflows module is new/p pa href= href= h3Authoring/h3 ul style=margin: 0px 0px 0.692em; padding: 0px 0px 0px 2em; border: 0px; line-height: inherit; font-family: 'Lucida Grande', 'DejaVu Sans', 'Bitstream Vera Sans', Verdana, Arial, sans-serif; vertical-align: baseline; list-style-position: initial; list-style-image: initial; color: #222222; li style=margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; font-family: inherit; vertical-align: baseline;a href= rel=nofollow style=margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; font-family: inherit; vertical-align: baseline; color: #0678be; text-decoration: none;#2421427: Can now drag and drop images into image fields in Quick Edit mode./a/li li style=margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; font-family: inherit; vertical-align: baseline;a href= rel=nofollow style=margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; font-family: inherit; vertical-align: baseline; color: #0678be; text-decoration: none;#2307451: Improved usability for image fields on mobile devices./a/li li style=margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; font-family: inherit; vertical-align: baseline;a href= rel=nofollow style=margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; font-family: inherit; vertical-align: baseline; color: #0678be; text-decoration: none;#2239419: CKEditor now utilizes the AutoGrow plugin to better take advantage of larger screen sizes./a/li /ul h3Migration/h3 pdfs/p pnbsp;/p

Phponwebsites: Update multiple fields using #ajax in Drupal 7 form

Wed, 03/01/2017 - 20:18
div dir=ltr style=text-align: left; trbidi=onnbsp; nbsp; nbsp;We know how to replace a field using #ajax in a form. Can we update multiple fields using #ajax in a form? Yes, we can update multiple fields using #ajax in the Drupal 7. We can achieve it using ajax_command_replace() in Drupal 7. For more details about ajax commands on Drupal 7, please visit a href= /br /h3 style=text-align: left;span style=font-weight: normal;Update fields using #ajax in a Drupal form:/span/h3divspan style=font-weight: normal;br //spanspan style=font-weight: normal;nbsp; nbsp;nbsp;/spanConsider the following example. In this example, I've created a form with fields First, Second amp; Third name. I tried to update the Second amp; Third name fields when focus out on the First name field./divbr /div class=bdrdivdiv/**/divdivnbsp;* Implments hook_form()/divdivnbsp;*//divdivfunction phponwebsites_ajax_form($form, amp;$form_state) {/divdivnbsp; $form['firstname'] = array(/divdivnbsp; nbsp; '#title' =gt; t('First name'),/divdivnbsp; nbsp; '#type' =gt; 'textfield',/divdivnbsp; nbsp; '#ajax' =gt; array(/divdivnbsp; nbsp; nbsp; 'callback' =gt; '_generate_textfield',/divdivnbsp; nbsp; nbsp; 'wrapper' =gt; 'copied-text-field',/divdivnbsp; nbsp; )/divdivnbsp; );/divdivbr //divdivnbsp; $form['secondname'] = array(/divdivnbsp; nbsp; '#title' =gt; t('Second name'),/divdivnbsp; nbsp; '#type' =gt; 'textfield',/divdivnbsp; nbsp; '#prefix' =gt; 'lt;div id=copied-secondnamegt;',/divdivnbsp; nbsp; '#suffix' =gt; 'lt;/divgt;',/divdivnbsp; );/divdivbr //divdivnbsp; $form['thirdname'] = array(/divdivnbsp; nbsp; '#title' =gt; t('Third name'),/divdivnbsp; nbsp; '#type' =gt; 'textfield',/divdivnbsp; nbsp; '#prefix' =gt; 'lt;div id=copied-thirdnamegt;',/divdivnbsp; nbsp; '#suffix' =gt; 'lt;/divgt;',/divdivnbsp; );/divdivbr //divdivnbsp; $form['submit'] = array(/divdivnbsp; nbsp; '#type' =gt; 'submit',/divdivnbsp; nbsp; '#value' =gt; 'Submit'/divdivnbsp; );/divdivbr //divdivnbsp; return $form;/divdiv}/divdivbr //divdivfunction _generate_textfield($form, amp;$form_state) {/divdivnbsp; if (!empty($form_state['values']['firstname'])) {/divdivnbsp; nbsp; $form['secondname']['#value'] = nbsp;$form_state['values']['firstname'];/divdivnbsp; nbsp; $form['thirdname']['#value'] = nbsp;$form_state['values']['firstname'];/divdivnbsp; }/divdivnbsp; $commands = array();/divdivnbsp; $commands[] = ajax_command_replace('#copied-secondname', drupal_render($form['secondname']));/divdivnbsp; $commands[] = ajax_command_replace('#copied-thirdname', drupal_render($form['thirdname']));/divdivnbsp; return array('#type' =gt; 'ajax', '#commands' =gt; $commands);/divdiv}/div/divdiv/div/divdivbr //divdivWhen you tried to execute the above codes, it'll populate the same name on the other 2 fields. It looks likes the below image:/divdivbr //divdiv class=separator style=clear: both; text-align: center;a href= imageanchor=1 style=margin-left: 1em; margin-right: 1em;img alt=Update multiple form fields using #ajax in Drupal 7 border=0 src= title=Update multiple form fields using #ajax in Drupal 7 //a/divdivbr //divdivbr //divdivNow I hope you know how to populate multiple fields using #ajax in Drupal 7 forms./divdiv itemscope= itemtype= articles:/bbr /ba href= itemprop=relatedLinkRemove speical characters from URL alias using pathauto module in Drupal 7/a/bbr /ba href= itemprop=relatedLinkAdd new menu item into already created menu in Drupal 7/a/bbr /ba href= itemprop=relatedLinkAdd class into menu item in Drupal 7/a/bbr /a href= itemprop=relatedLinkbCreate menu tab programmatically in Drupal 7/b/abr /a href= itemprop=relatedLinkbAdd custom fields to search api index in Drupal 7/b/abr /a href= itemprop=relatedLinkbClear views cache when insert, update and delete a node in Drupal 7/b/abr /a href= itemprop=relatedLinkbCreate a page without header and footer in Drupal 7/b/abr /a href= itemprop=relatedLinkbLogin using both email and username in Drupal 7/b/abr /a href= itemprop=relatedLinkbDisable future dates in date pop-up calendar Drupal 7/b/a/div/div

Sooper Drupal Themes: It's The Details That Make A Good Product Great: Glazed Theme 2.6.3 And Builder 1.1.2 Updates!

Wed, 03/01/2017 - 17:53
div class=field-blog-image img typeof=foaf:Image class=img-responsive src= width=1140 height=403 / /div div class=field-body div class=az-element az-row row az-row--sm data-az-id=b2 data-azat-device=sm data-azb=az_row data-azcnt=true style= div class=az-element az-ctnr az-column col-sm-12 data-az-id=b3 data-azb=az_column data-azcnt=true style= div class=az-element az-text data-az-id=b4 data-azb=az_text data-azcnt=true style= pIt's the details that make the difference between a good product and a great product. The past 6 weeks were spent on refining the design patterns that constitute the emGlazed/em branding and products. The result is a product that feels tight and inspires confidence. Just 2 years young, Glazed Builder is the new kid on the block but the progress since 1.0 has never slowed down. With the seeminlgy everlasting lack of a href=//www.sooperthemes.comqualitynbsp;Drupal themes/a for Drupal 7 and especially 8 I think that with Glazed Theme and Glazed Builder we have the platform that is needed to really fuse Drupal's powerful backend with beautiful designs in a maintainable, responsible way. In the future we'll be working hard on realizing this ambition, and publishing new designs for different niches./p /div div class=az-element az-row row az-row--sm data-az-id=b5 data-azat-device=sm data-azb=az_row data-azcnt=true style= div class=az-element az-ctnr az-column col-sm-3 data-az-id=b6 data-azat-width=1/4 data-azb=az_column data-azcnt=true style=/div div class=az-element az-ctnr az-column col-sm-6 data-az-id=b7 data-azat-width= 1/2 data-azb=az_column data-azcnt=true style= div class=az-element az-button data-az-id=b8 data-azat-block=btn-block data-azat-link= data-azat-link_target=_blank data-azat-size=btn-lg data-azat-title=Try Glazed Builder Now data-azat-type=btn-primary data-azb=az_buttona class=btn btn-primary btn-lg btn-block href= style= target=_blank type=buttonTry Glazed Builder Now/a/div div class=az-element az-text data-az-id=b9 data-azb=az_text data-azcnt=true style= p style=text-align: center;smallThe Admin demo is free, no registration required!/small/p /div /div div class=az-element az-ctnr az-column col-sm-3 data-az-id=b10 data-azat-width= 1/4 data-azb=az_column data-azcnt=true style=/div /div div class=az-element az-text data-az-id=b11 data-azb=az_text data-azcnt=true style= h3 class=st-title bg-glazedBetter Controls Positioning/h3 /div div class=az-element az-image text-center data-az-id=b12 data-azat-el_class=text-center data-azat-height= data-azat-image=// data-azat-style=margin-bottom:30px;border-top-width:1px;border-bottom-width:1px;border-left-width:1px;border-right-width:1px;border-color:#999999;border-style:solid; data-azat-width= data-azb=az_imageimg alt= src=// style=margin-bottom:30px;border-top-width:1px;border-bottom-width:1px;border-left-width:1px;border-right-width:1px;border-color:#999999;border-style:solid; title=/div div class=az-element az-text data-az-id=b13 data-azb=az_text data-azcnt=true style= pGlazed Builder is different from consumer tools like Wix and Squarespace because it doesn't put limitations on where you place elements. Our grid system is based on bootstrap and our tools allow you to use Bootstrap elements like you would if you were custom coding. You're coding without having to write or see the code. The consequence was that sometimes nested rows, tabs, accordeons etc. had so many controls that they could overlap.nbsp;/p pThis problem is was not easily solved, that is probably why you find very few drag and drop builders without some restrictions to where you place your elements. With this week's release the problem is no longer a problem. We're introducing a new algorithm for controls positioning. Thanks to advancements in browser APIs it's now feasiblenbsp;to do hit detection efficiently. This means we create space for icons when necessary, but we leave the layout intact wherenbsp;we can. This doesn't just solve the emoverlapping controls /emproblem but also creates a much closernbsp;WYSIWYG experience. nbsp;/p /div div class=az-element az-text data-az-id=b14 data-azb=az_text data-azcnt=true style= h3 class=st-title bg-glazedPerformance Improvements for Theme and Builder/h3 pWith Mobile performance more important than ever it's our responsibility to be vigilant about a;tab=mobile rel=nofollowperformance/a and take action when we see opportunity for improvement. One such improvement is our menu system. Our unique mobile menu provides an unparalleled navigation experience, and uses a bit of JavaScript to manage this. This caused a menu flickering on long page because the menu initiation happened close to the bottom of the page. This code was moved to the beginning of the page to speed up the menu render./p pOther improvements have been made by replacing jQuery with browser native APIs, partly using the new knowledge that was gained from creating our unique controls positioning algorithm.nbsp;/p /div div class=az-element az-text data-az-id=b15 data-azb=az_text data-azcnt=true style= h3 class=st-title bg-glazedMaterial Style Box Shadows/h3 /div div class=az-element az-text data-az-id=b16 data-azb=az_text data-azcnt=true style= pMaterial Design box shadows are now available in the style tab using a simple slider. The slider represents the surface level metaphor used in Material Design's a and it renders elegant and simple shadows that are taken directly from Google's recommendations about drop shadows in Material Design..nbsp;/p /div div class=az-element az-text data-az-id=b17 data-azb=az_text data-azcnt=true style= h3 class=st-title bg-glazedReady for Drupal 8/h3 pWe're currently developing the Drupal 8 version of the a installation profile/a and we are starting to upgrade our theme and modules.​ We previsouly aimed to release our Drupal 8 beta alongside the Drupal 8.3 release, but now that the D8media initiative has postponed their work to be released in Drupal 8.4 we are relaxing this deadline./p pWe're taking our time to make the right decisions about our installation profile, our theme, our drag and drop builder, and all the thousands of lines of code that make up our themes and demo websites. Expect to see Drupal 8 beta products somewhere after the 8.3 release of Drupal core and before the 8.4 release./p /div div class=az-element az-image text-center data-az-id=b18 data-azat-el_class=text-center data-azat-height= data-azat-image=// data-azat-style=margin-bottom:30px;border-top-width:0px;border-bottom-width:2px;border-left-width:2px;border-right-width:2px;border-color:#01b0ef;border-style:solid; data-azat-width= data-azb=az_imageimg alt= src=// style=margin-bottom:30px;border-top-width:0px;border-bottom-width:2px;border-left-width:2px;border-right-width:2px;border-color:#01b0ef;border-style:solid; title=/div div class=az-element az-text data-az-id=b23 data-azb=az_text data-azcnt=true style= p style=text-align: center;a /div div class=az-element az-text data-az-id=b25 data-azb=az_text data-azcnt=true style= pFor more details about this week's updates:/p ul lia href=//;Glazed Theme/a/li lia Glazed Builder/a/li /ul ul/ul ul/ul ul/ul /div /div /div div class=az-element az-row row az-row--sm data-az-id=b26 data-azat-device=sm data-azb=az_row data-azcnt=true style= div class=az-element az-ctnr az-column col-sm-3 data-az-id=b27 data-azat-width=1/4 data-azb=az_column data-azcnt=true style=/div div class=az-element az-ctnr az-column col-sm-6 data-az-id=b28 data-azat-width= 1/2 data-azb=az_column data-azcnt=true style= div class=az-element az-button data-az-id=b29 data-azat-block=btn-block data-azat-link= data-azat-link_target=_blank data-azat-size=btn-lg data-azat-title=Try Glazed Builder Now data-azat-type=btn-primary data-azb=az_buttona class=btn btn-primary btn-lg btn-block href= style= target=_blank type=buttonTry Glazed Builder Now/a/div div class=az-element az-text data-az-id=b30 data-azb=az_text data-azcnt=true style= p style=text-align: center;smallThe Admin demo is free, no registration required!/small/p h2/h2 /div /div div class=az-element az-ctnr az-column col-sm-3 data-az-id=b31 data-azat-width= 1/4 data-azb=az_column data-azcnt=true style=/div/div /div div class=field-content-banner glazed-util-float-right float-right a href= typeof=foaf:Image class=img-responsive src= width=300 height=140 alt= //a /div

Drupal blog: Drupal 8.3.0-rc1 is available for testing

Wed, 03/01/2017 - 17:50
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item evenpThe a href=/project/drupal/releases/8.3.0-rc1first release candidate for the upcoming Drupal 8.3.0 release/a is now available for testing. Drupal 8.3.0 is expected to be released April 5./p !--break--div style=text-align: center; margin: 0 0 2em 0;a class=link-button href=/project/drupal/releases/8.3.0-rc1Download Drupal-8.3.0-rc1/a/div p8.3.x includes new experimental modules for workflows, layout discovery and field layouts; raises stability of the BigPipe module to stable and the Migrate module to beta; and includes several REST, content moderation, authoring experience, performance, and testing improvements among other things. You can read a detailed list of improvements in the announcements of a href=/project/drupal/releases/8.3.0-alpha1alpha1/a and a href=/project/drupal/releases/8.3.0-beta1beta1/a./p h2What does this mean to me?/h2 h3For Drupal 8 site owners/h3 pThe a href=/project/drupal/releases/8.2.6final bugfix release of 8.2.x/a has been released. A final a href= release window for 8.2.x/a is scheduled for March 15, but strong8.2.x will receive no further releases following 8.3.0/strong, and sites should prepare to a href= from 8.2.x to 8.3.x/a in order to continue getting bug and security fixes. Use code class=language-phpupdate.php/code to update your 8.2.x sites to the 8.3.x series, just as you would to update from (e.g.) 8.2.4 to 8.2.5. You can use this release candidate to test the update. (Always back up your data before updating sites, and do not test updates in production.)/p pimg alt=Drupal 8 release cycle diagram, showing the 8.3.x alpha/beta and RC phases beginning as 8.2.x nears its end in October, and 8.2.x support ending when 8.3.x is released. src= //p h3For module and theme authors/h3 pDrupal 8.3.x is backwards-compatible with 8.2.x. However, it does include a href= API changes/a and a href= changes to experimental modules/a, so some minor updates may be required. a href= the change records for 8.3.x/a, and test modules and themes with the release candidate now./p h3For translators/h3 pa href= text changes were made since Drupal 8.2.0/a. automatically offers these new and modified strings for translation. Strings are frozen with the release candidate, so translators can now update translations./p h3For core developers/h3 pAll outstanding issues filed against 8.2.x were automatically migrated to 8.3.x. Future bug reports should be targeted against the 8.3.x branch. 8.4.x will remain open for new development during the 8.3.x release candidate phase. For more information, a href= the release candidate phase announcement/a./p h3Your bug reports help make Drupal better!/h3 pRelease candidates are a chance to identify bugs for the upcoming release, so help us by a href= the issue queue/a for any bugs you find, and filing a new issue if your bug has not been reported yet./p /div/div/div