Planet Drupal

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

Lullabot: Should you Decouple?

Wed, 04/29/2015 - 20:00
pOne of the major topics of discussion in the Drupal community has been decoupled (or headless) Drupal. Depending on who you ask, it’s either the best way to build a href= user experiences/a, or a href= short of a pandemic/a. But what exactly is a decoupled architecture?/p

Midwestern Mac, LLC: Developing for Drupal with Vagrant and VMs

Wed, 04/29/2015 - 16:21
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedpMany blog posts have outlined the a href= of using VMs/a (Virtual Machines) for local Drupal development instead of either using native PHP and Apache, or a bundled environment like MAMP, XAMPP, or Acquia Dev Desktop. The advantages of using virtualization (usually managed by Vagrant) are numerous, but in certain cases, you can make a good argument for sticking with the traditional solutions./p pIf you'd like to take the dive and start using virtualized development environments, or if you're already using Vagrant and VirtualBox or some other VM environment (e.g. VMWare Fusion or Parallels Desktop), how do you optimize local development, and which pre-bundled Drupal development VM will be best for emyou/em and emyour team/em?/p h2 a id=user-content-criteria-for-the-perfect-local-development-environment class=anchor href=#criteria-for-the-perfect-local-development-environment aria-hidden=truespan class=octicon octicon-link/span/aCriteria for the Perfect Local Development Environment/h2 pThese are the criteria I use when judging solutions for local Drupal development (whether virtualized or traditional):/p ulliShould be strongsimple/strong and easy to set up/li liShould be strongfast/strong by default/li liShould be strongflexible/strong: ulliShould work with multiple providers; VirtualBox is free, but VMWare can be much faster!/li liShould allow configuration of the PHP version./li liShould work with your preferred development workflow (e.g. drush, makefiles, manual database sync, etc.)/li liShould prevent filesystem friction (e.g. permissions issues, slow file access speeds, etc.)/li liShouldn't have hardcoded defaults/li /ul/li liShould be strongcomplete/strong: ulliShould work without requiring a bunch of extra plugins or 3rd party tools/li liNo extra languages or libraries should be required (why install Ruby gems, npm modules, etc. unless you need them for your particular project?)/li /ul/li liShould be Free and Open Source/li liShould include all the tools you need, but allow you to disable whatever you don't need (e.g. XHProf, Apache Solr, etc.)/li liShould work on Windows, Mac, and Linux with minimal or no adjustment/li liShould be deployable to production (so your local dev environment matches prod emexactly/em)/li /ulpA lot of these points may have more or less importance to a particular team or individual developer. If you're a die-hard Mac user and don't ever work with any developers on Windows or Linux, you don't need to worry about Windows support. But some of these points apply to everyone, like being emfast/em, emsimple/em, and emflexible/em./p /div/div/div

Modules Unraveled: 134 Deciding when to upgrade to Drupal 8 with Kristof Van Tomme and Peter Kohan - Modules Unraveled Podcast

Wed, 04/29/2015 - 14:30
div class=field field--name-field-image field--type-image field--label-hiddendiv class=field__itemsdiv class=field__item evenimg typeof=foaf:Image src= width=350 height=176 alt=Photo of Kristof Van Tomme and Peter Kohan //div/div/divspan class=submitted-byPublished: Wed, 04/29/15/spandiv class=field field--name-field-podcast-file field--type-file field--label-hiddendiv class=field__itemsdiv class=field__item evendiv class=mediaelement-audioaudio src= class=mediaelement-formatter-identifier-1430316981-0 controls=controls /audiodiv class=mediaelement-download-linka href= this episode/a/div/div/div/div/divdiv class=field field--name-body field--type-text-with-summary field--label-hiddendiv class=field__itemsdiv class=field__item even ulliWhat is liWhen did you put the site together? ulliToday/li /ul/li liHow were you offering the service before the site was up? ulliTalk about MVP/li /ul/li liWhy did you guys create this service? ulliBuild a more direct communication channel for module maintainers - Mailing list (module devs talk to people using module/li liInitiative to get out the catch 22 - modules aren’t ready, so you can’t upgrade, you don’t upgrade so the modules don’t get money to be upgraded./li /ul/li liDoes it cost anything? ulliNope - it’s free/li /ul/li liAre you planning to monitize the site in any way? ulliWe expect a lot of site owners will be looking for a way to upgrade their website, if they don’t yet have an agency, we can help them find a good agency. If this evolves how we imagine, this could fuel the sales pipeline for our consultancy and a few selected partners. We are not going to go hardcore salesy on this, but put in links for module work and 2for1 discounts and hopefully some of those will convert into customers for us or our partners./li /ul/li liHow does it work? What do I have to do to track a site? ulliAs simple as possible, conscious choice to not make it a module - just copy paste your module page/li /ul/li liHow many people have signed up so far? ulliWe’ve got a total of 73 sites now, some from the same people - after Drupalcon LA we expect that to become a few hundred./li /ul/li liWhat do you have planned for the future of the site? ulliThe community misses a permission marketing channel for module developers. We would like to let site owners sign up for important information about the modules they use through a push communication channel. There is a lot of talk in the community that we are not getting any support from site owners for the development of D8, but we’ve made it almost impossible for them to stay up to date. There is no way they are going to start reading the issue queues of modules on regular basis./li /ul/li liI took a look at the site and saw something called 2for1 - Give to Get. What’s that? ulliThis is part of the strategy we want to use to monetise the platform: we offer our customers a 2 dollar discount on their future D8 project for every dollar they invest in helping Drupal 8 get out of the door. This gets us more business and brings outside funding into the community. For too long we’ve been giving money from one developer’s pocket to the next developer’s pocket. We hope we can change that this way. We are inviting other consultancies to join us in this campaign, if you want to join, you can become a partner in the campaign./li /ul/li /ulh2Special Thanks!/h2 pThank you a href=http://fourkitchens.comFourKitchens/a for the DrupalCon Ticket and a href=http://www.kalamuna.comKalamuna/a for helping offset my travel expenses! You guys (and gals) are all awesome!/p /div/div/divdiv class=field field--name-field-items-mentioned field--type-link-field field--label-abovediv class=field__labelEpisode Links:nbsp;/divdiv class=field__itemsdiv class=field__item evena href= rel=nofollow target=_blankKristof on class=field__item odda href= rel=nofollow target=_blankKristof on Twitter/a/divdiv class=field__item evena href= rel=nofollow target=_blankKristof on Skype - kvantomme/a/divdiv class=field__item odda href= rel=nofollow target=_blankKristof on LinkedIn/a/divdiv class=field__item evena href= rel=nofollow target=_blankPeter on class=field__item odda href= rel=nofollow target=_blankPeter on Twitter/a/divdiv class=field__item evena href= rel=nofollow target=_blankPeter on LinkedIn/a/divdiv class=field__item odda href= rel=nofollow target=_blankPeter on Skype - kenya1hu/a/divdiv class=field__item evena href= rel=nofollow class=field field--name-field-tags field--type-taxonomy-term-reference field--label-abovediv class=field__labelTags:nbsp;/divdiv class=field__itemsdiv 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/upgrading typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=Upgrading/a/divdiv class=field__item evena href=/planet-drupal typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=planet-drupal/a/div/div/div

