Planet Drupal

Syndicate content - aggregated feeds in category Planet Drupal
Updated: 58 min 43 sec ago The Drupal 8 plugin system - part 4

Tue, 03/24/2015 - 03:53
pWe a href= what a plugin is/a, a href= some plugins used in core/a and a href= our own custom plugin/a previously. We shall tune it up a bit in this post./p pReal world plugins have a lot more properties than the codelabel/code property mentioned in our breakfast plugin. To make our plugin more real world, we introduce 2 properties, image and ingredients. It makes more sense now to have a custom annotation for breakfast instead of using the default codePlugin/code annotation./p pHow different are custom annotations from the usual codePlugin/code annotation?/p p1) They convey more information about a plugin than what an code@Plugin/code does. Here's a custom annotation for a views display plugin from codesearch_api/code, a href= from here/a./p precode class=language-php/** * Defines a display for viewing a search's facets. * * @ingroup views_display_plugins * * @ViewsDisplay( * id = search_api_facets_block, * title = @Translation(Facets block), * help = @Translation(Display the search result's facets as a block.), * theme = views_view, * register_theme = FALSE, * uses_hook_block = TRUE, * contextual_links_locations = {block}, * admin = @Translation(Facets block) * ) */ /code/pre p2) Custom annotations are a provision to document the metadata/properties used for a custom plugin. br Check out this snippet from FieldFormatter annotation code for instance:/p precode class=language-php /** * A short description of the formatter type. * * @ingroup plugin_translatable * * @var \Drupal\Core\Annotation\Translation */ public $description; /** * The name of the field formatter class. * * This is not provided manually, it will be added by the discovery mechanism. * * @var string */ public $class; /** * An array of field types the formatter supports. * * @var array */ public $field_types = array(); /** * An integer to determine the weight of this formatter relative to other * formatter in the Field UI when selecting a formatter for a given field * instance. * * @var int optional */ public $weight = NULL; /code/pre pThat gave us a lot of information about the plugin and its properties. br Now that you are convinced of the merits of custom annotations, let's create one./p pCheckout the module code if you haven't already./p precode class=language-bash$ git clone /code/pre pSwitch to the codecustom-annotation-with-properties/code tag./p precode class=language-bash$ git checkout -f custom-annotation-with-properties /code/pre pand enable the module. The directory structure should look like this: br img src= alt=Custom annotation directory structure/p pThe new codeAnnotation/code directory is of interest here. Custom annotations are defined here./p precode class=language-php /** * A glimspe of how your breakfast looks. * * This is not provided manually, it will be added by the discovery mechanism. * * @var string */ public $image; /** * An array of igredients used to make it. * * @var array */ public $ingredients = array(); /code/pre pNow, the plugin definition is changed accordingly. Here's the new annotation of the idli plugin./p precode class=language-php/** * Idly! can't imagine a south Indian breakfast without it. * * * @Breakfast( * id = idly, * label = @Translation(Idly), * image =, * ingredients = { * Rice Batter, * Black lentils * } * ) */ /code/pre pThe other change is to inform the Plugin Manager of the new annotation we are using. br This is done in codeBreakfastPluginManager.php/code./p precode class=language-php // The name of the annotation class that contains the plugin definition. $plugin_definition_annotation_name = 'Drupal\breakfast\Annotation\Breakfast'; parent::__construct($subdir, $namespaces, $module_handler, 'Drupal\breakfast\BreakfastInterface', $plugin_definition_annotation_name); /code/pre pLet's tidy the plugin by wrapping it around an interface. Though this is purely optional, the interface tells the users of the plugin what properties it exposes. br This also allows us to define a custom function called codeservedWith()/code whose implementation is plugin specific./p pWith the plugin class hierarchy looking like this now: br img src= alt=breakfast plugin class hierarchy/p pThe codeservedWith()/code is implemented differently for different plugin instances./p precode class=language-php// Idly.php public function servedWith() { return array(Sambar, Coconut Chutney, Onion Chutney, Idli podi); } /code/pre precode class=language-php// MasalaDosa.php public function servedWith() { return array(Sambar, Coriander Chutney); } /code/pre pWe make use of the interface functions we wrote in the formatter while displaying details about the user's favorite breakfast item./p precode class=language-php// BreakfastFormatter.php foreach ($items as $delta =gt; $item) { $breakfast_item = \Drupal::service('plugin.manager.breakfast')-gt;createInstance($item-gt;value); $markup = 'lt;h1gt;'. $breakfast_item-gt;getName() . 'lt;/h1gt;'; $markup .= 'lt;img src='. $breakfast_item-gt;getImage() .'/gt;'; $markup .= 'lt;h2gt;Goes well with:lt;/h2gt;'. implode(, , $breakfast_item-gt;servedWith()); $elements[$delta] = array( '#markup' =gt; $markup, ); } /code/pre pAnd the user profile page now looks like this./p pimg src= alt=user profile for breakfast plugin/p h3 id=derivativepluginsDerivative plugins/h3 pWe have Idly plugin instance mapped to the Idly class and Uppuma instance mapped to the Uppuma class. Had all the plugin instances been mapped to a single class, we would have got derivative plugins. Derivative plugins are plugin instances emderived/em from the same class. br They are employed under these scenarios: br 1. strongIf one plugin class per instance is an overkill./strong br There are times where you don't want to define a class for each plugin instance. You just say that it is an instance of a particular class that is already defined. br 2. strongYou need to dynamically define plugin instances./strong br The Flag module defines a different Flag Type plugin instance for different entities. The entities in a Drupal site are not known beforehand and hence we cannot define one instance each for every entity. This calls for a plugin derivative implementation./p pLets add derivative plugins to our breakfast metaphor./p precode class=language-bash$ git checkout -f plugin-derivatives /code/pre pHere's a new user story for the breakfast requirement. We are going to add desserts to our menu now. All desserts are of type codeSweet/code. So, we define a derivative plugin called codeSweet/code which is based on breakfast./p pThis calls for 3 changes as shown in the new directory structure outlined below:/p pimg src= alt=derivative plugins/p p1) Define the codeSweet/code plugin instance class on which all our desserts are going to be based on. /p precode class=language-php/** * A dessert or two whould be great! * * * @Breakfast( * id = sweet, * deriver = Drupal\breakfast\Plugin\Derivative\Sweets * ) */ class Sweet extends BreakfastBase { public function servedWith() { return array(); } } /code/pre pNote the deriver property in the annotation./p p2) Next, we define the deriver in the codeDerivative/code directory. /p precode class=language-php/** * Sweets are dynamic plugin definitions. */ class Sweets extends DeriverBase { /** * {@inheritdoc} */ public function getDerivativeDefinitions($base_plugin_definition) { $sweets_list = drupal_get_path('module', 'breakfast') . '/sweets.yml'; $sweets = Yaml::decode(file_get_contents($sweets_list)); foreach ($sweets as $key =gt; $sweet) { $this-gt;derivatives[$key] = $base_plugin_definition; $this-gt;derivatives[$key] += array( 'label' =gt; $sweet['label'], 'image' =gt; $sweet['image'], 'ingredients' =gt; $sweet['ingredients'], ); } return $this-gt;derivatives; } } /code/pre p3) The derivative gets sweets info from the codesweets.yml/code present in the module root directory. This could even be an XML/JSON or any file format which holds metadata. I've used a YAML file for consistency's sake./p precode class=language-yamlmysore_pak: label: 'Mysore Pak' image: '' ingredients: - Ghee - Sugar - Gram Flour jhangri: label: 'Jhangri' image: '' ingredients: - Urad Flour - Saffron - Ghee - Sugar /code/pre pThe class hierarchy for derivative plugins looks a little big bigger now./p pimg src= alt=Derivative plugins class hierarchy/p pClear your cache and you must be able to see the sweets defined in the yaml file in the breakfast choice dropdown of the user profile./p pimg src= alt=new derivative plugins/p pEnjoy your dessert!/p pThat concludes our tour of Drupal 8 plugins. Hope you liked it and learnt something. Stay tuned for the next series about services./p

Colan Schwartz: Drupal-specific hosting: Choose a provider from those offering comprehensive platforms

Tue, 03/24/2015 - 03:12
section class=field field-name-field-blog-topics field-type-taxonomy-term-reference field-label-inline clearfix view-mode-rss clearfix h2 class=field-labelTopics:nbsp;/h2 ul class=field-items li class=field-item even rel=schema:keywords a href=/blog-topics/drupal-planet typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=Drupal Planet/a /li li class=field-item odd rel=schema:keywords a href=/blog-topics/devops typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=DevOps/a /li li class=field-item even rel=schema:keywords a href=/blog-topics/hosting typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=Hosting/a /li /ul /section div class=field field-name-field-body field-type-text-long field-label-hidden view-mode-rssdiv class=field-itemsdiv class=field-item even property=schema:articleBodypThere are many Web hosting companies claiming their ability to host Drupal sites in the enterprise space. However, most of the time, these providers simply provide the hardware or a virtual machine (VM/VPS) with an operating system (OS) capable of hosting Drupal emif you build the application stack, configure it and manage it all yourself/em. They may even claim that they can set all of this up for you, but they'll charge extra for the labour. They don't have a comprehensive platform where instances can be automatically deployed as needed./p pWhat do I mean by a platform?/p pI'm considering a somewhat complex requirement: a solution that includes a fully-managed Drupal application stack with several environments where it is trivial to move code, databases and files between them./p pWhile it seems like it would be difficult to find such a service, there are now several available. While these options may seem expensive relative to generic Web-site hosting, they'll save you immensely on labour costs, as you won't have to pay to do any of the following yourself:/p ulliInstallation of the application stack emon each environment/em (Dev, Staging and Prod, see below.)/li liManaging all OS software updates and security patches./li liManaging the configuration between environments (a.k.a. a href= Management/a)/li liSelf-hosting and managing a deployment tool such as a href= or creating and managing your own deployment scripts./li liDeveloping, maintaining and documenting processes for your development workflow./li /ulpThe environments in question are Dev (or Development, the integration server where code from all developers is combined and tested), Staging (or QA, where quality assurance testing is done with the content and configuration from Production/Live and the code from Dev) and Prod (Production/Live, your user-facing site). Typically, these three (3) server environments are set up for you, and the Drupal hosting provider provides a simple-to-use command-line (CLI) and/or Web interface to deploy code to Dev, to Staging and finally to Prod while allowing you to easily move site data (content and configuration) from Prod to Staging to Dev. Your developers then work in their own sandboxes on their laptops pushing code up through the environments, and pulling site data from them./p pThis allows you to significantly reduce or eliminate the resources you'll need for a href= administration/a and a href= You can focus your project resources on application development, which is to get your content management system up and running as quickly as possible, while leaving infrastructure issues to the experts. Even if these items are outsourced, they add additional costs to your project./p pHowever, you may have specific requirements which preclude you from going with such a managed solution. You may have a need to keep the environments behind your corporate firewall (say to communicate securely with other internal back-end systems such as CRMs, authentication servers or other data stores) or your country/jurisdiction has strict privacy legislation preventing you from physically locating user data in regions where electronic communication is not guaranteed to be kept private. For example, in Canada, personal information can only be used for purposes that users have consented to (see a href= As a good number of the described hosting services rely on data centres in the United States, the a href= Act/a there (which gives the US government full access to any electronic communication) could make it difficult to enforce such privacy protections./p pAt the time of this writing, the following Drupal hosting companies are available to provide services as described above. They're listed in no particular order./p ullia href= /lilia href= /lilia href= /lilia href= /lilia href= Cloud/a /li/ulpI haven't had a chance to try all of these yet as I have clients on only some of them. It would be great if someone who's evaluated all of them were to publish a comparison./p pemThis article, a href= hosting: Choose a provider from those offering comprehensive platforms/a, appeared first on the a href= Schwartz Consulting Services blog/a./em/p/div/div/divspan rel=schema:url resource=/blog/drupal-specific-hosting-choose-provider-those-offering-comprehensive-platforms class=rdf-meta element-hidden/spanspan property=schema:name content=Drupal-specific hosting: Choose a provider from those offering comprehensive platforms class=rdf-meta element-hidden/span

Drupal Association News: Viva DrupalCon Latin America

Mon, 03/23/2015 - 23:51
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item evenp2015 started out strong with our first DrupalCon of the year, which took place from a href= February in Bogota, Columbia/a. Nothing feels better than to a href=;text=Drupalcon%20latin%20americabring the power of DrupalCon/a to a new region where attendees can revel in their love for Drupal, the community, and enjoy time together. As people listened to the a href=, attended sessions and sprints, and celebrated with some a href=, we heard a lot of “this is a real Con” and “it feels so good to experience this in my own backyard”./p pimg alt=Driesnote crowd class=right src= style=width: 240px; height: 159px; /Sharing the gift of DrupalCon with the Latin American community was a joy for Drupal Association staff and community organizers. It wouldn’t have happened without help from a href= Morales/a, a href= Ospina/a, a href= Chaquea/a, a href= Vidal/a, and a href=;trk=tab_proJairo Pinzon/a, who helped organize the event. Conversely, it better connected the Drupal Association with this region, helping us better understand the high level of contribution as well as new ways to support this region./p p263 people attended DrupalCon Latin America from 23 countries including 12 Latin American countries. 63% of attendees said that this was their first DrupalCon, which underscores why it’s so important to bring DrupalCon to new parts of the world. Attendees were primarily developers from Drupal Shops, but there was more diversity than expected. The event also attracted a higher level of beginners than expected and 14% of attendees were women, which falls between DrupalCon Europe (10% women) and DrupalCon North America (22%). Below are some demographic tables that compare DrupalCon Latin America with DrupalCon Austin./p pimg alt=Sprinters class=right src= /As you can imagine, the most attended sessions were focused on Drupal 8. DrupalCon Latin America was the first event to offer translated sessions and all sessions were recorded and posted to the a href= YouTube Channel/a. Thanks to a href=, 20 additional session recordings were translated, too, and can be found on Youtube./p pOne of the big takeaways for Drupal Association staff was finding out how many attendees contribute to Drupal. When Megan Sanicki, COO, asked in her keynote introduction presentation how many people contributed, a large number of hands went up. It explains why DrupalCon Latin America had the largest percentage of attendees attend the sprint compared to any other DrupalCon --  38.4% of attendees showed up to make a difference. Thanks to the sprint leads, a href=, a href=, a href=, a href= and the other 19 sprint mentors, 101 people were able to participate in the sprints./p pWe’re also happy that financially the event achieved its budget goals. When planning DrupalCon Latin America, we knew that hosting the event in a new region would create budget challenges. We accepted that and were willing to operate this DrupalCon at a loss. We see this as an investment in a region that will grow because DrupalCon was hosted here. Below is the high level budget and further below is a more detailed view into the expenses./p tabletbodytrtd bgcolor=#66900 h4 DrupalCon Latin America Budget/h4 /td td bgcolor=#66900 h4 Budget/h4 /td td bgcolor=#66900 h4 Actual/h4 /td /trtrtd Income/td td $150,150/td td $104,513.74/td /trtrtd Expenses/td td $250,750/td td $188,034.40/td /trtrtd Net Profit/td td -$99,920/td td -$83,520.66/td /tr/tbody/tablepOverall, DrupalCon Latin America was a success! Session evaluations came back strong and the event received a high Net Promoter Score of 80. Also, attendees felt that they received more value than expected (see chart below)./p pWhile we hoped for larger numbers, it’s important to point out that DrupalCon Amsterdam in 2005 had about 100 attendees. When the event returned in 2014, it hosted 2,300 people. All regions have to start somewhere and DrupalCons have the power to infuse community members with a burst of energy and passion that helps the community grow. We saw this immediately after DrupalCon Latin America with the growth of a href= Training Days/a. Last year, the region hosted 7 trainings total, but right after DrupalCon Latin America, the region hosted 10 - not even ¼ of the way into the year. Additionally, three Latin American community members nominated themselves in the a href= Association At-Large Board Elections/a./p pWe are thrilled that we were able to bring DrupalCon to new regions of the world. Be sure and attend the closing session of DrupalCon Los Angeles to find out where we are bringing DrupalCon next./p h2 br / DRUPALCON STATISTICS/h2 h3 DEMOGRAPHIC COMPARISONS/h3 pBusiness (sales, marketing) Front end (design, themer) C-Level Site Builder Other (PM, Trainer, etc) Site Administrator/p tabletbodytrtd bgcolor=#66900 h4 Job Function/h4 /td td bgcolor=#66900 h4 Austin/h4 /td td bgcolor=#66900 h4 Latin America/h4 /td /trtrtd strongDeveloper/strong/td td 40%/td td 48%/td /trtrtd strongBusiness (sales, marketing)/strong/td td 11%/td td 12%/td /trtrtd strongFront end (design, themer)/strong/td td 13%/td td 10%/td /trtrtd strongC-Level/strong/td td 9%/td td 9%/td /trtrtd strongSite Builder/strong/td td 11%/td td 8%/td /trtrtd strongOther (PM, Trainer, etc)/strong/td td 9%/td td 12%/td /trtrtd strongSite Administrator/strong/td td 7%/td td 3%/td /tr/tbody/tablep /p tabletbodytrtd bgcolor=#66900 h4 How I use Drupal/h4 /td td bgcolor=#66900 h4 Austin/h4 /td td bgcolor=#66900 h4 Latin America/h4 /td /trtrtd strongDrupal Shop/strong/td td 47%/td td 61%/td /trtrtd strongSite Owner/strong/td td 30%/td td 12%/td /trtrtd strongFreelance/strong/td td 5%/td td 9%/td /trtrtd strongEvaluating/strong/td td 6%/td td 4%/td /trtrtd strongHobbyist/strong/td td 2%/td td 2%/td /tr/tbody/tablep /p tabletbodytrtd bgcolor=#66900 h4 Skill Level/h4 /td td bgcolor=#66900 h4 Austin/h4 /td td bgcolor=#66900 h4 Latin America/h4 /td /trtrtd strongAdvanced/strong/td td 37%/td td 40%/td /trtrtd strongIntermediate/strong/td td 39%/td td 38%/td /trtrtd strongBeginner/strong/td td 23%/td td 22%/td /tr/tbody/tablep /p h3 SESSION STATISTICS/h3 tabletbodytrtd bgcolor=#66900 h4 DrupalCon Latin America: Highest Attended Sessions/h4 /td td bgcolor=#66900 h4 Count/h4 /td /trtrtd #d8rules - Web-automation with Rules in Drupal 8/td td 87/td /trtrtd An Overview of the Drupal 8 Plugin System/td td 70/td /trtrtd Drupal 8 CMI on Managed Workflow/td td 67/td /trtrtd Getting Content to a Phone in less than 1000ms/td td 58/td /trtrtd AngularJS + Drupal = Un Dúo Superheróico!/td td 52/td /trtrtd DevOps, por donde comenzar?/td td 49/td /trtrtd The Future of Commerce on Drupal 8 (and beyond)/td td 43/td /trtrtd I Want it All and I Want it Now: Configuration Management and CI/td td 38/td /trtrtd SEO for Drupal/td td 37/td /tr/tbody/tablep /p tabletbodytrtd bgcolor=#66900 h4 DrupalCon Latin America: Youtube views (as of 3/11/2015)/h4 /td td bgcolor=#66900 h4 # of views/h4 /td /trtrtd DrupalCon Latin America 2015: Keynote by Dries Buytaert/td td 1053/td /trtrtd DrupalCon Latin America 2015: Keynote by Larry Garfield/td td 546/td /trtrtd DrupalCon Latin America 2015: The Future of Commerce on Drupal 8 (and beyond)/td td 407/td /trtrtd DrupalCon Latin America 2015: Drupal 8 CMI on Managed Workflow/td td 241/td /trtrtd DrupalCon Latin America 2015: AngularJS + Drupal = Un Dúo Superheróico!/td td 238/td /tr/tbody/tableh3 img alt= src= //h3 h3 br / DRUPALCON FINANCIALS/h3 tabletbodytrtd bgcolor=#66900 h4 Expenses/h4 p /p /td td bgcolor=#66900  /td /trtrtd Staff Wages, Benefits, Overhead/td td $106,621.54/td /trtrtd Catering/td td $11,784.76/td /trtrtd Staff Travel amp; Accommodations/td td $11,552.25/td /trtrtd Event Planning/td td $9,244.45/td /trtrtd Registration Materials, Conference Supplies, Tees/td td $8,180.90/td /trtrtd Taxes, Fees, VAT/td td $7,009.54/td /trtrtd Speaker Fees, Travel Awards, Etc/td td $6,973.16/td /trtrtd Translation/td td $6,772.00/td /trtrtd IT, Wifi, Electrical/td td $6,705.89/td /trtrtd Archiving/td td $5,500.00/td /trtrtd Design/td td $4,500.00/td /trtrtd Conference Facility/td td $3,013.78/td /trtrtd Shipping/td td $176.13/td /trtrtd strongTotal Expenses/strong/td td strong$188,034.4/strong/td /tr/tbody/tablep /p /div/div/div

DrupalCon News: Sessions and Training Opportunities Have Been Announced

Mon, 03/23/2015 - 20:40
div class=field field--name-body field--type-text-with-summary field--label-hiddendiv class=field__itemsdiv class=field__item evendivOne of the most exciting aspects of preparing for a DrupalCon is selecting the sessions that will be presented. It’s always incredibly cool and humbling to see all the great ideas that our community comes up with— and they’re all so great that making the official selections is definitely not an easy process! /div div /div /div/div/div

Commercial Progression: Drupal 8 Release Date from Dreisy-Wan Kenobi plus Backdrop Lift (EP7)

Mon, 03/23/2015 - 20:23
div class=field field-name-field-media field-type-file field-label-hidden div class=field-items div class=field-item evendiv class=mediaelement-audioaudio src= class=mediaelement-formatter-identifier-1427223606-0 controls=controls /audiodiv class=mediaelement-download-linka href= /div /div div class=field field-name-body field-type-text-with-summary field-label-hidden div class=field-items div class=field-item evenpiframe allowfullscreen= frameborder=0 height=360 src= width=640/iframe/pp dir=ltrCommercial Progression presents Hooked on Drupal, “Episode 7: Dreisy-Wan Kenobi You're our only hope!.  In this latest installment, lead developers Brad Czerniak and Chris Keller are given a mysterious droid with a message from Dreisy-Wan Kenobi concerning the future release date of Drupal 8.  After a brief moment of reminiscing about a href= highlights of DrupalCamp Michigan/a, Brad and Chris muse about the cryptic messages that seem to predict when Drupal 8 will launch, what the fate of the Backdrop CMS will be, and what Acquia Lift actually is.  Tune in for cosmic revelations from beyond time and space./ppHooked on Drupal is available for a href= syndication here/a at the a href= Progression site/a. Additionally, each episode is available to watch online via our a href= channel/a, within the a href= store/a, on a href=, and now via a href= you would like to participate as a guest or contributor, please email us at/pp dir=ltra dir=ltr /ph2Content Links and Related Information/h2ulli dir=ltra href= 2015 Youtube video archive/a/lilia href=;list=PL-GArqUv8d18nrReZYtmsDNWjDNGIA9dJamp;index=13Drupal 8 Preview by Chris Luckhardt/a/lilia href= 8 Release Date Prediction Site/a/lilia href= CMS/a/lilia href= BSD/a/li/ulp /ph2Hooked on Drupal Content Team/h2p dir=ltra href= CZERNIAK/a - Developer Talent/pp dir=ltra href= KELLER/a - Developer Talent/pp dir=ltra href= SEVO/a - Host/ph2 /h2h2Podcast Subscription/h2ulli dir=ltrp dir=ltra href= dir=ltrp dir=ltra href= RSS Feed/a/p/lili dir=ltrp dir=ltra href= on Drupal Blog/a/p/lili dir=ltrp dir=ltra href= Channel/a/p/lili dir=ltrp dir=ltra href= Podcast/a/p/lili dir=ltrp dir=ltra href= Stream/a/p/lili dir=ltrp dir=ltra href= dir=ltra href= alt=Hooked on Drupal Episode 7 - PREDICTIONS ON THE FUTURE OF DRUPAL from Dreisy-Wan Kenobi, You're our only hope. src=/sites/default/files/hooked_on_drupal_drupal8_backdrop_lift_ep7.jpg style=width: 600px; height: 338px; //a/p/div /div /div div class=field field-name-field-tags field-type-taxonomy-term-reference field-label-inline clearfix div class=field-labelTags:nbsp;/div div class=field-items div class=field-item evena href=/blog-tags/hooked-drupalHooked on Drupal/a, a href=/blog-tags/podcastpodcast/a, a href=/blog-tags/drupalDrupal/a, a href=/blog-tags/drupal-8Drupal 8/a, a href=/blog-tags/backdropBackdrop/a, a href=/blog-tags/liftLift/a, a href=/blog-tags/planet-drupalPlanet Drupal/a/div /div /div

Drupal core announcements: Evolving and documenting Drupal core's structure, responsibilities, and decision-making

Mon, 03/23/2015 - 18:41
pThe Drupal project just turned 14 years old. There are now over 1 million known installations of Drupal, and has over 1 million users. Drupal 8 has over 2,700 contributors (almost three times that of Drupal 7) and over 13,000 commits so far (50% more commits per day on average than Drupal 7). I wanted to take an opportunity to reflect on our current governance structure and try to evolve the Drupal leadership team and decision-making, enable better scaling, and document both the formal and informal processes we have currently in place./p pOver in the Drupal core issue queue, I've proposed a href= evolution to Drupal core's structure and decision-making process/a which documents how things are currently done, and also proposes some incremental improvements:/p ol listrongDefines roles and responsibilities that are currently carried out by individuals within the core committer team/strong: product managers, framework managers, and release managers. This is done to provide transparency, to help expedite decision-making, and to ensure that these roles are easier to fill in the future, as we can eliminate the requirement for core committers to be “superhuman” contributors capable of doing anything and everything, at all times. ul liThis document also adds the concept of a href=#faq-provisional“provisional”/a product, framework, and release managers, without actual commit access, who work alongside the core committers until they gain the necessary experience to play a full committer role./li liIn so doing, the document also appoints two additional core committers—Alex Bronstein (a hrf= and Jess (a href=—who have been playing this provisional role for some time now, informally./li /ul /li listrongLays out an explicit decision-making framework/strong to make it clear who needs to be involved in what types of changes, and to what degree. This documents the process we already use, but also introduces some changes. The added transparency should make it easier for contributors who are proposing changes to direct their questions to the right people./li listrongClearly outlines the role of subsystem maintainer/strong (formerly component maintainer) as an active “maintenance” role: performing or organizing regular maintenance tasks: triaging the subsystem's queue(s), reviewing patches in need of review, etc. These responsibilities also come with a more formal opportunity to sign off on proposed changes that significantly affect the subsystem. The advantages to this are additional transparency, delegating and scaling responsibilities, and reducing the workload that currently falls to core committers. Going forward, subsystem maintainers who are not currently active will no longer be listed in MAINTAINERS.txt./li /ol pThis document builds on ideas that have been blogged about or presented at Drupal events by many people, including Randy Fay (rfay), Larry Garfield (Crell), Cathy Theys (YesCT), Gábor Hojsty, Greg Dunlap (heyrocker), Jess (xjm), Alex Pott (alexpott), Nat Catchpole (catch), Jennifer Hodgdon (jhodgdon) and others. It has been reviewed by numerous people, including the existing core committer team. Special thanks to Angie Byron who has spent weeks helping me co-author this proposal./p

Drupalpress, Drupal in the Health Sciences Library at UVA: equipment booking system — content types

Mon, 03/23/2015 - 17:16
pFor our equipment booking system we needed two kinds of content types: reservation and equipment. Patrons would create nodes of the reservation content type. Staff would create nodes of the equipment content type(s). Because our library circulates a lot of different equipment we need a bunch of content types — one for each: Apple TV, Laptop, iPad Air, Digital Video Camera, Projector, etc. The equiment content types all need the same field structure — title, description, image, accessories and equipment category. It#8217;s tedious creating these individually, but once you get one fully fleshed out (and the skeletons of the rest in place) then the a href= Sync/a module will finish the job with the push of a button./p a href= class=aligncenter size-medium wp-image-861 src= alt=field sync screenshot width=300 height=141 //a pThe reservation content type would be canonical for each kind of equipment. In other words, we don#8217;t have to create a Reservation_iPad and a Reservation_Laptop and a Reservation_Projector, etc. There#8217;s just one: Reservation. The way we accomplish this is by using an a href= reference/a field that looks for any nodes of equipment content types./p a href= class=aligncenter size-medium wp-image-863 src= alt=entity reference configurations for reservation content type width=300 height=173 //a pWhen a patron creates a node of the reservation content type, he/she will select the equipment to be reserved in the entity reference field. This entity reference structure allows us to offer a pretty helpful feature for patrons navigating from a specific equipment page to the reservation form. An a href= Reference Prepopulate/a and a href= Suite/a combination gives us a #8220;Reserve This Item#8221; link on equipment pages (say Apple TV #8211; Copy 1) that sends the patron to a node/add reservation page that has that piece of equipment (in this case Apple TV #8211; Copy 1) selected in the equipment field./p a href= class=aligncenter size-medium wp-image-865 src= alt=entity reference prepopulate with reservation link width=300 height=177 //a pThere#8217;s good documentation out there for Entity Reference Prepopulate — check out a href= video/a. But it might be worth explaining how we built the URL that prepoluates the entity reference field. With Display Suite you can create a custom code field — we hardcode a URL to the node/add reservation form, with a token for the id of the currently viewed entity appended onto it. When the user clicks the link, the Entity Reference Prepopulate module kicks off, sees the id and builds the form with that entity referenced./p

Chromatic: Through the Looking-Glass: MidCamp 2015

Mon, 03/23/2015 - 15:56
div class=field field-name-body field-type-text-with-summary field-label-hidden pimg src= alt= /br /span style=display: block; font-size: 80%; color: #a1a1a1photograph taken for a href= Winborn/a (a href=, a long-time member of the Drupal community./span/p pThis last weekend I was fortunate to attend and speak at a href= second MidCamp in Chicago/a. It was hosted within the University of Illinois at Chicago campus and was a very well organized Drupal Camp. MidCamp drew a very diverse crowd (around 350 attendees, I believe) and had a schedule packed with solid sessions./p h2MidCamp becomes span class=capsMADC/spanamp/h2 pPrior to the event, plenty of Alice in Wonderland references were thrown around and there was even a “MADCamp” track, but it wasn’t entirely clear why. It was then revealed that MidCamp – tired of being the middle child – was rebranding itself as a href= class=capsMADC/spanamp/a (Midwest Area Drupal Camp). This was a creative move that added an entertaining twist to the atmosphere./p h2Keynotes/h2 pThe keynote speakers were a href= Farriss/a, the span class=capsCEO/span of a href= and a href= Association/a Treasurer, and Jen Lampton, a Founding Forker of a href= span class=capsCMS/span/a and a notable member of the Drupal community./p pTiffany’s keynote, a href= Economics of Drupal Contribution/a, discussed the changes needed to make core contribution more attractive for organizations and individuals. Depending heavily on a small number individuals and their spare time leads to burnout and is not a sustainable model, she says. She also referenced a number of moves made by the Linux Foundation as ideas for helping solve those problems; including significantly shorter release cycles and a higher percentage of development being funded. a href= 8 Accelerate/a is an example of an existing attempt to rethink the economics of core contribution./p div style=max-width:40%; float: right; margin-left: 15pximg src= alt=Jen Lampton delivering her keynote at MADCamp 2015 /span style=display: block; font-size: 80%; color: #a1a1a1Jen Lampton (photo by a href= Vernon/a)/span/div pJen’s keynote was titled a href= class=capsPHP/span for Everyone/a and gave a great overview of what span class=capsPHP/span is and why it doesn’t deserve the bad rap it’s been given in the past. She outlined the arguments against it and rebutted them with its strengths. As she pointed out, span class=capsPHP/span is currently involved with 80% of the web and is used by a number of large organizations like Facebook. These organizations are working hard to improve the language and each version sees significant improvements, continuing to modernize an otherwise older language./p pI also enjoyed having a discussion with Jen about their experiences with Backdrop span class=capsCMS/span thus far. After receiving some initial friction, it seems that the Drupal community has accepted and is embracing Backdrop. It will be very interesting to see the role that Backdrop plays and the audience it attracts as Drupal 8 is released and adopted./p h2Sessions/h2 pAs mentioned, the schedule was packed with great sessions. I’m thankful to have had the opportunity to present a href= session about organizing Features/a. As for those I attended, there were two themes that stuck out to me the most: automation tools and headless Drupal./p h3Automation Tools/h3 pa href= Mitchell/a, VP of Engineering at a href= Weekdays/a, a href= on using a href= with Drupal. Among the Drupal tasks that can be automated with Grunt, using it with Drush Make provides a very interesting build workflow. a href=, Fredric’s previous employer, has shared their a href= tools, along with a href= blog post about using them/a./p pa href= Chappell/a of a href= Source/a a href= another interesting Drupal 7 build workflow using a href=, the dependency manager of choice in the span class=capsPHP/span community. He also pointed to a number of related tools Promet has shared, such as a href= Tangler/a, and demoed how Composer can be used to manage Drupal 7 core, contributed modules, their dependencies, libraries, and patches./p pa href= Geerling/a, a Technical Architect of a href=, a href= everyone/a to a href=, a tool a href= began using recently at span class=capsCHROMATIC/span/a. He demonstrated Ansible using a href=, his cluster of 6 Raspberry Pi 2 computers; a combination of web servers, a load balancer, a Redis cache server, and a MySQL server. He installed Drupal 8 on the web servers and used span class=capsLED/spans to help demonstrate just how easy it is to manage servers with Ansible. Impressive!/p h3Headless Drupal/h3 div style=max-width:40%; float: right; margin-left: 15pximg src= alt=Steve Persch leading a panel at MADCamp 2015 /span style=display: block; font-size: 80%; color: #a1a1a1Steve Persch (photo by a href= Vernon/a)/span/div pa href= with Drupal’s Head/a was a panel discussion led by a href= Persch/a, a senior engineer at The consensus of the panel was… well… that there is no consensus. While there is plenty of talk about a href= Drupal/a, many things remain unclear. Where to cut off the head (what Drupal should and shouldn’t be responsible for) and when to use the headless approach is still up for debate and the right answer may depend on the project. Some consider it only useful for web applications while others recommend it only when fighting Drupal to build beautiful pages or forms isn’t worth the trouble. Regardless, a key takeaway was that a headless project is no less work. While it does avoid wrestling with the Drupal theme system, introducing a JavaScript framework is no simple task./p pSteve also later presented a href= span class=capsHTML/span with Drupal: Past, Present and Future/a. He anticipates that many Drupal 7 projects will undergo redesigns without a corresponding Drupal upgrade, two tasks that often currently happen at the same time. Headless Drupal makes that easier and he sees clear decoupling as the future of rendering span class=capsHTML/span with Drupal. He doesn’t, however, anticipate that a particular JavaScript span class=capsMVC/span framework will be permanently paired with Drupal because front-end technologies are currently evolving at a much faster rate than back-end technologies and Drupal’s release cycle./p h2Wrapping Up/h2 pAfter Steve’s session I headed to Saturday night’s social event at the Moxee Restaurant and Brewery. The night was filled with great company, food, drinks, and entertaining bouts of table shuffleboard. Getting away from our code and bright screens never fails to bring the community closer together./p pMidCamp/MADCamp was another excellent opportunity to meet and catch up with the myriad of personalities and companies that comprise the Drupal community. It was also a humbling reminder of how fast things move and how much more there is to learn. I recommend attending camps to anyone that has the opportunity. Being smaller than DrupalCon (North America, at least) allows them to become a more personal experience. That being said, I hope to see everyone again at a href= Los Angeles/a in May!/p /div

undpaul: A book about Configuration Management in Drupal 8

Mon, 03/23/2015 - 14:54
div class=field field-name-field-blog-image field-type-image field-label-hiddendiv class=field-itemsdiv class=field-item evena href=/en/blog/2015/03/23/book-about-configuration-management-in-drupal-8img src= width=220 height=272 alt= title=Book cover Drupal 8 Configuration Management //a/div/div/divdiv class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item evenpIn December 2013, a href= Publishing/a asked us to write a book about the upcoming Drupal 8. They had seen the Drupal Association survey that showed the new feature a href= Management was the most popular topic /athey wanted to learn about in Drupal 8. Since we are long-time evangelists of tracking configuration changes in code, we were excited about having the opportunity to write this book, which is expected to be published in March 2015 (like this week!). It's even more exciting because Packt actually donates a portion of sales of Drupal-related books to the a href= Association/a. For this to work, you need to a href= or pre-order directly at Packt/a./p pSince we did so much testing with and writing about Drupal 8, we also wanted to build something with it. a href=http://drupal-8-configuration-management.undpaul.comSo we built a microsite for the book/a and we were surprised about how smooth this worked. It took 9 hours on a Sunday to find an appropriate HTML template, install and configure Drupal and make it look the way it does now. After the book is published, the site will get some more functionality so we can publish questions and answers as well as errata. Since it will be quite a while until Drupal 8 is actually released, we are expecting there will be a few changes and some of our code might become outdated./p pYou can a href= a sample chapter in an article on Packt's website/a./p h2What will be in the book?/h2 pstrongChapter 1, Understanding Configuration Management/strong, will give you a quick overview of Configuration Management. You will learn what types of configuration exist, why managing configuration is a good idea, and how to get started with it. It will provide a look at the several ways in which configuration was managed in Drupal 7 and then show how Drupal 8 approaches the br strongChapter 2, Configuration Management for Administrators/strong, provides an introduction on how to use Configuration Management for users who are not developers, but administrators of a Drupal website who want to make use of the advantages of this new feature. We will show you how to use the Configuration Management interface and how to create a copy of your website, and you will learn how to move a configuration made on one site to another br strongChapter 3, Drupal 8's Take on Configuration Management/strong, will show you the inner workings of the Configuration Management system in Drupal 8. You will learn about config and schema files, and read about the difference between simple configuration and configuration br strongChapter 4, Configuration Management API/strong, will teach you how to get your hands dirty and learn about the Configuration Management API of Drupal 8. Here, you will dive into the Simple Configuration API and learn how configuration can be overridden. Later, you will take a closer look at how to create custom configuration entity types, and we'll also teach you about the configuration's context br strongChapter 5, The Anatomy of Schema Files/strong, covers schema files and explains how Drupal uses them for Configuration Management. You will learn about the structure of schema files used by Drupal and write your own schema for custom br strongChapter 6, Adding Configuration Management to Your Module/strong, will teach you how to access configuration objects and how schema files are structured in the previous chapters. (You will surely want to know how to get all this fancy stuff into your shiny new module for Drupal 8). You will learn how to include the default configuration in custom modules, how to define and use your own configuration, and how to create configuration br strongChapter 7, Upgrading Your Drupal 7 Variables to Drupal 8 Configuration/strong, will show you ways to convert your Drupal 7 variables into Drupal 8 Configuration objects and how to provide an upgrade path in your br strongChapter 8, Managing Configuration for Multilingual Websites/strong, allows you to build comprehensive multilingual websites in which you can display a site's content in different languages and translate the user interface. While many features were built into Drupal's core in previous versions, building multilingual sites remained a very painful task. In this chapter, we will take a look at how Drupal 7 deals with different languages on a site and how Drupal 8 is trying to fix weaknesses from previous br strongChapter 9, Useful Tools and Getting Help/strong, provides a list of links and tools provided by the Drupal community; these will be useful if you reach a point where you need help when dealing with Configuration Management./p h2Like what you see?/h2 pGo a href= the book directly on Packt's website/a, or a href= us on Twitter/a./p p/div/div/divdiv class=field field-name-taxonomy-vocabulary-1 field-type-taxonomy-term-reference field-label-hiddendiv class=field-itemsdiv class=field-item evena href=/en/blog/tags/drupal-planet-englishdrupal planet english/a/div/div/div

Iztok Smolic: Fastest way to build a landing page on your Drupal site

Mon, 03/23/2015 - 14:53
pLanding pages are a must-have for any web business. Every marketer will tell you that pointing ads to a home page is a waste of money. Actually, any campaign should have a dedicated landing page to maximise the the conversion. Here is the problem: setting-up landing pages in Drupal is not easy. Modules like Panels and Display Suite sure [#8230;]/p pThe post a rel=nofollow href= way to build a landing page on your Drupal site/a appeared first on a rel=nofollow href=http://iztoksmolic.comIztok/a./p

Web Omelette: Custom access control for Drupal 7 entities

Mon, 03/23/2015 - 10:05
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item evenpHave you ever used a href= to control access to various node operations on your site? Have you found this hook unbelievably awesome? Thought to yourself, emboy, I'm unstoppable now/em? Well, I sure did./p pThe problem is that Drupal 7 entities do not start and end with nodes and you may want to control access to other entities in the same way. However, there is no codehook_taxonomy_term_access()/code or codehook_fieldable_panels_pane_access()/code that you can use to apply this tactic. So what can you do in these cases?/p pThe first thing is to understand that each entity implementation is different. Some have a centralised access callback for all the operations while others simply define permissions or access callbacks to be used directly inside the codehook_menu()/code definition. And I'm sure there are also other ways of handling this but these I think are the most common./p pIn this article we are going to look at two entity examples: taxonomy terms (from core) and fieldable panels panes (from contrib). We will trace the access pipeline from request to response and see what we can do to intervene in this process and add our own logic. So let's begin./p h2Taxonomy terms/h2 pThe first entity type we are going to look at is the regular taxonomy term introduced by core. It's actually pretty easy to understand how this entity type is built and what we can do in order to hook into the access pipeline./p pIf we take a look at a href=, we can quickly figure out which paths it creates to add and edit terms and what access callback and arguments are defined:/p pstrongAdding terms to a vocabulary/strong/p precode$items['admin/structure/taxonomy/%taxonomy_vocabulary_machine_name/add'] = array( 'title' =gt; 'Add term', 'page callback' =gt; 'drupal_get_form', 'page arguments' =gt; array('taxonomy_form_term', array(), 3), 'access arguments' =gt; array('administer taxonomy'), 'type' =gt; MENU_LOCAL_ACTION, 'file' =gt; '', ); /code/pre pstrongEditing a particular term/strong/p precode$items['taxonomy/term/%taxonomy_term/edit'] = array( 'title' =gt; 'Edit', 'page callback' =gt; 'drupal_get_form', // Pass a NULL argument to ensure that additional path components are not // passed to taxonomy_form_term() as the vocabulary machine name argument. 'page arguments' =gt; array('taxonomy_form_term', 2, NULL), 'access callback' =gt; 'taxonomy_term_edit_access', 'access arguments' =gt; array(2), 'type' =gt; MENU_LOCAL_TASK, 'weight' =gt; 10, 'file' =gt; '', ); /code/pre pBy nature, viewing taxonomy term pages has to do with node access since they show a list of nodes so we will skip this aspect here and stick with just the add/edit operations./p pSo let's change the access callbacks and potential passed arguments inside a a href= implementation./p precode/** * Implements hook_menu_alter(). */ function demo_menu_alter(amp;$items) { $items['admin/structure/taxonomy/%taxonomy_vocabulary_machine_name/add']['access callback'] = 'demo_taxonomy_term_access'; $items['admin/structure/taxonomy/%taxonomy_vocabulary_machine_name/add']['access arguments'] = array(3, 'add'); $items['taxonomy/term/%taxonomy_term/edit']['access callback'] = 'demo_taxonomy_term_access'; $items['taxonomy/term/%taxonomy_term/edit']['access arguments'][] = 'edit'; } /code/pre pSo what happens here? We are simply replacing the access callback definition for these two menu items with our own custom function codedemo_taxonomy_term_access()/code. Additionally, we standardise a bit the arguments this function gets: code$entity/code (either term or vocabulary object) and code$op/code (add or edit). This covers both cases./p pNow let's write our callback function:/p precode/** * Access callback for taxonomy term add/edit operations * * @param null $entity * @param null $op * @return bool */ function demo_taxonomy_term_access($entity = null, $op = null) { if ($op === 'add') { return user_access('administer taxonomy'); } if ($op === 'edit') { return taxonomy_term_edit_access($entity); } } /code/pre pInside the function we run a check on code$op/code and perform the access logic we want. In doing so, we make use of the code$entity/code object that can be either the term being edited or the vocabulary to which a new term is added. In this example we are replicating exactly the intended access checks of the Taxonomy module. To add a term, a user needs to have the codeadminister taxonomy/code permission while to edit one it needs either the same permission or a vocabulary specific permission (as seen inside a href= Now it's up to you to include inside this logic whatever else you need. And you end up with something not so dissimilar to codehook_node_access()/code but for taxonomy terms./p h2Fieldable Panels Panes (FPP)/h2 pdiv id=block-inject-2 class=block-inject block-inject-2/divdiv class=clearfix/divpFPP is a contributed module that creates an entity type that is primarily used inside a Panels context. Regardless of any of this though, it too exposes CRUD operations on the entities of this type. And consequently, there are access implications. So let's see how we can hook into this pipeline by starting where we did with the Taxonomy module: at codefieldable_panels_panes_menu()/code./p pBy looking inside this hook implementation we can find many defined paths which relate to these CRUD operations. And we also see that many of them have codefieldable_panels_panes_access()/code as the access callback with some specific arguments passed to it./p pBut what does this function actually do? Nothing but taking the parameters and deferring to the controller class responsible for this entity type and its codeaccess()/code method. And by checking codefieldable_panels_panes_entity_info()/code, the principle function responsible for defining the entity type, we find that this is the codePanelsPaneController/code class. In there, we find all the logic for determining access rights for various operations./p pNow that we know all this, what can we do to hook into this pipeline? We could do like before and override the codehook_menu()/code implementation. But since there are so many menu items and the FPP class controller is already doing such a nice job, that may be counter productive. So let's instead override the entity definition and replace the class controller with one of ours that extends codePanelsPaneController/code. In there, we then do what we want./p pFirst, we implement a href= precode/** * Implements hook_entity_info_alter(). */ function demo_entity_info_alter(amp;$entity_info) { $entity_info['fieldable_panels_pane']['controller class'] = 'DemoPanelsPaneController'; } /code/pre pRight after this, we create a file inside our module called which contains the following to start with:/p precodelt;?php /** * Overrides fieldable panels panes controller functionality */ class DemoPanelsPaneController extends PanelsPaneController { } /code/pre pFinally, we edit the module's file and make sure it loads this file:/p precodefiles[] = /code/pre pThen we clear the cache. If all went well, nothing really has changed on the site in terms of functionality. However, the codeDemoPanelsPaneController/code class is being used for controlling the codefieldable_panels_pane/code entity type. And since this one extends codePanelsPaneController/code, all previous functionality remains. It follows to now override the codeaccess()/code method and include our own logic to it:/p precodepublic function access($op, $entity = NULL, $account = NULL) { // $account not always full (defaults to current user) return parent::access($op, $entity, $account); } /code/pre pIn the example above, nothing is really changed because the logic is deferred back to the parent class. But you could add some logic in addition or instead of that depending on various contextual factors./p pHowever, I strongly recommend/warn you to stick to the minimum amount of deviation from default is needed, and for all rest, defer back to the original logic. This is to prevent the opening of any security holes. For example, if your codeaccess()/code method looks like this:/p precodepublic function access($op, $entity = NULL, $account = NULL) { if ($op === 'update') { return false; } } /code/pre pYou are indeed denying access to the edit form but now anybody can create and delete entities because there is no more check on those operations. So make sure you understand this and do not leave any loopholes. The fix in this case would be:/p precodepublic function access($op, $entity = NULL, $account = NULL) { if ($op === 'update') { return false; } return parent::access($op, $entity, $account); } /code/pre pIf the operation is edit, the access is denied for everybody (probably not a good idea but suitable for this demo purpose). However, if the operation is codedelete/code, codecreate/code or codeview/code, we defer to the logic of the parent class to handle those cases. In which case the default FPP permissions will be used./p h2Conclusion/h2 pIn this article we've seen two ways we can hook into the access checking pipeline of entities in Drupal 7. We've learned that there is more than just one way of going about it depending on how the entity type in question has been defined. The purpose was to illustrate how you can approach the matter and where you need to look in order to find a solution. Hope this helps./p /div/div/divdiv class=field field-name-field-categories field-type-taxonomy-term-reference field-label-hiddenIn span class=field-itemsspan class=field-item evena href=/drupalDrupal/a/span/span/divdiv class=sharethis-buttonsdiv class=sharethis-wrapperspan st_url= st_title=Custom access control for Drupal 7 entities class=st_facebook/span span st_url= st_title=Custom access control for Drupal 7 entities class=st_twitter st_via=drupalexp/span span st_url= st_title=Custom access control for Drupal 7 entities class=st_googleplus/span script type='text/javascript'var switchTo5x = true;/scriptscript type='text/javascript' src=''/scriptscript type='text/javascript'stLight.options({publisher:dr-8de6c3c4-3462-9715-caaf-ce2c161a50c});/script/div/div

Drupal core announcements: Plan to finalize the Migration system

Mon, 03/23/2015 - 06:56
pIf you move to Drupal 8 from Drupal 6/7, you'll be using the new a href= migration system/a./p pMigrate team lead a href= has just posted a a href= to finalize the migration system/a, a meta issue which outlines what work's already been completed, what's left to be done, what's blocking what, and how to get involved./p pMigrations are an extremely high-impact place to throw time and energy, so if fixing a href= 8 release blockers/a isn't your thing, but being able to actually emmove/em to Drupal 8 when it's ready is, please jump in and lend a hand! :D (Especially if you've worked with Migrate module in D7 contrib.)/p

Chen Hui Jing: Drupal 101: Creating custom content with Panels

Mon, 03/23/2015 - 02:00
pIf you ever find yourself needing to create a static page in Drupal, perhaps for a temporary landing page or an under-construction page, while the site is being fleshed out behind the scenes, an option to consider is via a href= I was in the process of building the a href= Singapore 2014/a website and needed to put up a temporary home page. Using Panels gave me the option of hand-coding the HTML for the page. To do this, you will also need to install the a href= tools suite (ctools)/a./p ol li p class=no-marginEnable the Panels, Chaos tools and Page manager (comes with ctools) modules./p precode class=language-bashdrush en panels ctools page_manager -y/code/pre /li liOnce all the required modules are... frontpage posts: Registration is Live for Drupal Dev Day NYC 2015! (#D3nyc15)

Sun, 03/22/2015 - 21:20
div class=field field-type-datestamp field-field-start7 div class=field-items div class=field-item odd div class=field-label-inline-first Start:nbsp;/div span class=date-display-single2015-04-19 span class=date-display-start09:00/spanspan class=date-display-separator - /spanspan class=date-display-end17:00/span America/New_York/span /div /div /div div class=field field-type-text field-field-event-type div class=field-items div class=field-item odd Drupalcamp or Regional Summit /div /div /div div class=field field-type-userreference field-field-organizers div class=field-labelOrganizers:nbsp;/div div class=field-items div class=field-item odd a href=/user/426824 title=View user profile.joebachana/a /div div class=field-item even a href=/user/28865 title=View user profile.richbaldwin/a /div div class=field-item odd a href=/user/48234 title=View user profile.mdorman/a /div div class=field-item even a href=/user/16703 title=View user profile.amycham/a /div div class=field-item odd a href=/user/13263 title=View user profile.forestmars/a /div /div /div pRegistration is now up for D3NYC15, to be held Sunday, April 19th at John Jay College in Midtown Manhattan. To reserve your seat, follow this link: a class=freelinking external href= pThe camp website may be found at a class=freelinking external href=http://www.drupalcamp.nyc pDrupal Dev Day NYC 2015 will be a free, full-day Drupal unconference and Drupal 8 sprint event. All skill levels are welcome at Drupal Dev Day NYC 2015. The content is determined by attendees at the beginning of the day, but you can expect to find sessions and conversations on topics ranging from the most basic to advanced./p pAmong the exciting details of the camp include:br / • Morning coffee, bagels and a schmear (wouldn't be a NYC camp without 'em!)br / • Beginning Drupal training presented by Bleen!br / • A Drupal Ladder/mentoring room, where you can get your environment set up and learn to code for Drupalbr / • Drupal 8 codesprintsbr / • Sessions all day, picked by us all and presented by drupalists among us or collaboratively in BoF format./p pIf you are an organization interested in helping to sponsor this event, please contact Matt Dorman (mdorman) for more details, or you can go to the registration page and select your level of sponsorship commitment. Thank you in advance!/p pFor those people interested in volunteering on the day of the event, please ping Joe Bachana (joe@bachana) or post a comment to this event page./p pWatch this Event page and follow @DrupalNYC (a href= title= on Twitter or our Facebook page (a href= title= for the latest updates!/p

DrupalOnWindows: Deploying changing module dependencies with Drupal

Sun, 03/22/2015 - 07:00
div class=form-item form-type-item labelLanguage /label English /div div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedpDeployments are often one of the most important aspects of the Drupal development cycle. But sometimes, due to time and/or budget constraints (or the maturity of your company) developers clone databases downstream, manually reproduce content on production environments, and rely on other bad practices on a regular basis./p pToday we will show you how we manage small (but critical) changes in module dependencies for our custom modules here at a href= class=view view-read-more view-id-read_more view-display-id-entity_view_1 view-dom-id-60557bb436a5dcb2386cd0d594d8ac86 div class=view-header hr/ h2More articles.../h2 /div div class=view-content div class=item-list ul li class=views-row views-row-1 views-row-odd views-row-first div class=views-field views-field-title span class=field-contenta href=/en/blog/when-php-crashes-how-collect-meaningful-information-and-what-do-itWhen PHP crashes: how to collect meaningful information and what to do with it/a/span /div/li li class=views-row views-row-2 views-row-even div class=views-field views-field-title span class=field-contenta href=/en/blog/build-git-windows-sourcesBuild GIT on Windows from Sources/a/span /div/li li class=views-row views-row-3 views-row-odd div class=views-field views-field-title span class=field-contenta href=/en/blog/setting-code-syntax-higlighting-drupalSetting up Code Syntax Higlighting with Drupal/a/span /div/li li class=views-row views-row-4 views-row-even div class=views-field views-field-title span class=field-contenta href=/en/blog/git-shell-windows-reports-shexe-has-stopped-working-appcrashGit shell on Windows reports “sh.exe has stopped working (APPCRASH)”/a/span /div/li li class=views-row views-row-5 views-row-odd div class=views-field views-field-title span class=field-contenta href=/en/blog/drupal-session-handler-everything-you-need-knowDrupal Session Handler: everything you need to know/a/span /div/li li class=views-row views-row-6 views-row-even div class=views-field views-field-title span class=field-contenta href=/en/blog/drupal-iis-or-apacheDrupal on IIS or Apache/a/span /div/li li class=views-row views-row-7 views-row-odd div class=views-field views-field-title span class=field-contenta href=/en/blog/getting-2000-requests-second-without-varnishGetting #2,000 requests per second without varnish/a/span /div/li li class=views-row views-row-8 views-row-even div class=views-field views-field-title span class=field-contenta href=/en/blog/deploying-changing-module-dependencies-drupalDeploying changing module dependencies with Drupal/a/span /div/li li class=views-row views-row-9 views-row-odd div class=views-field views-field-title span class=field-contenta href=/en/blog/deploying-drupal-proDeploying Drupal Like a Pro/a/span /div/li li class=views-row views-row-10 views-row-even views-row-last div class=views-field views-field-title span class=field-contenta href=/en/blog/installing-drupal-windows-and-sql-serverInstalling Drupal on Windows and SQL Server/a/span /div/li /ul/div /div /div

Midwestern Mac, LLC: Ansible + Drupal + Raspberry Pi Dramble - Presentation at MidCamp 2015

Sun, 03/22/2015 - 01:00
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedpEarlier today, I gave a presentation on Ansible and Drupal 8 at MidCamp in Chicago. In the presentation, I introduced Ansible, then deployed and updated a Drupal 8 site on a cluster of 6 Raspberry Pi computers, nicknamed the a href= pMy slides from the presentation are embedded below, and I'll be posting a video of the presentation as soon as it's available./p p style=text-align: center; 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/p/div/div/div

KatteKrab: A more accessible online world will benefit everyone.

Sat, 03/21/2015 - 23:37
div class=field field-name-post-date field-type-ds field-label-hiddendiv class=field-itemsdiv class=field-item evenSunday, March 22, 2015 - 08:37/div/div/divdiv class=field field-name-field-image field-type-image field-label-hiddendiv class=field-itemsdiv class=field-item evenimg src= width=480 height=271 alt=An empty wheelchair at the bottom of the stairs //div/div/divdiv class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item evenpPSA: If you are a web professional, work in a digital agency or build mobile apps, please read this article now: a href= the social model of disability online/a/p pDone? Great./p blockquote pThe social model of disability reframes discussion of disability as a problem of the world, rather than of the individual. The stairs at the train station are the problem, rather than using a wheelchair./p /blockquote pa href= Gibbs/a has reminded me of question time during a href= Wild's keynote at Drupal Downunder in 2012/a. Gian asserts that accessibility guidelines are a legal requirement for everyone, not just Government. There was an audible gasp from the audience./p pIt's true that our physical environment needs to include ramps, lifts, accessible toilets, reserved parking spaces, etc in order to accommodate those with mobility needs. Multi-lingual societies require multi-lingual signage. There are hearing loops - but for some reason, this social model of accessibility doesn't seem to have extended online./p pMaking the digital world accessible, and counteracting the systemic discriminatory impact of failing to do so is something we must take seriously. We must build this in during planning and design, we must make it easy for content editors to maintain WCAG compliance AFTER a site or app is delivered./p pBuilding accessibility features in from the beginning also means it costs less to implement, and delivers a double win of making the whole team more mindful of these issues to begin with. It should be part of the acceptance criteria, it should be part of the definition of done./p pI'd like to see us tackle these issues directly in Drupal core. If you're interested in keeping track of accessibility issues in Drupal, you might like to follow a href=;on twitter, and check out a href= on that have been tagged with accessibility/a.nbsp;/p pAccessibility traps might not affect you now, but they will. This is probably affecting people you know right now. People who silently struggle with small font sizes, poor contrast, cognitive load, keyboard traps, video without captions.nbsp;/p pMy own eyesight and hearing is not what it was. nbsp;My once able parents now require mobility aids. My cousin requires an electric wheelchair. A friend uses a braille reader, and yet I still forget. nbsp;It's not front and centre for me, but it should be. Let's all take a moment to think about how we can focus on making our online and digital world more accessible for everyone. It really does benefit us all./p /div/div/divdiv class=field field-name-taxonomy-vocabulary-1 field-type-taxonomy-term-reference field-label-hidden clearfixul class=linksli class=taxonomy-term-reference-0a href=/category/tags/drupalplanetdrupalplanet/a/lili class=taxonomy-term-reference-1a href=/category/tags/accessibilityaccessibility/a/li/ul/div

Midwestern Mac, LLC: Camp Organizers BoF at MidCamp 2015

Sat, 03/21/2015 - 20:37
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedp style=text-align: center;img src=/sites/ width=450 height=309 alt=MidCamp Camp Organizers sign //p pOn March 21, 2015, there was a fairly well-attended Camp Organizers BoF at a href= in Chicago. I took notes during the BoF and am simply publishing them here for the benefit of camp organizers in the Drupal Community. They're fairly raw, but hopefully they'll be helpful for you!/p/div/div/div

Red Crackle: Drupal Testing Methodologies Are Broken - Here#039;s Why

Fri, 03/20/2015 - 19:01
Currently available Drupal testing methodologies are broken. They are nowhere close to being enterprise-ready. All Drupal developers who have worked on long-term projects have felt this pain. Yes, Drupal 7 ships with Simpletest module but it has two problems: (1) Drupal 7 is not unit-test friendly, and (2) Simpletest module requires reconfiguring the site from scratch. Any Drupal developer who wants to test Drupal today is using functional testing tools such as BDD, Sahi or Selenium. But because of the need to bootstrap Drupal, functional testing still takes a long time to complete. What is needed is an integration testing framework that doesn't bootstrap Drupal on every request and which makes it easy for developers to write and maintain tests. Red Crackle has developed such a framework specifically for testing Drupal. It understands Drupal so that all the mundane tasks of setting up test objects is done automatically in background and the developer just has to concentrate on writing business logic of the test.

SitePoint PHP Drupal: First Look at – a Development and Deployment SaaS

Fri, 03/20/2015 - 18:00
ppNot so long ago, many of us were satisfied handling deployment of our projects by uploading files via FTP to a web server. I was doing it myself until relatively recently and still do on occasion (don’t tell anyone!). At some point in the past few years, demand for the services and features offered by web applications rose, team sizes grew and rapid iteration became the norm. The old methods for deploying became unstable, unreliable and (generally) untrusted./p pimg src= alt= title=//p pSo was born a new wave of tools, services and workflows designed to simplify the process of deploying complex web applications, along with a plethora of accompanying commercial services. Generally, they offer an integrated toolset for version control, hosting, performance and security at a competitive price./p pa href= is a newer player on the market, built by the team at a href= Guys/a, who are better known for their Drupal eCommerce solutions. Initially, the service only supported Drupal based hosting and deployment, but it has rapidly added support for Symfony, Wordpress, Zend and ‘pure’ PHP, with node.js, Python and Ruby coming soon./p pIt follows the a href= architecture/a concept and offers an increasing amount of server, performance and profiling options to add and remove from your application stack with ease./p pI tend to find these services make far more sense with a simple example. I will use a Drupal platform as it’s what I’m most familiar with./p has a couple of requirements that vary for each platform. In Drupal’s case they are:/p ul liAn id_rsa public/private key pair/li liGit/li liComposer/li liThe CLI/li liDrush/li /ul pI won’t cover installing these here; more details can be found in the a href= documentation section/a./p pI had a couple of test platforms created for me by the team, and for the sake of this example, we can treat these as my workplace adding me to some new projects I need to work on. I can see these listed by issuing the codeplatform project:list/code command inside my preferred working directory./p/ppemContinue reading %a rel=nofollow href= Look at #8211; a Development and Deployment SaaS/a%/em/p