Jim Birch: Drupal 7: Organizing with Field Group

Wed, 04/29/2015 - 13:30
a href= title=Drupal 7: Organizing with Field Groupimg src= width=620 height=465 alt=Lego Uncle Jim and the Swedish Cats title=Lego Uncle Jim and the Swedish Cats //abr pThe a href= Field Group/a module has been on my Essential Drupal list since I first learned about it, and with 200,000 installs, I am certainly not the only one./p pField Group lets you add the common a href= /afield wrappers on their own so you can organize not only the display of the nodes through the Entity View Modes, or Display Suite on the Manage Display tab, but it also lets you organize fields as they are displayed to the administrator on the Add and Edit screens through the Manage Fields tab./p pField Groups allows for adding and configuring of the following field types:/p ulliFieldsets/li liHorizontal tabs/li liVertical tabs/li liAccordions/li liDivs/li liMultipage steps/li liHTML5 elements/li liHTML elements/li /ulpIf you are using a default Admin theme like Seven, adding and configuring the default Fieldsets, tabs and accordions make your content configuration screens blend in perfectly since they are already styled.  You can also take your node add and edit screens to the next level by theming DIV's, or any HTML/HTML5 elements if you are using your front end theme for administration screens, or a custom admin theme./p pa href= title=Drupal 7: Organizing with Field GroupRead more/a/p Cross Browser Visual Regression Tests With Shoov

Tue, 04/28/2015 - 23:00
pMaintaining visual regression tests can be hard, but the more tests we write for our projects, the more we see the tremendous power it provides in terms of QA and monitoring our sites./p pOne daunting task each developer hates (and often avoids) is validating their markup on multiple browsers. All of Gizra#39;s developers use either Mac or Ubuntu on their machines, so the line to the quot;IE computerquot; on the far end of the office is getting long. Way too long./p pAnd honestly - after our poor developers validated their work once, if we#39;d ask them to do it again. And again. And again... we#39;d probably be left without any./p pDevelopers moral shouldn#39;t be underestimated!/p pa href=/content/shoov-ui-regression/Shoov/a means quot;Againquot; in Hebrew for this very reason.Go ahead and jump to our a href= repo/a which now has cross browser tests. Writing your tests once - but testing on multiple platforms and browsers is a embig/em win./p div class=thumbnail img src= div tested by BrowserStack on Windows7, IE11, with 1024x780 resolution/div /div pa href= reading…/a/p

DrupalCon News: Come to the Community Summit

Tue, 04/28/2015 - 18:50
div class=field field--name-body field--type-text-with-summary field--label-hiddendiv class=field__itemsdiv class=field__item evenpemSubmitted by:  William Estrada - DCon LA Community Summit volunteer/em/p pDo you love your local Drupal community?  Do you want to grow Drupal adoption in your hometown? Do you take satisfaction is providing mentorship or are you looking to pay it forward after being mentored? Are you the person who always raises their hand to help others and wants to get involved?/p/div/div/div

Drupalize.Me: How to Contribute to Translations in Drupal Projects

Tue, 04/28/2015 - 14:02
div class=field field-name-body field-type-text-with-summary field-label-hidden text-content text-secondarydiv class=field-itemsdiv class=field-item evenpLet’s take a brief look at how translation contributions work in Drupal. This written tutorial is based on the free video, Translation in Drupal./p /div/div/divdiv id=comment-wrapper-nid-2186/div

Jim Birch: Essential Drupal: Global Redirect Module

Tue, 04/28/2015 - 13:00
a href= title=Essential Drupal: Global Redirect Moduleimg src= width=620 height=465 alt=Lego Uncle Jim is Global title=Lego Uncle Jim is Global //abr pThe Global Redirect module ensures that we will have the best possible technical output from Drupal for Search Engine Optimization (SEO).  It is available for Drupal 6 and Drupal 7, and it looks like they have been hard at work building it for Drupal 8./p pFor years, the best practice for any site is to make the URLs keyword rich and friendly so the user knows what to expect when they visit.  So we change Drupal's Clean URL settings from to and then we change Pathauto's settings from to pWhat we are missing is that those original URLs still remain live on the internet, and can be considered duplicate content, a detriment to good SEO.  Global Redirect automatically sets up 301 Redirects for both of the old URL schemes, to the new friendly URL./p pThe same goes for the trailing slash.  This module removes (or adds if you so choose) the trailing slash, so there will be only one canonical URL living between and pThe last big option is the home page.  In Drupal's Site Information, we set which node we want as the site's homepage.  Global Redirect makes sure that we only have one page indexed, rather than and pThere are quite a few more options that can be configured at:/p pa href= title=Essential Drupal: Global Redirect ModuleRead more/a/p

ERPAL: 6 steps to avoiding unrealistic budgets and deadlines in projects

Tue, 04/28/2015 - 12:50
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item evenpIn our preceding post we focused on the topic of responsibilities and communication and the importance of questions that help to clarify duties and responsibilities. Today we’ll deal with unrealistic deadlines and budgets – and how to avoid them./p pAn 800-hour project is not finished in a day, not even with 100 programmers. The completion time of a project is derived from the sum of the times estimated for the individual requirements. In order to do this reliably, it’s essential to know in detail what has to be done. This is why requirement engineering is vital at the beginning of a project. Even though a deadline (completion date) is determined by the sum of expenses, it’s important to note that not everything in a project can run in parallel, meaning that more is not always faster. A project plan for the overall project and for every single sprint will help you to control the progress, expenses and deadlines./p p class=rtecentera href=/sites/default/files/unrealistische_budget_und_deadlines.pngimg alt= src=/sites/default/files/resize/unrealistische_budget_und_deadlines-464x210.png style=height:210px; width:464px width=464 height=210 //a/p h31) What task requires what expertise?/h3 pNot every job requires the same expertise. In addition to technical skills, there are often technical requirements that are necessary to reflect specific customer business processes in the software. These requirements should be stated in the individual tasks. It’s part of the project management to make this categorization a responsibility of the developer. If you optimize your project plan, for example with a Gantt chart, you can plan resources such as time, money and people at the beginning of a project and validate the plan accordingly./p h32) Which developers can do which tasks?/h3 pOne developer is not equal to every other developer. Everyone in the team has specific competencies: you get selected for a project because your skills fit well. Even in software development, it’s rarely the case that everyone all has the same expertise. A good Drupal developer is not necessarily a good site builder nor a good themer. You might make this assumption when hiring a person, but you’ll be disappointed if you don’t verify his/her skills. Therefore, you should be able to associate the expertise of your team with the specific tasks on hand. A good way to illustrate the dependencies of tasks is with a Gantt chart: for realistic budgeting you need a detailed plan so that you know, as a provider, what you have to achieve over which period of time. On the customer side, a detailed plan with clear time estimations helps you know what you’re getting for your money so you can rest assured that all the features – such as deadline, budgets, prices and specifications – are realistic. This is necessary because you want to achieve something positive with your project and, thus, have to rely on the data from good and realistic planning. The deadline is determined by adding up the times required by each developer in the team, taking the dependencies of each task into account. Plan in a fixed buffer for project management, quality assurance and communication./p pProject management cannot be hurried. It costs time and money, but if done right, it’s worth it. When the project’s time and budget are reaching the end without the certainty that the project itself is facing a successful end, the quality inevitably suffers. So: plan realistically to protect your team from unnecessary stress and to provide your customer with the assurance that he can count on your word. This is an essential foundation for any successful project./p h33) Done does not equal completed/h3 pEven when all the development work is done in your project, it doesn’t mean that the project is really completed. Now, when acceptance is imminent, the integration of all the single tasks needs to be (double-)checked. When deploying the project to acceptance you should definitely first check internally whether all benefits promised in the concept were actually implemented and tested. This usually happens on a staging system to prepare a customer presentation. Optimally, for each task you should also be able to demonstrate that you’ve fulfilled it with the promised performance and validated it by testing for proper execution. Only once this internal process is successfully completed should the project results be presented to the client for approval. Unfortunately, it’s often overlooked that the cooperation of the customer is required: your customer needs to test his specification accordingly and, hence, accept the project if there are no more serious bugs. Working cleanly and in detail is even more important at the beginning of the design phase. This becomes evident not just in the acceptance: if there are only minor bugs that don’t prevent the functioning of the concept, the project must be accepted with a bug report, which will then be attached to the acceptance report./p pSo, try desperately to stick to the following points:/p h34) Only provide what was actually tested/h3 pAlthough you have the right to repair, it looks unprofessional if you provide your customer with a project result that has obvious errors. This casts the project team in a poor light. So, write down what you’ve tested. Key points about each task and the benefits of the concept are sufficient. Clear acceptance criteria will help prove that all the requirements have been fulfilled/p h35) Involve your clients in the acceptance and prepare it well/h3 pNothing is worse and more unproductive than if you provide your customer with the results of the project after three months of silence. Certainly, you may argue that you’ve just been doing focused work, but communication is simply essential to managing expectations. Your customer will feel lost if you don’t communicate at all. If you don't communicate recent status updates in recurring meetings, your customer will create his own expectations regarding the progress. So, communicate and show individual project results continuously – but only when they’re also really presentable. Engage your clients in the purchase process and show a demo of what the software can do and how that fits into the concept you created earlier, so your customer isn’t left with doubts and ambiguities but can ask you directly. Questions and problems can then be discussed immediately – and resolved./p h36) Collect all the aspects that your customer wants to be changed/h3 pSure, there will be functions and requirements that must be implemented in the software before it can go into production. Collect all these points in an initial protocol. Then, evaluate the different points, examine the requirement changes (change requests) and determine which of the points are still outstanding to the concept. Those still owing must either be implemented as soon as possible or appear in the internal quality assurance. Actually, they shouldn’t be there at all if you’ve already tested internally against the specifications! Change requests are then processed after acceptance. The same applies to minor bugs that don’t affect the functionality./p pBoth parties should have the same goal: To achieve (partial) acceptance and thus arrive at a decision that a project milestone is completed, after which work can continue and the software enhanced with other useful features. The project is taken forward after each individual milestone, with partial acceptances for single milestones and checks against the project objectives. This has the nice side effect that your customers will become familiar with the software in small pieces and you’ll get immediate feedback on whether the development is going in the right direction or not. So you see :/p pstrongAn agile approach doesn’t mean that there’s no concept! Quite the opposite – planning is important. /strong/p pIn the planning phase, particularly in terms of effort and deadlines, you have to count on further work after acceptance of the project./p pThe next post will deal with how to manage agile projects with structure and control./p h3Other blog posts of this series:/h3 pa href= 3 questions help you to ensure satisfactory project results/a/p pa href= objectives in projects with these 3 rules/a/p pa href= projects for a fixed price? Yes you can!/a/p pa href= things to consider when creating project specifications/a/p pa href= rules to follow to promote communication in projects/a/p /div/div/div

Amazee Labs: Drupal 7 total language fallback

Tue, 04/28/2015 - 09:22
span class=field field-node--title field-name-title field-type-string field-label-hiddenDrupal 7 total language fallback/spandiv class=field field-node--field-lead field-name-field-lead field-type-text-long field-label-hidden div class=field-items div class=field-itemh2Reasons for language fallback/h2 pLet's assume you have a website divided by countries. The site structure is:/p ulliGlobal (en, de, fr)/li liGermany (de)/li liFrance (fr)/li liSwitzerland (de, fr)/li /ulpYou have your content translated to three languages. Normally, this works, but there could be cases when you need languages per country. Words might have a slightly different meaning from country to country (a href= target=_blankexamples/a) or spelling might be different (a href= target=_blanken-US vs en-GB/a, or using ß in de-DE vs ss in de-CH). Or, for example, the Contact us page can contain a country specific information - locations./p pSo, the site structure can be turned to:/p ulliGlobal (en, de, fr)/li liGermany (de-DE)/li liFrance (fr-FR)/li liSwitzerland (de-CH, fr-CH)/li /ulpThis can bring a translation nightmare until you have a language fallback ;)/p pimg alt=Languages data-editor-file-uuid=743faf06-7154-404c-b929-41361034841e height=1018 src= width=1808 //p pHaving the language fallback, you would only translate strings/content to the base languages and, in special cases, you may also translate to country languages./p pFortunately, there is a module for that. The a href= target=_blankLanguage fallback/a./p /div /div /div div class=field field-node--body field-name-body field-type-text-with-summary field-label-hidden div class=field-items div class=field-itemh2Language fallback 7.x-1.x/h2 pThe first version of the module provides language fallback only for locale strings (strings that are passed through the span style=font-family: quot;Courier Newquot;, Courier, monospace;t()/span function). After the module installation, you can find the Language fallback option at the language edit form./p pimg alt=Edit language data-editor-file-uuid=30e3d851-10f2-49e4-8060-96c216c76ed8 height=914 src= width=1808 //p pIf a string translation is missing for the span style=font-family: quot;Courier Newquot;, Courier, monospace;de-CH/span language, the translation from the fallback language (span style=font-family: quot;Courier Newquot;, Courier, monospace;de/span) will be used in this case./p h3How the locale fallback works/h3 pThere is a a href= target=_blankstrings override/a feature in Drupal 7 core. Basically, you can define translations for some strings via variables. For example, you can put something like that into your span style=font-family: quot;Courier Newquot;, Courier, monospace;settings.php/span file:/p pspan style=font-family: quot;Courier Newquot;, Courier, monospace;$conf['locale_custom_strings_de-CH']['']['Home'] = 'Startseite';/span/p pWhile this possibility is used really rarely, the Language fallback module transforms it into the real power. It saves instances of the span style=font-family: quot;Courier Newquot;, Courier, monospace;localeWithFallback/span class to span style=font-family: quot;Courier Newquot;, Courier, monospace;locale_custom_strings_*/span variables. The span style=font-family: quot;Courier Newquot;, Courier, monospace;localeWithFallback/span implements span style=font-family: quot;Courier Newquot;, Courier, monospace;ArrayAccess/span, thus it can return string translations automagically./p h2Language fallback 7.x-2.x/h2 pWe also want to have the language fallback for our content translated via the a href= target=_blankEntity Translation/a module. The second version of the Language fallback module provides this feature./p pimg alt=Language fallback settings data-editor-file-uuid=eaf812a5-c9c3-412c-994f-798088bf3cfe height=918 src= width=1808 //p pThis option enables the translation fallback for entities on the field level. For example, if an entity does not have a certain field translated to the span style=font-family: quot;Courier Newquot;, Courier, monospace;de-CH/span language, the span style=font-family: quot;Courier Newquot;, Courier, monospace;de/span translation of this field will be used for the entity rendering./p h3How the entity translation fallback works/h3 pActually, this ability is provided by the core Locale module. The Language fallback module just hooks into the process./p pHere is the call stack describing how it works:/p ullifield_language()/li lihook_field_language_alter()/li lilocale_field_language_alter()/li lilocale_field_language_fallback()/li lilanguage_fallback_get_candidates()/li lihook_language_fallback_candidates_alter()/li lilanguage_fallback_language_fallback_candidates_alter()/li /ulpThe last function does the job./p h3Language fallback chains/h3 pThat's another feature only available from language fallback 7.x-2.x./p pimg alt=Edit language data-editor-file-uuid=206ca825-6f48-4199-b111-17effe46ca55 height=1192 src= width=1808 //p pNow, on the language edit form, you can define several fallback languages in a particular order./p h2Language fallback 7.x-2.x-amazee/h2 pIf you try to use the language-per-country workflow with the Language fallback module, the first thing you'll miss is the i18n support. The a href= target=_blankInternalization/a module helps us to deal with the translation of menu links, field labels, panels, etc. So, we started work in this direction and have prepared a patch./p pAfter the patch was tested, we found that it would be quite useful to have the fallback information displayed right on the translation overview pages. We implemented this feature, too./p pBefore:/p pimg alt=I18n overview, no patch data-editor-file-uuid=6972c910-44dc-4310-8d37-5592d0423a6a height=1096 src= width=1808 //p pAfter:/p pimg alt=I18n overview with patch data-editor-file-uuid=f4e18cfe-fe66-40ef-b31b-2760db9c1ea7 height=1096 src= width=1808 //p pWe've submitted a patch containing both improvements to a href= target=_blank#2322883: Add support for i18n strings/a./p pAfter using the new overview pages for some time, we decided to also improve the entity translation overview pages, since it improves the usability for content editors./p pimg alt=Entity translations overview data-editor-file-uuid=a852ebc9-a4f0-48ce-a906-6f0955fbd6ab height=1088 src= width=1808 //p pThis developed into another patch a href= target=_blank#2444203: Show fallback information on the translation overview/a. This time, for the Entity translation module. (Be sure to enable the Show fallback statuses on overview pages checkbox on the admin/config/regional/entity_translation page after you have applied the patch.)/p h2Language fallback for path aliases/h2 pThere was an issue we have met implementing language fallback on our projects. The a href= target=_blankPathauto/a module only generates aliases for the existing node translations. To fill that gap we have created the a href= target=_blankPath alias force/a module. It forces creation of aliases for all languages. Furthermore, it supports language_fallback, so aliases respect the fallback rules which is nice./p h2Total language fallback/h2 pHaving all these patches applied, we have the complete solution for the language fallback on Drupal 7 websites. Now the language-per-country workflow can be used for real projects./p pBTW. If you don't want to apply patches, you can use the Amazee Labs repositories which contain all required changes:/p ullia href= target=_blank lia href= target=_blank /ulpLet us know if you have any issues!/p /div /div /div simpleTest with Behat for Drupal 8

Mon, 04/27/2015 - 23:00
pThe first time I heard about a href= was at DrupalCon Munich 2012. Since then use of Behat has grown exponentially and the tools it can be integrate with grew as well. With Behat we can test the markup of a page - pretty neat, right? /p pWell, it#39;s time to take Behat integration with Drupal a little further. I#39;ve decided to try and integrate it with Drupal#39;s simpleTest, as this would open the door for writing simpleTests that are more readable and more quot;behavior drivenquot; by nature./p div class=highlightprecode class=Gherkin language-Gherkin data-lang=Gherkinspan class=kScenario:/spanspan class=nf Testing the login form./span span class=k Given /spanspan class=nfI visit #39;user#39;/span span class=nf /spanspan class=kAnd /spanspan class=nfI fill in #39;Username#39; with #39;@user-name#39;/span span class=nf /spanspan class=kAnd /spanspan class=nfI fill in #39;Password#39; with #39;@user-pass#39;/span span class=nf /spanspan class=kWhen /spanspan class=nfI press #39;Log in#39;/span span class=nf /spanspan class=kThen /spanspan class=nfI should see #39;@user-name#39;/span /code/pre/div pAmazingly enough, the above Gherkin code which is being executed by PHPunit can test your Drupal installation!/p div class=thumbnail img src= div class=captionBehat code executed from within Drupal's simpleTest/div /div pThis functionality is provided by an experimental a href=, which comes with an example test./p pa href= reading…/a/p

Midwestern Mac, LLC: Honeypot for Drupal 8, 3 years in the making

Mon, 04/27/2015 - 21:03
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedpAlmost three years ago, on Feb 19, 2013, I a href= the 8.x-dev branch/a of the a href= module (which helps prevent form spam on thousands of Drupal sites). These were heady times in the lifetime of the then-Drupal 8.x branch; code8.0-alpha1/code wasn't released until three months later, on May 19. I a href= the #D8CX pledge/a—when Drupal 8 was released, I'd make sure there was a full, stable Honeypot release ready to go./p pLittle did I know it would be more than 2.5 years—and counting—before I could see that promise through to fruition!/p/div/div/div

Chapter Three: Presentation: Drupal 8 Theming

Mon, 04/27/2015 - 20:30
p style=box-sizing: border-box; margin-top: 1.27059em; margin-bottom: 1.27059em; line-height: 28.0499992370605px; font-size: 17px; color: rgb(90, 99, 104); font-family: 'Gotham Narrow SSm A', 'Gotham Narrow SSm B';This presentation was given at a href= style=box-sizing: border-box; color: rgb(26, 39, 46); text-decoration: underline; background: 0px 0px; target=_blankSan Diego Drupal Camp/a, a href= Francisco Drupal Users Group/a, and a href= style=box-sizing: border-box; color: rgb(26, 39, 46); text-decoration: underline; background: 0px 0px; target=_blankStanford Drupal Camp/a./p

Advomatic: Automating Living Style Guides in a Drupal Theme

Mon, 04/27/2015 - 20:18
Over the past year or so here, we#8217;ve tried to make front-end development less painful by creating living style guides in our Drupal themes that we can use internally as a valuable resource during development, as well as externally as a client deliverable. They allow us to write consistent, reusable and efficient code that is easy to maintain over... a class=excerpt-read-more href= title=ReadAutomating Living Style Guides in a Drupal ThemeRead more #187;/a

Drupal Watchdog: VIDEO: DrupalCon Amsterdam Interview: The Drupal 9 Question

Mon, 04/27/2015 - 18:07
div class=field field--body field-type-text-with-summary field-label-hidden field--rss pTaking advantage of the DrupalCon Amsterdam gathering of Drupal bigwigs – and in our eternal quest to quench our thirst for enlightenment, and thrust onwards into the future and deeper into the unknown – we corner some of those key Drupal players to ask the all-important question burning in everyone’s mind: When is Drupal 9 coming out?/p pstrongDries Buytaert/strong (Drupal Creator and CTO amp; Co-Founder of Acquia): Nine?/p pstrongMortenDK/strong (Viking, geek Röyale): Oh! Ho-ho-ho!/p pstrongLeslie Hawthorn/strong (Director, Developer Relations, Elasticsearch): After Drupal 8./p pstrongTom Erickson/strong (CEO, Acquia): Drupal 9!/p pstrongMichael Meyers/strong (V.P. Large Scale Drupal, Acquia): I think that the real question is how fast can we accelerate the pace of innovation in the Drupal community and get to 8.1, 8.2, 8.3, and I’m a lot less interested in Drupal 9 right now./p pstrongHolly Ross/strong (Executive Director, Drupal Association): How much time have you got?/p pstrongBastian Widmer/strong (Development and Operations Engineer, Amazee Labs): Let’s first finish Drupal 8./p pstrongRobert Vandenburg/strong (President and CEO, Lingotek): When is Drupal 9 coming out? Never! When pigs fly!/p pstrongFabian Franz/strong (Senior Performance Engineer, Technical Lead, Tag1 Consulting): I’m still thinking about Drupal 7./p pstrongKieran Lal/strong (Technical Director, Corporate Development, Acquia): I actually know the exact time... When it’s ready. /p /div div class=field field--tags field-type-taxonomy-term-reference field-label-above field--rss div class=field-labelspan class=icon glyphicon glyphicon-tag aria-hidden=true/spanTags:nbsp;/div div class=field-items a href=/tags/drupalcon typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=DrupalCon/a a href=/tags/drupalcon-amsterdam typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=DrupalCon Amsterdam/a a href=/tags/video typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=Video/a /div/div div class=field field--video field-type-video-embed-field field-label-above field--rss div class=field-labelVideo:nbsp;/div div class=embedded-video div class=player iframe width=640 height=360 src=//;height=360amp;autoplay=0amp;vq=largeamp;rel=0amp;controls=1amp;autohide=2amp;showinfo=1amp;modestbranding=0amp;theme=darkamp;iv_load_policy=1amp;start=0amp;wmode=opaque frameborder=0 allowfullscreen/iframe /div /div /div

NEWMEDIA: Improve your Frontend Toolset with Grunt and LibSass

Mon, 04/27/2015 - 17:26
span class=field field-node--title field-name-title field-type-text field-label-hidden data-edit-field-id=node/178/title/en/rssImprove your Frontend Toolset with Grunt and LibSass/spandiv class=field field-node--field-intro field-name-field-intro field-type-text-long field-label-hidden data-edit-field-id=node/178/field_intro/en/rssdiv class=field-itemsdiv class=field-itemLearn how you can leverage Grunt and LibSass as groundwork to improve your Frontend Development process and deliver better optimized sites for clients./div/div/divdiv class=field field-node--body field-name-body field-type-text-with-summary field-label-hidden data-edit-field-id=node/178/body/en/rssdiv class=field-itemsdiv class=field-itempAt newmedia we#39;ve been utilizing Sass and Compass compiled with Ruby for CSS Preprocessing for quite some time now in our Drupal projects. While this toolset has served us well, the toolset for Frontend Developers has been growing and improving tremendously as time goes on. Thus, we want to leverage those tools not only to improve our day-to-day development tasks, but more importantly to better provide more optimized websites for our clients./p pIn this post we will walk through overhauling our Frontend tooling with Grunt and LibSass, what#39;s involved, and what the benefits are for clients. For the purpose of this article, we#39;re just going to focus on getting Grunt and LibSass up and running - from there the heavy lifting is done, and you#39;re free to expand on your Grunt tasks as you see fit./p h2What#39;s the client benefit?/h2 pImplementing these tools allows us to work faster and spend less time waiting for tools to run. The other key benefit is that, since Grunt runs arbitrary tasks, we can add more tools to ensure our end product is optimized - not just CSS, but also Javascript, images, and more, resulting in all-around faster-loading websites./p h2What are these Frontend tools amp; why are we using them?/h2 pGrunt is a task runner built in Javascript that leverages node.js. Currently, there are two popular task runner projects: Grunt and Gulp. While there are slight pros and cons between the two projects, we decided to implement Grunt for our Drupal projects, as our Wordpress team had already begun to use Grunt, and we wanted to converge some of our tooling and processes./p pLibSass is an implementation of the Sass compiler written in C instead of Ruby. The primary benefit over the original Ruby compiler is a tremendous boost in speed resulting in much faster compile times./p pstrongNote on LibSass/strong: Unfortunately LibSass does not yet have feature parity with Ruby Sass, but it#39;s not too far off and continues to improve. This a href= target=_blankSass Compatibility reference/a is handy for specific features that may be missing. Personally, I have yet to hit an issue with feature parity, but your mileage may vary./p h2Get the prerequisites in place/h2 pYou will need node.js if you don#39;t have it already. I suggest using the quot;nquot; version management tool to help manage your node install: a href= pOnce you have n installed, install the current stable version of node:/p pre class=language-bash code class=language-bash n stable/code/pre pNext, you#39;ll need to get a couple node modules installed globally: grunt-cli, the commandline interface for grunt, and bower, a dependency manager for web projects./p pre class=language-bash code class=language-bash npm install -g grunt-cli npm install -g bower/code/pre pFrom here, many of the node modules we#39;ll need can be managed at a project level./p h2Setting up Grunt for your project/h2 pNow that we have our prerequisites in place, we need to set up three files within our project:/p ol lipackage.json to manage our project-level node dependencies/li liGruntfile.js to define our tasks/li libower.json will be used to define our sass library dependencies (in our case, singularity and breakpoint)./li /ol pstrongSpecial note on Drupal projects:/strong Currently, placing node_modules within Drupal#39;s directory can potentially cause it to crash, and otherwise could negatively impact performance. We structure our repository so that we have the Drupal directory contained in a folder called docroot, so we handle node at the root level of our project repo above the Drupal directory, rather than at the theme level. See these Drupal Core issues for more information:/p ul lia href= vendor folders to improve directory search performance/a/li lia href= file_scan_directory() to ignore folder/a/li /ul h3package.json/h3 pHere#39;s our example package.json:/p pre class=language-json code class=language-json { quot;namequot;: quot;newmediaquot;, quot;versionquot;: quot;0.0.1quot;, quot;descriptionquot;: quot;newmedia grunt toolsquot;, quot;devDependenciesquot;: { quot;gruntquot;: quot;^0.4.5quot;, quot;grunt-contrib-watchquot;: quot;^0.6.1quot;, quot;grunt-sassquot;: quot;^0.18.1quot;, quot;load-grunt-tasksquot;: quot;^3.1.0quot; } }/code/pre pThe devDependencies section defines the node modules we#39;re using:/p ul ligrunt (Grunt itself is installed on a per-project basis, only the commandline interface grunt-cli is installed globally),/li liquot;grunt-contrib-watchquot;, which provides a watch tool (think sass watch or compass watch),/li ligrunt-sass, which will bring in and manage libsass for us, and/li liload-grunt-tasks, which allows us to automatically load our grunt dependencies in, rather than manually specifying each one in our Gruntfile.js/li /ul pAs times goes on, you#39;ll likely want to add dependencies to your toolset. Adding them with quot;npm install [name] --save-devquot; will download the module for you and automatically add it to your package.json./p h3bower.json/h3 pUsing the Ruby Sass compiler, you use Bundler to manage your Sass library dependencies. Bower will take the place of that in our Grunt/LibSass workflow:/p pre class=language-json code class=language-json { quot;namequot;: quot;newmediaquot;, quot;versionquot;: quot;0.0.1quot;, quot;descriptionquot;: quot;newmedia build dependenciesquot;, quot;authorsquot;: [ quot;NEWMEDIA!quot; ], quot;ignorequot;: [ quot;**/.*quot;, quot;node_modulesquot;, quot;bower_componentsquot;, quot;testquot;, quot;testsquot; ], quot;devDependenciesquot;: { quot;breakpoint-sassquot;: quot;~2.5.0quot;, quot;singularityquot;: quot;~1.6.2quot; } }/code/pre h3Gruntfile.js/h3 pNow that we have dependency management out of the way, we can setup our tasks. Here#39;s our example Gruntfile:/p pre class=language-javascript code class=language-javascript module.exports = function(grunt) { // Load tasks automatically with #39;load-grunt-tasks#39; plugin. require(#39;load-grunt-tasks#39;)(grunt); // Define our theme directory var themeDir = #39;path/to /theme#39;; // Specify where to find dependencies we load in with Bower var sassLib = [#39;bower_components#39;]; // Define the CSS files we want compiled from SCSS files var sassFiles = {}; sassFiles[themeDir + #39;/css/style.css#39;] = themeDir + #39;/scss/style.scss#39;; sassFiles[themeDir + #39;/css/print.css#39;] = themeDir + #39;/scss/print.scss#39;; // Project configuration. grunt.initConfig({ sass: { dev: { options: { sourceMap: true, outputStyle: #39;expanded#39;, includePaths: sassLib }, files: sassFiles, }, build: { options: { sourceMap: false, outputStyle: #39;compressed#39;, includePaths: sassLib }, files: sassFiles, } }, watch: { sass: { files: [#39;**/*.scss#39;], tasks: [#39;sass#39;], } }, }); // Default task(s). grunt.registerTask(#39;default#39;, [#39;sass:build#39;]); grunt.registerTask(#39;dev#39;, [#39;sass:dev#39;]); grunt.registerTask(#39;build#39;, [#39;sass:build#39;]); };/code/pre h2Changes to your Sass/h2 pNow that we have the tools in place, we will need to update how we import our sass libraries. Fortunately this is a simple change. Here are our existing imports:/p pre class=language-css code class=language-css @import quot;breakpointquot;; @import quot;singularitygsquot;; /code /pre pThese imports get updated to:/p pre class=language-css code class=language-css @import #39;breakpoint-sass/stylesheets/breakpoint#39;; @import #39;singularity/stylesheets/singularitygs#39;;/code/pre pThe exact change to your Sass imports may be different depending on the library. To determine the path you need to use, add the library to bower.json, and look inside bower_components to locate the library and determine the path to the main scss file to import./p h2Note on Compass/h2 pAt the time of writing this post, Compass is still dependent on Ruby and can#39;t be used with LibSass. Depending on your case, there are a couple options. If you are using Compass mixins and want to continue to use them, there is a a href= library/a you can use with LibSass. If you primarily use Compass to handle vendor prefixes, you might want to look at adding a href= to your Grunt task instead.. If you#39;re using other libraries that depend on Compass, it#39;s likely that even using the compass-mixins library, you won#39;t be able to use those libraries with LibSass./p h2Ready to Go!/h2 pAt this point you should be in a good place to try running your grunt task. In our example, we have two defined tasks, build and dev, as well as our watch task. Try running quot;grunt devquot; to do a one-time run. Once you are getting successful task runs, you are ready to start working on your project! You can now use quot;grunt watchquot; to detect changes and automatically run tasks./p pYou#39;re also now at a good point to look at adding additional tasks to your workflow. Some suggestions would be to add tasks to handle optimizing your Javascript and image assets. You can find an expansive selection of tasks on the official a Websitersquo;s plugin directory/a./p /div/div/div

Nuvole: Drupal 8 Configuration Management with Features

Mon, 04/27/2015 - 15:30
div class=field field-name-field-blog-subtitle field-type-text-long field-label-hiddendiv class=field-itemsdiv class=field-item evenUse Features together with a configuration management workflow and get the best of both worlds./div/div/divdiv class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item evenpemThis is a preview of Nuvole's training at DrupalCon Los Angeles: a href= Effective Development Workflow in Drupal 8/a./em/p pFeatures for Drupal 8 a href= exist/a and a href= is already in alpha state/a. This may be surprising to those who wrongly assumed that Configuration Management was going to supersede Features; but, as we a href= before/a, it all comes down to understanding how to use Features the right way in Drupal 8./p blockquoteIf you are using Features in Drupal 8 for deployment of configuration, you are doing it wrong!™/blockquote h2The role of Features/h2 pWhile the configuration management was built to keep configuration consistent and enable deploying it between different environments of the same site it was not built for strongsharing configuration/strong between different sites. This is where Features comes in. Features allows you to easily bundle related configuration and re-use it on another site./p pFor re-using configuration and building starter profiles the current alpha version is already great. It works just like the re-usable “feature” we were a href=””blogging/a about last year, except it comes with a familiar UI and lets you do everything as a site builder. It even comes with a smart system that auto detects configuration that belongs together. a href= class=inline-image-link title=View: Features-overviewimg class=inline thumbnail margin-top margin-bottom src= alt=Features-overview title=Features-overview //a/p pa href= class=inline-image-link title=View: Features-exportimg class=inline thumbnail margin-top margin-bottom src= alt=Features-export title=Features-export //a/p h2Configuration changes are development/h2 pDevelopers and site builders working with configuration in Drupal 8 need to understand that strongchanging configuration needs to be treated equally with development./strong While this may seem trivial at first, the consequences are a fundamental shift to the approach of building a Drupal 8 site./p pDrupal 8 comes with the configuration management system that was built to deploy configuration between different environments of the strongsame/strong site. It allows the whole configuration of a site to be synchronized both through the UI for “site builders” and through drush and git for “developers”. While the system allows individual configuration objects to be exported and imported, deployment and synchronization is always done with the entire set to ensure it is consistent./p pThis means that when you change configuration on a production site you either opt out of using the configuration management to deploy configuration or you need to go through a more elaborate a href= flow/a to synchronize the configuration changes with the development environments similar to what you would need to do if you were to change code directly on the production server./p pFor the math-oriented,/p blockquoteΔ config ⊆ development/blockquote pWhat if you want to be free of the temptation to edit configuration in production? Luckily there is a module for that! It is called a href= read-only mode/a and allows to lock the forms where you change the configuration, thus enforcing its role as a developers only tool./p pOf course some configuration will differ between environments. Just as the database credentials are kept separate from the rest of the code, specific configuration can be overridden in the instances’ codesettings.php/code or codeservices.yml/code. The rest of the code is usually treated as a whole for consistency reasons, the same should be true for configuration./p h2What about not using configuration management?/h2 pFeatures and packaging related modules should not be regarded as a solution to deploy only partial configuration. Packaged configuration by definition is never aware of the whole site and the possible inter-dependencies of the site's particular configuration. Deploying only partial configuration circumvents the safeguards Drupal put in place to make the deployment more robust. Of course nobody is forced to use the new tools for configuration management and you can easily opt out of using it by just ignoring that option. It is also still possible to develop a Drupal 8 site by sharing a database dump just as with Drupal 5. But remember that a Drupal 7 approach will yield the Drupal 7 headaches. We would recommend re-evaluating the deployment strategies when starting to use Drupal 8./p h2Managing distributions in Drupal 8/h2 pThe more complicated scenario which is yet to be tackled is a feature for a richer distribution which will update over time. For example a newer version of a feature could come with an updated view or additional or updated fields for a content type./p pFirst steps in that direction have already been taken by a href=””Configuration Update Manager/a (a dependency of features) and a href=””Configuration Synchronizer/a (a sandbox module). Configuration Update Manager compares the configuration in use on the site with the configuration which was provided by a module or installation profile. Configuration Synchronizer goes a step further and keeps a snapshot of the configuration when it was installed in order to determine whether the configuration has been customized by an administrator or whether it can safely be updated to the one provided in the new version of the module/feature./p pAll the modules mentioned above are used in a strongdevelopment environment/strong of a particular site. Or in other words in an environment where configuration changes are expected and part of the process of updating a site./p pFor more, see our presentation from the a href= Developer Days/a (embedded below); thanks to all the people there for the fruitful discussions we had on this topic during the event./p iframe src=// width=595 height=485 frameborder=0 marginwidth=0 marginheight=0 scrolling=no style=border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%; allowfullscreen= /iframe div style=margin-bottom:5px strong a href=// title=Drupal 8 Configuration Management with Features target=_blankDrupal 8 Configuration Management with Features/a /strong from stronga href=// target=_blankNuvole/a/strong /div /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 evenDrupal Planet/divdiv class=field-item oddDrupal 8/divdiv class=field-item evenDrupalCon/div/div/divdiv class=field field-name-field-blog-attachments field-type-file field-label-abovediv class=field-labelAttachments:nbsp;/divdiv class=field-itemsdiv class=field-item evenspan class=fileimg class=file-icon alt= title=application/pdf src=/modules/file/icons/application-pdf.png / a href= type=application/pdf; length=728245 title=2015-04-devdays-montpellier.pdfPresentation Slides - Drupal Developer Days 2015 Montpellier/a/span/div/div/div

Jim Birch: Drupal 7: Scheduling Posts with Scheduler

Mon, 04/27/2015 - 15:00
a href= title=Drupal 7: Scheduling Posts with Schedulerimg src= width=620 height=465 alt=Lego Uncle Jim on National Boss Day title=Lego Uncle Jim on National Boss Day //abr pThe scheduling of posts was the first things I noticed that was missing from Drupal after moving over from Wordpress.  Thanks to the a href= Module/a, we have that functionality back, with more control over what and who can access it./p pThe Scheduler module allows for Publishing, and Unpublishing on a Content Type by Content Type basis.  You can set up Scheduled Publishing on the strongBlog/strong Content Type.  Then, you can set up Scheduled Publish and Unpublishing on something like a strongSale/strong, or strongContest/strong Content Type.  You can also control which roles have access to the scheduling functionality, and the ability to see what content is currently scheduled./p pYou want to make sure you have an external Cron/crontab setup on your server, and make it run at the time that you schedule to ensure that your posts go out on time.  If no one is visiting your site it is going to sit idle and cached.  Cron sitting on the server, running on the server's clock, and the schedule you set up, will poke Drupal on that schedule just to say emHey, How's it going over by there fella?  You need to be doing anything right now?/em  Drupal is smart enough to say, emYes, I need to do all of the things, thank you very much/em, and then does them./p pa href= title=Drupal 7: Scheduling Posts with SchedulerRead more/a/p

Annertech: Annertech's talks at Drupal Open Days Ireland 2015

Mon, 04/27/2015 - 12:43
span class=field field-node--title field-name-title field-type-string field-label-hiddenAnnertech#039;s talks at Drupal Open Days Ireland 2015/span div class=field field-node--body field-name-body field-type-text-with-summary field-label-hidden div class=field-items div class=field-itempWe love to share our knowledge. At every Drupal camp and Drupal Open Days in Ireland (not to mention most DrupalCons and DevDays internationally) we give presentations. This year we are giving three talks at a href= target=_blankDrupal Open Days Ireland 2015/a. Here's what we'll talk about:/p/div /div /div

Red Crackle: Code quality guidelines for large Drupal projects

Mon, 04/27/2015 - 11:30
Are you wonderig what code quality guidenlines your Drupal developers should follow in addition to Drupal's coding standards to make the code readable, secure and performant? What are the best practices so that developers can follow each other's code easily and make code review faster? Read this post to view the guidelines you should follow in addition to the Drupal coding standards.