Drupal Planet

Syndicate content
Drupal.org - aggregated feeds in category Planet Drupal
Updated: 4 hours 13 min ago

Drupal.org Featured Case Studies: Concern Worldwide - Mobilisation Usability

Fri, 07/25/2014 - 4:58pm
div class=field field-name-field-mainimage field-type-image field-label-hiddendiv class=field-itemsdiv class=field-item evenimg src=https://www.drupal.org/files/styles/case588x306/public/responsive.jpg?itok=-gptwCYO width=588 height=306 alt=Mobile, Tablet amp; Desktop designs for concern.net //div/div/divdiv class=field field-name-field-link field-type-link-field field-label-abovediv class=field-labelCompleted Drupal site or project URL:nbsp;/divdiv class=field-itemsdiv class=field-item evena href=https://www.concern.nethttps://www.concern.net/a/div/div/divdiv class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item evenpstronga href=https://www.concern.net rel=nofollowConcern Worldwide/a/strong is a leading international humanitarian organization dedicated to tackling poverty and suffering in the world’s poorest countries. Their main website, a href=http://www.concern.netwww.concern.net/a, plays an important role in their fundraising process. It enables people from around the world to donate towards specific campaigns and ensure that their money is distributed to where it’s needed most./p pstronga href=http://www.systemseed.com rel=nofollowSystemSeed/a/strong has the wonderful opportunity of partnering with Concern in leveraging Drupal to power the Concern Worldwide platform for a number of years spanning all the way back to the days of Drupal 5. This particular site was upgraded to Drupal 7 in 2012 as part of a large platform refactor which aimed to consolidate all of Concern’s Drupal websites under a single common platform. We wrote about the transition from standalone sites in a href=https://www.drupal.org/node/1708372 rel=nofollowthis case study/a./p pSince then, we have been leading a large project to bring full responsiveness and optimisations across a wide spectrum of devices to all sites on that platform. Today (July 3, 2014) sees the completion of this project with the rollout of a fully responsive and adaptive theme layer, catering for its widest audience ever. In this case study, we’ll look at some of the components of this project, the processes, the challenges, the successes, and lessons learned along the way./p pimg align=middle src=/files/screenshots-1.jpg alt=concern.net and yourconcern.concern.net homepage side by side //p /div/div/divdiv class=field field-name-field-module field-type-node-reference field-label-abovediv class=field-labelKey modules/theme/distribution used:nbsp;/divdiv class=field-itemsdiv class=field-item evena href=/project/omegaOmega/a/divdiv class=field-item odda href=/project/breakpointsBreakpoints/a/divdiv class=field-item evena href=/project/breakpoint_panelsBreakpoint Panels/a/divdiv class=field-item odda href=/project/picturePicture/a/divdiv class=field-item evena href=/project/ifeInline Form Errors/a/div/div/divdiv class=field field-name-field-developed-org field-type-node-reference field-label-abovediv class=field-labelOrganizations involved:nbsp;/divdiv class=field-itemsdiv class=field-item evena href=/marketplace/systemseedSystemSeed/a/div/div/divdiv class=field field-name-field-profiles field-type-user-reference field-label-abovediv class=field-labelTeam members:nbsp;/divdiv class=field-itemsdiv class=field-item evena href=/u/mrfeltonmrfelton/a/divdiv class=field-item odda href=/u/rahulbilerahulbile/a/divdiv class=field-item evena href=/user/704738roblav/a/divdiv class=field-item odda href=/u/fastangelfastangel/a/divdiv class=field-item evena href=/user/30440jucallme/a/div/div/div
Categories: Drupal Feeds

LightSky: NavBar - The Next Step in Drupal Navigation

Fri, 07/25/2014 - 2:17pm
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedpSo I am not kidding a href=https://www.drupal.org/project/navbar target=_blankNavBar/a is literally the next step in Drupal navigation, it is being used in core for Drupal 8.  This is great news because not only does it mean that the Drupal 8 core will contain some much needed improvements to the administration navigation scheme.  Back end user improvements like this are perhaps the thing that makes me most excited about what Drupal 8 is bringing to the table.  Lets look a little bit at NavBar./p pstrongWhat You Get/strong/p pimg alt=NavBar src=http://www.lightsky.com/sites/default/files/create_article_drupal_and_web_design_services.png style=width: 300px; height: 319px; float: left; margin: 10px; /Pretty simply put NavBar gets you a responsive administration toolbar for your Drupal users.  It really isn’t going to do anything for what your visitors see, but your content creators, site administrators, and even site builders will see this as a much welcomed change.  NavBar is first and foremost completely responsive, and for those of you who use the traditional Drupal administration toolbar on your mobile phone oh boy are you excited.  The standard Drupal 7 install, not to mention Drupal 6, doesn’t offer the most mobile friendly administrative experience.  NavBar helps resolve this.  NavBar also offers a more flexible navigation option.  You are able to use NavBar at the top of your site above the header, or as a sidebar on the left hand side.  The customization of the tool, really helps set it apart./p pNot only is the mobile experience improved, but there is a much cleaner and professional looking image presented than the Drupal 7 administration menu.  Though this might not seem like much, for those of us who build Drupal sites for clients this is a big deal.  Image is everything, and it is tough to sell Drupal’s out of the box usability against WordPresses out of the box usability.  We have a lot of admin usability improvements in our standard Drupal installation to help combat this, but now NavBar is another one.  Users almost expect clean and friendly design, and now they can get it. /p pstrongInstallation/strong/p pI am not going to lie, NavBar in its current state is a bit of installation work, but most people should be able to figure it out if they have a little understanding for how Drupal is structured. /p pThe first step for me is downloading and installing the project.  I think that drush is the best tool for installing and enabling projects like this, but particularly for NavBar I suggest installing the project before moving to some of the other steps.  The reason is that once the project is installed and enabled it will put some indicators on your /admin/reports/status page that can really help you troubleshoot in the next steps.img alt=Admin Reports Page for Nav Bar src=http://www.lightsky.com/sites/default/files/status_report_curl_troy_0.png style=width: 500px; height: 90px; float: right; margin: 10px; //p pOnce the NavBar module is enabled, you can visit the site’s status report using the path above and notice that there are a three statuses now associated with NavBar, and this is where the fun comes in.  NavBar requires the installation of three libraries (Modernizr, Backbone, and Underscore), and you may have them already installed, or at least some of them.  Using the status page at this point will help you find out if you have them already installed and ready to run, or whether you need to install them.br / If you find that you need to install them, the process isn’t all that complicated, there are some helpful guides on the a href=https://www.drupal.org/project/navbarproject page/a that will point you in the right direction.  Or a href=http://www.lightsky.com/simple-contact-formgive us a shout/a we would be happy to help.  Essentially it is a matter of downloading the libraries, or cloning their respective repositories, and moving them to your libraries folder in the Drupal installation.  The Modernizr library requires you to follow a link and download a specific minimized version of the library but there are specific instructions to follow on the project page to help guide you here, so I won’t reinvent the wheel here.  The instructions are pretty thorough, and relatively simple. /p pOnce you have the libraries installed you can disable your regular administration toolbar and you are off and running.  If you follow those steps and still aren’t having any luck, the site status report is the best place to look.  Most likely it is an error with the libraries that were installed, and that report will point you to which library is causing trouble, and maybe even what the problem is./p pWe have fallen in love with NavBar, and it has started making a huge impact on our clients and how well they like using Drupal.  We highly suggest you use it./p h3 For more tips like these, a href=http://www.lightsky.com/lightsky-socialfollow us/a on social media or subscribe for free to our a href=http://www.lightsky.com/rssRSS feed/a and a href=http://eepurl.com/dx_ljnewsletter/a. You can also a href=http://www.lightsky.com/simple-contact-formcontact us/a directly or a href=http://www.lightsky.com/request-consultationrequest a consultation/a. /h3 /div/div/div
Categories: Drupal Feeds

Clemens Tolboom: It's alive in space

Fri, 07/25/2014 - 11:03am
div class=field field-name-field-images field-type-image field-label-hiddendiv class=field-itemsdiv class=field-item evena href=/content/its-alive-spaceimg src=http://build2be.com/sites/build2be.com/files/styles/medium/public/UML_Generator_PHP.png?itok=D2ywfQKc width=220 height=213 alt=Part of the dependency graph title=Dependency graph //a/div/div/divdiv class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item evenExperimenting with the index file of a href=https://github.com/clemens-tolboom/uml-generator-phphttps://github.com/clemens-tolboom/uml-generator-php/a lead to a nice animation. Click the image below using Chrome to see Drupal 8 in it's full glory (only if you have the power to consume a hefty animation). a href=http://clemens-tolboom.github.io/uml-generator-php/animations/drupal-8/img title=Drupal 8 translation star system alt=graph of drupal dependencies src=http://build2be.com/sites/build2be.com/files/drupal-8-translation-star-system.png //a /div/div/div
Categories: Drupal Feeds

Four Kitchens: Design, Prototype, and Style in Browser

Fri, 07/25/2014 - 11:00am
div class=field-body pAs Brad Frost aptly points out, the core pieces of responsive web design (fluid grid, flexible media, and media queries) are only the tip of the iceberg. In our latest training session at DrupalCon Amsterdam, the Web Chefs will show you how to level up your responsive design skills to create amazing experiences across thenbsp;web./p /div div class=field-blog-categories-term-tree a href=/taxonomy/term/617 typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=Training/a /div div class=field-blog-categories-term-tree a href=/taxonomy/term/543 typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=Drupal/a /div
Categories: Drupal Feeds

Code Karate: Drupal 7 Fieldable Panels Panes

Fri, 07/25/2014 - 7:10am
div class=field field-name-field-episode-number field-type-number-integer field-label-abovediv class=field-labelEpisode Number:nbsp;/divdiv class=field-itemsdiv class=field-item even159/div/div/divdiv class=field field-name-field-ddod-video field-type-file field-label-hiddendiv class=field-itemsdiv class=field-item evenimg src=http://codekarate.com/sites/default/files/styles/large/public/media-youtube/OxeTfaFiYBA.jpg?itok=eET0rvZL alt=Drupal 7 Fieldable Panels Panes Module - Daily Dose of Drupal Episode 159 //div/div/divdiv class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item evenpThe a href=https://www.drupal.org/project/fieldable_panels_panes rel=nofollowFieldable Panels Panes module/a allows you to create re-usable and fieldable entities that can easily be dropped into Panels pages. This can be useful if the traditional Add Content panes inside Panels is too limiting for you. This also allows using fields (which are translatable) for your Panels content./p pIn this episode you will learn:/p/div/div/divdiv class=field field-name-taxonomy-vocabulary-1 field-type-taxonomy-term-reference field-label-abovediv class=field-labelTags:nbsp;/divdiv class=field-itemsdiv class=field-item evena href=/category/tags/drupalDrupal/a/divdiv class=field-item odda href=/category/tags/drupal/core-concepts/entitiesEntities/a/divdiv class=field-item evena href=/category/tags/drupal/contrib/panelsPanels/a/divdiv class=field-item odda href=/category/tags/drupal/drupal-7Drupal 7/a/divdiv class=field-item evena href=/category/tags/drupal/site-buildingSite Building/a/divdiv class=field-item odda href=/category/tags/drupal-planetDrupal Planet/a/div/div/div
Categories: Drupal Feeds

Wunderkraut blog: Healthy sprinting

Fri, 07/25/2014 - 4:42am
p class=field-ns-blog-post-lead How long can we last on pastry and coffee? It’s time to start taking our sprint nutrition seriously /p div class=field-ns-blog-post-body clearfix div class=field-item even pOf all the activities I take part in the Drupal community, sprinting is my favourite. Coming together with new and old friends to push forwards is a great feeling. Many events around the world are realising the power of sprinting and working hard to accommodate them./ppBut every sprint I go to I feel completely drained. I feel like I need a holiday after a week long sprint. Part of this is down to diet. Refined sugar, pizza, and caffeine is a short term solution to a long term problem. Quickly absorbed into the bloodstream, they give you a quick high, followed by an unavoidable crash./pblockquoteIn terms of actual nutrients, in refined sugar there is only one: the above mentioned sucrose. It makes up 99.9% of the product. There are no vitamins, minerals, trace elements, fiber, water, protein, fat, or anything else. Nutrients such as chromium, manganese, zinc, magnesium, and copper have been lost in the refining process. For that reason, it has been said that sugar provides “empty calories.”/blockquotepcitea href=http://www.foodandhealing.com/articles/article-sugar.htmAnnemarie Colbin - SUGAR! Delicious and Deadly/a/cite/ppBy the second day of a conference, hackathon, or sprint. I need a coffee and pastry before I can start looking and thinking straight. It’s a non-stop cycle, and that’s exactly what most sprint venues provide./ph2Time to kick the habit/h2pWe need to start being more responsible over our bodies and minds and need to ask our kind hosts to be more responsible. It may be a sprint, but life is a marathon. Let’s replace the coffee, pizza, and donuts with healthier options./ph2Boost your brain power/h2h3B1, B2, B3, B5, B12, Folic Acid./h3pEssential for energy production, brain and nerve function. Find them in:/pulliBroccoli/liliMushrooms/liliWatercress/liliTomatoes/liliAsparagus/liliHazelnuts/liliCashew nuts/liliWalnuts/li/ulh2Fight the Drupal flu/h2h3Vitamin A, Vitamin C./h3pStrengthens the immune system – fights infection. Needed for healthy skin, bones, and joints. Works with Vitamin B to produce energy. Find them in:/pulliBroccoli/liliCabbage/liliStrawberries/liliMelons/liliOranges/liliGrapefruit/liliMangoes/liliApricots/li/ulh2Up your mood/h2h3Zinc, Vitamin C./h3pHelps produce the anti-stress hormone. Aids ability to cope with stress effectively. Find them in:/pulliPecan nuts/liliAlmonds/liliBrazil nuts/liliWhole wheat bread/liliWhole wheat pasta/liliShrimps/li/ulpI really hope we can raise expectations around sprints and the level of food available./ppWunderkraut cares about a href=http://wunderroot.co.uk/healthy-web-projectsHealthy Web Projects/a making healthy decisions with our clients and with our employees. We favour long term benefits over short term. We aim for sustainable projects instead of exhausting projects./ppThat's why we're sponsoring the sprint buffet at the a href=http://2014.drupalaton.hu/sprintDrupalaton sprints./a As well as the usual snacks, there will also be a range of healthy foods to help your productivity and happiness. We care about the Drupal community and all the participants that push Drupal 8 forward./ppa href=http://2014.drupalaton.hu/Drupalaton/a is the perfect event to kickstart this initiative. Four days of blue skies, clear water, and sprinting./ppLet's sprint healthy!/p /div /div
Categories: Drupal Feeds

DrupalCon Amsterdam: Countdown to Amsterdam - Shaping The Sessions After Selection

Fri, 07/25/2014 - 1:30am
div class=field field--name-body field--type-text-with-summary field--label-hiddendiv class=field__itemsdiv class=field__item evenp style=italicBusiness track chair Steve Parks writes on the work being done to develop the session content for DrupalCon between session selection and the event itself./p pIt seemed to happen in the blink of an eye. DrupalCon Austin finished, and within a week the window for submitting sessions for Amsterdam closed. After that, the track chairs had just two weeks to review and assess hundreds of submissions to sift them down to just 13 sessions per track-- and we all had day jobs to do too!./p pAlthough selection is now complete, the work to make DrupalCon great isn’t over. The track chairs (and of course the Drupal Association staff) are still devoting considerable time each week until DrupalCon is actually over./p h3Feedback/h3 pFirstly, we committed to providing detailed feedback to anyone whose proposed session wasn’t selected. In the case of the business track, we went into quite a bit of detail providing tips about what could get each session selected in future. We also encourage new speakers, or those with new talks, to deliver them at DrupalCamps first to get practice./p h3Presentation Coaching/h3 pWe offer all selected speakers presentation coaching, and some accept. In these cases Emma-Jane Hogbin works with them to hone their skills and their presentation so that it is ready for the DrupalCon stage. It can be pretty daunting to suddenly have hundreds of smart community members as your audience, especially when many of them will also have expertise in the subject of your talk, so having this coaching can really pay off./p h3Content Coaching/h3 pAs track chairs we work with many of the speakers on each track to help them develop the content of their presentation for DrupalCon. This is partly to help ensure the talk is pitched at the right level and contains valuable information, and partly so it can add to previous similar talks rather than repeat them. We also help refine the session titles and descriptions so that delegates will want to choose to go to the session./p h3Scheduling/h3 pThere are a range of room sizes available, and 3 days of conference. One of our next jobs is to guesstimate how popular each session will be and put it in an appropriately-sized room-- while also scheduling it at a suitable time. This means considering any requests from the speakers, avoiding clashes between sessions that complement each other, and placing more introductory sessions earlier than similar more advanced sessions, as well as a range of other factors. The aim is also to ensure that, as far as humanly possible, most delegates will have something to see in each time-slot regardless of their area of specialism or their level of experience./p h3Education, not promotion/h3 pOne of the clauses in the DrupalCon speaker agreement covers a key part of the longstanding culture of DrupalCon that we’re trying to protect as Drupal grows. DrupalCon is not a typical industry sales conference. Audiences don’t want to sit through a product pitch, or a company’s credentials and ego pitch. /p pThe aim of DrupalCon is for education and sharing by the community, for the community. Yes, companies are a vital part of that community - but they are respected based on what they give rather than what they try to get out of DrupalCon. At previous conferences I’ve heard the backchannel backlash against companies overstepping this line. Sales-y sessions are bad for delegates, bad for DrupalCon’s future, and even bad for the company concerned./p pAs track chairs, that means that we’re alert to sessions that may risk being a little too promotional, and we’ll chat to the speakers concerned (It was also a factor considered in the session selection, as a first filter). We review the slide decks in advance of the conference./p pIf you feel that any sessions on the business track this year are too promotional, I’d appreciate you letting me know, and I’ll raise it for discussion with the Drupal Association./p h3Getting Excited/h3 pFinally, there is still time for us as track chairs to get excited about the coming conference. I’ve now booked my ticket and my hotel - and can’t wait to land in Amsterdam at the end of September and see all the work come together./p pSee you there!/p /div/div/div
Categories: Drupal Feeds

NEWMEDIA: DrupalCamp Colorado 2014: Large Scale Drupal

Thu, 07/24/2014 - 10:26pm
span class=field field-node--title field-name-title field-type-text field-label-hidden data-edit-field-id=node/122/title/en/rssDrupalCamp Colorado 2014: Large Scale Drupal/spandiv class=field field-node--field-intro field-name-field-intro field-type-text-long field-label-hidden data-edit-field-id=node/122/field_intro/en/rssdiv class=field-itemsdiv class=field-itemWith less than a week until the camp, here is a preview of what to expect from our team!/div/div/divdiv class=field field-node--body field-name-body field-type-text-with-summary field-label-hidden data-edit-field-id=node/122/body/en/rssdiv class=field-itemsdiv class=field-itempEveryone here at NEWMEDIA is extremely enthusiastic about this year#39;s DrupalCamp Colorado, which will benbsp;held on August 1st-3rd in Denver. This yearrsquo;s theme for the camp is ldquo;Large Scale Drupalrdquo; where the focus is on how nbsp;larger organizations can become more collaborative with the Drupal community by pooling ideas and resources together to solve common issues they are facing. There will be a wide variety sessions this year, six of which will be presented by members of NEWMEDIA. We are also very excited about being a a href=https://2014.drupalcampcolorado.org/sponsorsPlatinum/a sponsor./p h3Drupal 8 Module Development: Just the Basics/h3 pStart off this years DrupalCamp Colorado right and jump into a href=https://2014.drupalcampcolorado.org/session/drupal-8-module-development-just-basicsDrupal 8 module development/a. nbsp;a href=http://www.newmediadenver.com/user/crazysixBrandon Williams /anbsp;will cover the basics of Symphony and the Drupal 8 module , including a review of what has replaced some of the most common hooks from D7. Brandon is an advocate for learning and change and in the technological world we experience that invariably. While Drupal 7 will be the best option for the short-term, it is never too early to dive in to D8 as he describes in a href=http://www.newmediadenver.com/blog/i-love-d8why Inbsp;love D8!/a/p h3Jenkins 101: A Drupal Perspective/h3 pWant to know more about Jenkins from a Drupal perspective and have a better understanding on how Jenkins can be applied to multiple processes? Then you should join Brandon in his second session that will introduce a href=https://2014.drupalcampcolorado.org/session/jenkins-101-drupal-perspectiveJenkins from a Drupal perspective/a and how it has been proven to be beneficial within NEWMEDIA. As a community we can take this knowledge and continue the conversation to help emerge the tools to permit everyone to become more effective./p h3Securing customers credit card data/h3 pSecurity for your clients credit cards is now a necessity in today#39;s growing eCommerce market. a href=http://www.newmediadenver.com/user/rickmaneliusRick Manelius/a nbsp;will review all of the parts of the standard that apply to Drupal along with providing efficient advice on how to best reduce one#39;s risk when processing credit cards. As the amount of eCommerce transactions continues to rise it becomes even more critical to support every part in the system. If you would like more information on PCI compliance for Drupal nbsp;visit a href=http://drupalpcicompliance.org/DrupalPCICompliance.org/a you can also download the free, a href=http://drupalpcicompliance.org/sponsors/community sponsored/a white paper./p h3The SCSSy Wild West: Partial Organization for a Complete Site/h3 pTake a look at Timrsquo;s blog a href=http://www.newmediadenver.com/blog/partial-partials-bof-recapPartial to Partials: BoF Recap/a for a recap of last years session about the organization of partials.This year a href=http://www.newmediadenver.com/user/timodwhitTim Whitney/a nbsp;will go over a partial layout strategy for all scales of Drupal and non Drupal. Going over common pain points of SCSS partials and how to alleviate them while including approaches to help make life a little easier for everyone./p h3Integration Testing with KitchenCI amp; Multiple Provisioners/h3 pldquo;Works on my machinerdquo; is no longer an acceptable reason for a Drupal site to not perform as expected across multiple environment (i.e. production, staging, development, and local development). This is particularly important as projects become larger, more complex, and have stringent requirements on performance, uptime, and security. a href=http://www.newmediadenver.com/user/cyberswatKevin Bridge#39;s/a a href=https://2014.drupalcampcolorado.org/session/integration-testing-kitchenci-multiple-provisionerspresentation/a will start with the basics of ldquo;Infrastructure as Coderdquo; and then quickly ramp up to review how to use provisioning tools and integration tests to ensure your infrastructure is achieving the desired state./p h3Intro to Frontend Ops/h3 pDiscover the tools that help frontend developers stay consistent as they develop their drupal themes. This discussion from a href=http://www.newmediadenver.com/user/rmcveighRyan McVeigh/a will focus on gruntjs and bower and will also discuss Gulp JS, Phantomjs, PageSpeed, and Slimer JS. You will be able to watch some of his pre-recorded demos of the tools in action. Come and join in on the nbsp;discussion and see how the use of these various tools can contribute to your routine work day./p h3Come Join Us!/h3 pa href=https://2014.drupalcampcolorado.org/There is still time to sign up/a for this weekend and better yet it is free with the option to donate. nbsp;Any registration contributions beyond DrupalCamp Coloradorsquo;s nbsp;budget target will be donated to 3 charities: The Ada Initiative, Code.org, and Electronic Frontier Foundation. nbsp;This weekend has a nbsp;great full-day Training Day on August 1st and will be offering three separate classes you can pay and sign up for./p /div/div/div
Categories: Drupal Feeds

Another Drop in the Drupal Sea: Ways to shoot yourself in the foot: element validation

Thu, 07/24/2014 - 10:21pm
pI needed to do some custom validation of fields on a form. So, I decided to use a href=https://api.drupal.org/api/drupal/developer!topics!forms_api_reference.html/7#element_validate#element_validate/a. One of the fields I was validating appeared a bit strange to me, though. When I displayed its code$form_state['values']['field_face_palm']/code information I saw that it looked like:/p pre $field_face_palm['und'] = 'you_knucklehead'/prep instead of like: /p pre $field_face_palm['und'][0]['value'] = 'you_knucklehead'/pre pa href=http://blog.isaacsonwebdevelopment.com/blog/2014/07/24/ways-shoot-yourself-foot-element-validation target=_blankread more/a/p
Categories: Drupal Feeds

Drupal.org frontpage posts for the Drupal planet: Drupal 7.30 released

Thu, 07/24/2014 - 5:12pm
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item evenp style=position: inherit;Drupal 7.30, a maintenance release with several bug fixes (no security fixes), including a fix for regressions introduced in a href=https://www.drupal.org/drupal-7.29Drupal 7.29/a, is now available for download. See the a href=http://drupal.org/drupal-7.30-release-notesDrupal 7.30 release notes/a for a full listing./p div style=float: right; margin: 0 0 1em 1em; text-align: center; a href=http://ftp.drupal.org/files/projects/drupal-7.30.tar.gz class=link-button style=margin: 0 0 0.6em 0;spanDownload Drupal 7.30/span/a/div p style=position: inherit;stronga href=/upgrade/Upgrading/a your existing Drupal 7 sites is recommended./strong There are no new features in this release. For more information about the Drupal 7.x release series, consult the a href=http://drupal.org/drupal-7.0Drupal 7.0 release announcement/a./p !--break--div style=float: right; padding: 0 0 2em 1em; margin-left: 2em; width: 35%; border-left: 1px solid #cdcdcd; h2Security information/h2 pWe have a a href=/securitysecurity announcement mailing list and a history of all security advisories/a, as well as an a href=/security/rss.xmlRSS feed with the most recent security advisories/a. We strongstrongly advise Drupal administrators to a href=/securitysign up/a/strong for the list./p pDrupal 7 includes the built-in Update Manager module, which informs you about important updates to your modules and themes./p pThere are no security fixes in this release of Drupal core./p h2Bug reports/h2 pDrupal 7.x is being maintained, so given enough a href=https://drupal.org/project/issues/search/drupal?status[]=8amp;categories[]=1bug fixes/a (not just a href=https://drupal.org/project/issues/search/drupal?status[]=1amp;categories[]=1bug reports/a), more maintenance releases will be made available, according to our a href=http://drupal.org/documentation/version-info#whenmonthly release cycle/a. /p/div h2Changelog/h2 pDrupal 7.30 is a bug fix only release. The full list of changes between the 7.29 and 7.30 releases can be found by reading the a href=http://drupal.org/drupal-7.30-release-notes7.30 release notes/a. A complete list of all bug fixes in the stable 7.x branch can be found in a href=http://drupalcode.org/project/drupal.git/shortlog/refs/heads/7.xthe git commit log/a./p h2Update notes/h2 pSee the a href=http://drupal.org/drupal-7.30-release-notes7.30 release notes/a for details on important changes in this release./p h2Known issues/h2 pNone./p /div/div/divdiv class=field field-name-taxonomy-vocabulary-34 field-type-taxonomy-term-reference field-label-abovediv class=field-labelFront page news:nbsp;/divdiv class=field-itemsdiv class=field-item evena href=/taxonomy/term/903Planet Drupal/a/div/div/divdiv class=field field-name-taxonomy-vocabulary-5 field-type-taxonomy-term-reference field-label-abovediv class=field-labelDrupal version:nbsp;/divdiv class=field-itemsdiv class=field-item evena href=/taxonomy/term/120Drupal 7.x/a/div/div/div
Categories: Drupal Feeds

Mediacurrent: Code Review for Non-Technical Folks

Thu, 07/24/2014 - 4:07pm
img typeof=foaf:Image src=http://www.mediacurrent.com/sites/default/files/styles/thumb_blog_spotlight/public/code-review-v1.5.png?itok=LXDIYPki width=200 height=152 alt=Code Review for Non Technical Users title=Code Review for Non Technical Users / pAndrew Riley leads us through a high level walkthrough of what Code Reviews are and why we need them. In this talk he covers what we check for at Mediacurrent (syntax, security, efficiency etc) and why code reviews are important for our customers and any company that writes their own code./p piframe allowfullscreen= frameborder=0 height=480 src=//www.youtube.com/embed/MeXxsHpGXME width=600/iframe/p pstrongAdditional Resources/strong/p pa href=http://www.mediacurrent.com/blog/drupal-8-pictures-usersDrupal 8 In Pictures (for Users)/a | Mediacurrent Blog/p
Categories: Drupal Feeds

Forum One: Drupal 8 Code Sprint at the Jersey Shore

Thu, 07/24/2014 - 1:52pm
pOn the heels of our own a href=http://forumone.com/insights/forum-one-enters-the-sprints/Drupal 8 code sprint in DC/a, I spent the last weekend with the New Jersey Drupal group who organized a Drupal 8 a href=http://jerseyshoredrupal.github.io/code sprint in Asbury Park, NJ/a – and although I was never a href=http://en.wikipedia.org/wiki/Greetings_from_Asbury_Park,_N.J.greeted by The Boss/a, I was pleased to participate thanks to the generosity of the event organizers./p h2Issue-Focused/h2 pI worked on a title=Issue href=https://www.drupal.org/node/2301239 target=_blankthe MenuLink NG part 1/a issue extensively with a title=Peter Wolanin, Drupal.org href=https://www.drupal.org/u/pwolaninPeter Wolanin/a and a title=YesCT, Drupal.org href=https://www.drupal.org/u/yesctYesCT/a. This issue is part of the a title=Issue href=https://www.drupal.org/node/2256521 target=_blank[Meta] New plan, Phase 2/a issue which proposed performance improvement and UI improvement in Drupal 8. This issue originally had a 600KB patch, but to make it more reviewable/committable the issue was split into five child issues./p pThree of us spent a solid two days and more than 30 hours addressing every single point that had been raised by reviewers – and which had been holding up the process of adding this to Core./p div id=attachment_3382 style=width: 710px class=wp-caption aligncenterimg class=wp-image-3382 size-large src=http://forumone.com/wp-content/uploads/2014/07/code-sprint-1-700x525.jpg alt=code-sprint-1 width=700 height=525 /p class=wp-caption-textImage courtesy of Blink Reaction/p/div h2About this Issue (a high level overview)/h2 pA site builder or developer can create menu links in Drupal via configuration by changing the weight, position, creating links in menu, or in code. All these different types of menu links need to be rendered together in menus, so that they present the same in the API to developers. The developer experience on this issue needs to be easy, as almost everything depends on menu items./p pWhile we toiled on this issue, other sprinters worked on a title=Issue href=https://www.drupal.org/node/2289511 target=_blankDrupalCon Austin#8217;s Consensus Banana/a, testing the migration path from Drupal 6 to Drupal 7, along with some other issues./p div style=text-align: center;img class=alignnone wp-image-3451 size-full src=http://forumone.com/wp-content/uploads/2014/07/consensus-banana.jpg alt=The DrupalCon Austin Consensus Banana! width=599 height=376 //div h2Results and Commits/h2 pThe sprint was a very productive one, and resulted in a href=”https://www.drupal.org/node/2301239”Menu part 1/a and a href=”https://www.drupal.org/node/2301273”Menu part 2/a being committed to Core, which was a beta-blocker issue. As of this sprint there were seven beta-blocker issues, but solving the Menu issue helps to put us one step closer to the Drupal 8 Beta release!/p pFor those interested, here are the commits for a href=https://www.drupal.org/commitlog/commit/2/8bb62da27d7d0f97168a9f868ceabc152e00cbb8part 1/a and a href=https://www.drupal.org/commitlog/commit/2/50ac4700e21f401fea8cca2379e111a912173a95part 2/a. And for those needing a chuckle, Alex #8220;The Situation#8221; Pott – who thankfully preferred DCC (Drupal Core Commits) over GTL (Gym, Tan, Laundry) – drew this a href=https://www.drupal.org/node/2301239#comment-8969113goaty looking lama/a to celebrate his commit img src=http://forumone.com/wp-includes/images/smilies/icon_smile.gif alt=:) class=wp-smiley / /p div id=attachment_3384 style=width: 710px class=wp-caption aligncenterimg class=wp-image-3384 size-large src=http://forumone.com/wp-content/uploads/2014/07/code-sprint-2-700x525.jpg alt=Image courtesy of Blink Reaction width=700 height=525 /p class=wp-caption-textImage courtesy of Blink Reaction/p/div pIt was very rewarding to work for a weekend with this group of talented developers, and I think we all left the shore content in the knowledge that we#8217;d made strides toward bringing Drupal 8 that much closer to completion./p pCheck out these other a href=https://twitter.com/hook_menu/status/488384919899738112pictures taken by Peter Wolanin/a and a href=https://twitter.com/drupalcampnj/status/487978544887496704DrupalCamp NJ at the event »/a/p
Categories: Drupal Feeds

Dries Buytaert: The business behind Open Source

Thu, 07/24/2014 - 9:38am
div class=field field-name-taxonomy-vocabulary-1 field-type-taxonomy-term-reference field-label-abovediv class=field-labelTopic:nbsp;/divdiv class=field-itemsdiv class=field-item evena href=/tag/drupal typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=Drupal/a/divdiv class=field-item odda href=/tag/acquia typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=Acquia/a/divdiv class=field-item evena href=/tag/business typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=Business/a/divdiv class=field-item odda href=/tag/the-future typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=The future/a/div/div/divdiv class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedpA few days ago, I sat down with a href=http://twitter.com/qhardyQuentin Hardy/a of a href=http://nytimes.comThe New York Times/a to talk Open Source. We spoke mostly about the a href=http://drupal.orgDrupal ecosystem/a and how a href=http://acquia.comAcquia/a makes money. As someone who spent almost his entire career in Open Source, I'm a firm believer in the fact that you can a href=http://buytaert.net/do-well-do-goodbuild a high-growth, high-margin business and help the community flourish/a. It's not an either-or proposition, and Acquia and Drupal are proof of that./p pRather than an a href=http://bits.blogs.nytimes.com/2014/07/23/open-source-and-the-challenge-of-making-money/utopian alternate reality/a as Quentin outlines, I believe Open Source is both a better way to build software, and a good foundation for an ecosystem of for-profit companies. Open Source software itself is very successful, and is capable of running some of the most complex enterprise systems. But failure to commercialize Open Source doesn't necessarily make it bad. /p pI mentioned to Quentin that I thought Open Source was a href=http://en.wikipedia.org/wiki/DarwinismDarwinian/a; a proprietary software company can't afford to experiment with creating 10 different implementations of an online photo album, only to pick the best one. In Open Source we can, and do. We often have competing implementations and eventually the best implementation(s) will win. One could say that Open Source is a more wasteful way of software development. In a pure capitalist read of a href=http://en.wikipedia.org/wiki/On_the_Origin_of_SpeciesOn the Origin of Species/a, there is only one winner, but business and Darwin's theory itself is far more complex. Beyond only the strongest survive, Darwin tells a story of interconnectedness, or the way an ecosystem can dictate how an entire species chooses to adapt. /p pWhile it's true that the Open Source business model has produced few large businesses (aRed Hat being one notable example/a), we're also evolving the different Open Source business models. In the case of Acquia, we're selling a number of as-a-service products for Drupal, which is vastly different than just selling support like the first generation of Open Source companies did. /p pAs a private company, a href=http://acquia.comAcquia/a doesn't disclose financial information, but I can say that we've been very busy operating a high-growth business. Acquia is North America's fastest growing private company on the Deloitte Fast 500 list. Our Q1 2014 bookings increased 55 percent year-over-year, and the majority of that is recurring subscription revenue. We've experienced 21 consecutive quarters of revenue growth, with no signs of slowing down. Acquia's business model has been both disruptive and transformative in our industry. Other Open Source companies like a href=http://hortonworks.comHortonworks/a, a href=http://cloudera.comCloudera/a and a href=http://mongodb.comMongoDB/a seem to be building thriving businesses too./p pSociety is undergoing tremendous change right now -- the sharing and collaboration practices of the internet are extending to transportation (a href=http://uber.comUber/a), hotels (a href=http://airbnb.comAirbnb/a), financing (a href=http://kickstarter.comKickstarter/a, a href=http://lendingclub.comLendingClub/a) and music services (a href=http://spotify.comSpotify/a). The a href=http://blogs.wsj.com/accelerators/2014/04/23/jeremiah-owyang-the-collaborative-economy-will-double-this-year/rise of the collaborative economy/a, of which the Open Source community is a part of, should be a powerful message for the business community. It are the established, proprietary vendors whose business models are at risk, and not the other way around./p pHundreds of other companies, including several venture backed startups, have been born out of the Drupal community. Like Acquia, they have grown their businesses while supporting the ecosystem from which they came. That is more than a feel-good story, it's just good business./p /div/div/div
Categories: Drupal Feeds

drunken monkey: Updating the Search API to D8 – Part 3: Creating your own service

Thu, 07/24/2014 - 7:28am
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedpEven though there was somewhat of a delay since a href=/blog/search-api-d8-update-part-2my last post in this series/a, it seems no-one else has really covered any of the advanced use cases of Drupal 8 in tutorials yet. So, here is the next installment in my series. I initially wanted to cover creating a new plugin type, but since that already requires creating a new servive, I thought I'd cover that smaller part first and then move on to plugin types in the next post.br / I realize that now already a lot more people have started on their Drupal 8 modules, but perhaps this will make this series all the more useful./p h2Services in Drupal 8/h2 pFirst, a short overview of what a service even is. Basically it is a component (represented as a class) providing a certain, limited range of functionality. The database is a service, the entity manager (which is what you now use for loading entities) is a service, translation, configuration – everything handled by services. Getting the current user – also a service now, ridding us of the highly unclean global variable.br / In general, a lot of what was previously a file in codeincludes//code containing some functions with a common prefix is now a service (or split into multiple services)./p pThe upsides of this is that the implementation and logic is cleanly bundled and properly encapsulated, that all these components can easily be switched out by contrib or later core updates, and that these systems can also be very well tested with unit tests. Even more, since services can be used with dependency injection, it also makes it much easier to test all other classes that use any of these services (if they can use dependency injection and do it properly)./p p(For reference, here is the a href=https://www.drupal.org/node/2133171official documentation on services/a.)/p h3Dependency injection/h3 pThis has been covered already in a lot of other blog posts, probably since it is both a rather central concept in Drupal 8, and a bit complicated when you first encounter it. However, before using it, I should still at least skim over the topic. Feel free to skip to the next heading if you feel you already know what dependency injection is and how it roughly works in Drupal 8./p pDependency injection is a programming technique where a class with external dependencies (e.g., a mechanism for translating) explicitly defines these dependencies (in some form) and makes the class which constructs it responsible for supplying those dependencies. That way, the class itself can be self-contained and doesn't need to know about where it can get those dependencies, or use any global functions or anything to achieve that./p pConsider for example the following class:/p div class=codeblock precodespan style=color: #000000span style=color: #0000BBlt;?phpbr //spanspan style=color: #007700class /spanspan style=color: #0000BBExampleClass /spanspan style=color: #007700{br /br /  public function /spanspan style=color: #0000BBgetDefinition/spanspan style=color: #007700() {br /    return array(br /      /spanspan style=color: #DD0000'label' /spanspan style=color: #007700=gt; /spanspan style=color: #0000BBt/spanspan style=color: #007700(/spanspan style=color: #DD0000'example class'/spanspan style=color: #007700),br /      /spanspan style=color: #DD0000'type' /spanspan style=color: #007700=gt; /spanspan style=color: #DD0000'foo'/spanspan style=color: #007700,br /    );br /  }br /br /}br //spanspan style=color: #0000BB?gt;/span/span/code/pre/div pFor translating the definition label, this explicitly uses the global codet()/code function. Now, what's bad about this I, hear you ask, it worked well enough in Drupal 7, right?br / The problem is that it becomes almost impossible to properly unit-test that method without bootstrapping Drupal to the point where the codet()/code function becomes available and functional. It's also more or less impossible to switch out Drupal's translation mechanism without hacking core, since there is no way to redirect the call to codet()/code./p pBut if translation is done by a class with a defined interface (in other words, a service), it 's possible to do this much cleaner:/p div class=codeblock precodespan style=color: #000000span style=color: #0000BBlt;?phpbr //spanspan style=color: #007700class /spanspan style=color: #0000BBExampleClass /spanspan style=color: #007700{br /br /  public function /spanspan style=color: #0000BB__construct/spanspan style=color: #007700(/spanspan style=color: #0000BBTranslationServiceInterface $translation/spanspan style=color: #007700) {br /    /spanspan style=color: #0000BB$this/spanspan style=color: #007700-gt;/spanspan style=color: #0000BBtranslation /spanspan style=color: #007700= /spanspan style=color: #0000BB$translation/spanspan style=color: #007700;br /  }br /br /  public function /spanspan style=color: #0000BBgetDefinition/spanspan style=color: #007700() {br /    return array(br /      /spanspan style=color: #DD0000'label' /spanspan style=color: #007700=gt; /spanspan style=color: #0000BB$this/spanspan style=color: #007700-gt;/spanspan style=color: #0000BBtranslation/spanspan style=color: #007700-gt;/spanspan style=color: #0000BBtranslate/spanspan style=color: #007700(/spanspan style=color: #DD0000'example class'/spanspan style=color: #007700),br /      /spanspan style=color: #DD0000'type' /spanspan style=color: #007700=gt; /spanspan style=color: #DD0000'foo'/spanspan style=color: #007700,br /    );br /  }br /br /}br //spanspan style=color: #0000BB?gt;/span/span/code/pre/div pThen our example class just has to make it easily possible for code that wants to instantiate it to know how to pass its dependencies to it. In Drupal, there are two ways to do this, depending on what you are creating:/p ulliServices, which themselves use dependency injection to get their dependencies (as you will see in a minute) have a definition in a YAML file that exactly states which services need to be passed to the service's constructor./li liAlmost anything else (I think) uses a static codecreate()/code method which just receives a container of all available services and is then responsible for passing the correct ones to the constructor./li /ulpIn either case, the idea is that subclasses/replacements of codeExampleClass/code can easily use other dependencies without any changes being necessary to code elsewhere instantiating the class./p h2Creating a custom service/h2 pSo, when would you want to create your own service in a module? Generally, the code.module/code file should more or less only contain hook implementations now, any general helper functions for the module should live in classes (so they can be easily grouped by functionality, and the code can be lazy-loaded when needed). The decision to make that class into a service then depends on the following questions:/p ulliIs there any possibility someone would want to swap out the implementation of the class?/li liDo you want to unit-test the class?/li liRelatedly, do you want dependency injection in the class?/li /ulpI'm not completely sure myself about how to make these decisions, though. We're still thinking about what should and shouldn't be a service in the Search API, currently there is (apart from the ones for plugins) only one service there:/p h3The Server task manager service/h3 pThe server tasks system, which already existed in D7, basically just ensures that when any operations on a server (e.g., removing or adding an index, deleting items, …) fails for some reason (e.g., Solr is temporarily unreachable) it is regularly retried to always ensure a consistent server state. While in D7 the system consisted of just a few functions, in D8 it was decided to encapsulate the functionality in a dedicated service, the Server task manager./p h3Defining an interface and a class for the service/h3 pThe first thing you need, so the service can be properly swapped out later, is an interface specifying exactly what the service should be able to do. This completely depends on your use case for the service, nothing to keep in mind here (and also no special namespace or anything). In our case, for server tasks:/p div class=codeblock precodespan style=color: #000000span style=color: #0000BBlt;?phpbr //spanspan style=color: #007700namespace /spanspan style=color: #0000BBDrupal/spanspan style=color: #007700\/spanspan style=color: #0000BBsearch_api/spanspan style=color: #007700\/spanspan style=color: #0000BBTask/spanspan style=color: #007700;br /br /interface /spanspan style=color: #0000BBServerTaskManagerInterface /spanspan style=color: #007700{br /br /  public function /spanspan style=color: #0000BBexecute/spanspan style=color: #007700(/spanspan style=color: #0000BBServerInterface $server /spanspan style=color: #007700= /spanspan style=color: #0000BBNULL/spanspan style=color: #007700);br /br /  public function /spanspan style=color: #0000BBadd/spanspan style=color: #007700(/spanspan style=color: #0000BBServerInterface $server/spanspan style=color: #007700, /spanspan style=color: #0000BB$type/spanspan style=color: #007700, /spanspan style=color: #0000BBIndexInterface $index /spanspan style=color: #007700= /spanspan style=color: #0000BBNULL/spanspan style=color: #007700, /spanspan style=color: #0000BB$data /spanspan style=color: #007700= /spanspan style=color: #0000BBNULL/spanspan style=color: #007700);br /br /  public function /spanspan style=color: #0000BBdelete/spanspan style=color: #007700(array /spanspan style=color: #0000BB$ids /spanspan style=color: #007700= /spanspan style=color: #0000BBNULL/spanspan style=color: #007700, /spanspan style=color: #0000BBServerInterface $server /spanspan style=color: #007700= /spanspan style=color: #0000BBNULL/spanspan style=color: #007700, /spanspan style=color: #0000BB$index /spanspan style=color: #007700= /spanspan style=color: #0000BBNULL/spanspan style=color: #007700);br /br /}br //spanspan style=color: #0000BB?gt;/span/span/code/pre/div p(Of course, proper PhpDocs are essential here, I just skipped them for brevity's sake.)/p pThen, just create a class implementing the interface. Again, namespace and everything else is completely up to you. In the Search API, we opted to put interface and class (they usually should be in the same namespace) into the namespace code\Drupal\search_api\Task/code. See a href=http://cgit.drupalcode.org/sandbox-daeron-2091893/tree/src/Taskhere/a for their complete code.br / For this post, the only relevant part of the class code is the constructor (the rest just implements the interface's methods):/p div class=codeblock precodespan style=color: #000000span style=color: #0000BBlt;?phpbr //spanspan style=color: #007700class /spanspan style=color: #0000BBServerTaskManager /spanspan style=color: #007700implements /spanspan style=color: #0000BBServerTaskManagerInterface /spanspan style=color: #007700{br /br /  public function /spanspan style=color: #0000BB__construct/spanspan style=color: #007700(/spanspan style=color: #0000BBConnection $database/spanspan style=color: #007700, /spanspan style=color: #0000BBEntityManagerInterface $entity_manager/spanspan style=color: #007700) {br /    /spanspan style=color: #0000BB$this/spanspan style=color: #007700-gt;/spanspan style=color: #0000BBdatabase /spanspan style=color: #007700= /spanspan style=color: #0000BB$database/spanspan style=color: #007700;br /    /spanspan style=color: #0000BB$this/spanspan style=color: #007700-gt;/spanspan style=color: #0000BBentity_manager /spanspan style=color: #007700= /spanspan style=color: #0000BB$entity_manager/spanspan style=color: #007700;br /  }br /br /}br //spanspan style=color: #0000BB?gt;/span/span/code/pre/div pAs you can see, we require the database connection and the entity manager as dependencies, and just included them in the constructor. We then save them to properties to be able to use them later in the other methods./p pNow we just need to tell Drupal about our service and its dependencies./p h3The codeservices.yml/code file/h3 pAs mentioned earlier, services need a YAML definition to work, where they also specify their dependencies. For this, each module can have a codeMODULE.services.yml/code file listing services it wants to publish./p pIn our case, codesearch_api.services.yml/code looks like this (with the plugin services removed):/p div class=codeblockcodeservices:br /  search_api.server_task_manager:br /    class: Drupal\search_api\Task\ServerTaskManagerbr /    arguments: ['@database', '@entity.manager']/code/div pAs you see, it's pretty simple: we assign some ID for the service (codesearch_api.server_task_manager/code – properly namespaced by having the module name as the first part), specify which class the service uses by default (which, like the other definition keys, a href=https://www.drupal.org/node/2026959can then be altered/a by other modules) and specify the arguments for its constructor (i.e., its dependencies). codedatabase/code and codeentity.manager/code in this example are just IDs of other services defined elsewhere (in Drupal core's codecore.services.yml/code, in this case)./p pThere are more definition keys available here, and also more features that services support, but that's more or less the gist of it. Once you have its definition in the codeMODULE.services.yml/code file, you are ready to use your new service./p h3Using a service/h3 pYou already know one way of using a service: you can specify it as an argument for another service (or any other dependency injection-enabled component). But what if you want to use it in a hook, or any other place where dependency injection is not available (like entities, annoyingly)?/p pYou simply do this:/p div class=codeblock precodespan style=color: #000000span style=color: #0000BBlt;?phpbr //spanspan style=color: #FF8000/** @var \Drupal\search_api\Task\ServerTaskManagerInterface $server_task_manager */br //spanspan style=color: #0000BB$server_task_manager /spanspan style=color: #007700= \/spanspan style=color: #0000BBDrupal/spanspan style=color: #007700::/spanspan style=color: #0000BBservice/spanspan style=color: #007700(/spanspan style=color: #DD0000'search_api.server_task_manager'/spanspan style=color: #007700);br //spanspan style=color: #0000BB$server_task_manager/spanspan style=color: #007700-gt;/spanspan style=color: #0000BBexecute/spanspan style=color: #007700();br //spanspan style=color: #0000BB?gt;/span/span/code/pre/div pThat's it, now all our code needing server tasks functionality benefits from dependency injection and all the other Drupal 8 service goodness./p /div/div/div
Categories: Drupal Feeds

Pedro Rocha: OOP in Drupal 7: Cool module in practice

Thu, 07/24/2014 - 3:08am
Hey, do you wanna know how to: reduce the amount of code needed to create modules turns the code more readable make it easier to find bugs make it easier to change business logic make it easier to improve code Sounds good, right? If you only wanna know about code, jump to here, or read about the historical background of the module ;)
Categories: Drupal Feeds

NEWMEDIA: Avoiding the API Integration Blues on a Drupal Project

Wed, 07/23/2014 - 10:31pm
span class=field field-node--title field-name-title field-type-text field-label-hidden data-edit-field-id=node/142/title/en/rssAvoiding the quot;API Integration Bluesquot; on a Drupal Project/spandiv class=field field-node--field-intro field-name-field-intro field-type-text-long field-label-hidden data-edit-field-id=node/142/field_intro/en/rssdiv class=field-itemsdiv class=field-itemAs Drupal continues to mature as a platform and gain adoption in the enterprise space, integration with one or more 3rd party systems is becoming common for medium to large scale projects. Unfortunately, it can be easy to underestimate the time and effort required to make these integrations work seamlessly. Here are lessons we#039;ve learned.../div/div/divdiv class=field field-node--body field-name-body field-type-text-with-summary field-label-hidden data-edit-field-id=node/142/body/en/rssdiv class=field-itemsdiv class=field-itempa href=https://www.drupal.org/project/mailchimpMailchimp/a, a href=https://www.drupal.org/project/recurlyRecurly/a, a href=https://www.drupal.org/project/mailchimpMollom/a, a href=https://www.drupal.org/project/stripeStripe/a, and on and onmdash;It#39;s easy to get spoiled by a href=https://www.drupal.org/project/project_moduleDrupal#39;s extensive library of contributed modules/a that allow for quick, easy, and robust integration with 3rd party systems. Furthermore, if a particular integration does not emyet/em exist, the extendability of Drupal is straightforward enough that it emcould/em be done given the usual caveats (i.e. an appropriate amount of time, resources, and effort). However, these caveats should not be taken lightly. Our own experiences have unearthed many of the same pain points again and again, which almost always result in waste. By applying this gained wisdom to all subsequent projects involving integrations, we#39;ve been much more successful in identifying and addressing these issues head on. We hope that in sharing what we#39;ve learned that you can avoid some of the more common traps./p h3API and Integration Gotchas/h3 h4Vaporware/h4 pShocking as it may seem, there are situations where a client will assume an API exists when there isn#39;t one to be found. Example: anbsp;client may be paying for an expensive enterprise software license that can connect to other programs within the same ecosystem, but there may not be annbsp;endpoint that can be accessed by Drupal. They key here is to ensure you have documentation up front along with a working example of a read and/or write operation written in php or through a web services call. Doing this as early as possible within the project will help prevent a nasty surprise when it#39;s too late to change course or stop the project altogether./p h4Hidden Add-on Fees/h4 pAn alternative to the scenario above is when an endpoint can be made available for an additional one-time or recurringnbsp;fee. This can be quite an expensive surprise. It can also result in a difficult conversation with the client, particularly if it wasn#39;t factored into the budget and now each side must determine who eats the cost. The key to preventing this is to verify (up front) if the API endpoint is included with the client#39;s current license(s) or if it will be extra./p h4Limited Feature Sets/h4 pOne can never assume that an entire feature set is available. Example: an enterprise resource planning (ERP) software solution may provide a significant amount of data and reporting to its end users, but it may only expose particular records (e.g. users, products, and inventory) to an API. The result: a Drupal site#39;s scope document might include functionality that simply cannot be provided. To avoid this issue, you#39;ll want to get your hands on any and all documentation as soon as possible. You#39;ll also want to create an inventory of every feature that requires anbsp;read/write operation so that you cannbsp;verify the documentation covers each and every item./p h4Documentation/h4 pTranscending the quot;Drupal learning cliffquot; was and continues to be a difficult journey for many members of the community despite the abundance of ebooks, videos, and articles on the subject matter. Consider how much more difficult building Drupal sites would be if these resources didn#39;t exist. Now imagine trying to integrate with a systems you#39;ve never heard of using a language you#39;re unfamiliar with and no user guide to point you in the right direction./p pSounds scary, doesn#39;t it?/p pIntegrating with a 3rd party application without documentation is akin to flying blind. Sure you emmight/em eventually get to the appropriate destination, but you will likely spend a significant amount of time using trial and error. Worse yet, you may simply miss certain pieces of functionality altogether./p pThe key here, as always, is to get documentation as soon as you can. Also, pay attention tonbsp;certain red flags, such as the client not having the documentationnbsp;readily available or requiring time for one of their team members to write it up. This is particularly important if the integration is a one-off that is specific to the customer versus an integration with a widely known platform (e.g. Salesforce or PayPal)./p h4Business Logic/h4 pOne of Drupal#39;s strengths is the ability for other modules to hook in to common events. For example, a module could extend the functionality of a user savingnbsp;his or her password to email a notification that a password was changed.When integrating with another system, it#39;s equally important to understand what events may be triggered as a result of reading or writing a record. Otherwise, you may be in for a surprise to find out the external system was firing off emails or trying to charge credit card payments./p pDocumentation is invaluable to prevent these types of gaffs. However, in our experience it has been important to have access to a support resource that can provide warnings up front./p h4Support/h4 pWhat happens when the documentation is wrong or the software doesn#39;t work? If support regarding the API is slow or non-existant, the project may grind to halt until this block is removed. For enterprise level solutions, there is usually some level of support that can be accessed via phone, forums, or support tickets. However, there can sometimes be a sizable fee for this service and your particular questions might not be in scope with respect to what their service provides. In those instances, it might be helpful to contract with a 3rd party vendor or contractor that has performed a similar integration in the past. This can be costly up front while saving a tremendous of time over the course of the project./p h4Domain Knowledge/h4 pAs consultants, one of our primary objectives is to merge our expertise with that of the customer#39;s domain knowledge in order to best achieve their goals. Therefore, it#39;s important that we understand emwhy/em the integration should work the way it does instead of just emhow/em we read and write data back and forth. A great example of this involves integratingnbsp;Drupal Commerce with Quickbooks through thenbsp;Web Connecter application. It#39;s imperative to understand how the client#39;s accounting department configures the Quickbooks application and how it manages the financial records. Otherwise a developer may make an assumption that results in an inefficient or (worse) incorrect functionality./p pSimilar to having a resource available for support on the API itself, it#39;s invaluable to have access to team members on the client side that use the software on a daily basis so that nothing is missed./p h4Stability/h4 pMedium to large sized companies are becoming increasingly reliant on their websites to sustain and grow their businesses. Therefore, uptime is critical. And if the site depends on the uptime of a 3rd party integration to function properly, it may be useful to consider some form of redundancy or fallback solution. It is also important to make sure that support tickets can be filed with a maximum response time specified in anynbsp;service licensing agreement (SLA) with the client./p h4Communication and Coordination/h4 pThe rule of thumb here is simple: more moving parts in a project equals more communication time spent keeping everyone in sync. Additionally, it#39;s usually wise to develop against an API endpoint specifically populated with test data so that it will not impact the client#39;s production data. At some point, the test data will need to be cleared out and production data will need to be imported. This transition could be as simple as swapping a URL or it could involve significant amount of QA time testing and retesting full imports before making the final switch./p pThe best way to address these issues is simply to buffer in more communication time into the budget than a normal Drupal project./p h4SDKs/h4 pOne gotcha that can be particularly difficult to work around is that an API may require you to use their specific software development kit (SDK) instead of a native PHP library. This may require the server to run a different OS (Windows instead of Linux) and web server (IIs instead of Apache). If you#39;re not used to developing on these platforms, development time may be slowed down by a significant percentage. For example: a back-end developer may not be able to use the same IDE they are accustomed to (with all of their optimized configurations and memorized shortcuts). This requirement may be unavoidable in some circumstances, so the best way to deal with these situations is a simple percentage on the budgeted hours./p h4VMs/h4 pWhen possible, it is ideal for developers can work on their own machine locally with a fully replicate instance of the API they are interacting with. Example: Quickbooks connecting through their Web Connector application to read and write records from a Drupal Commerce site. To test this connection, it isnbsp;extremely helpful to have a local virtual machine (VM) with Windows and Quickbooks, which a developer could then use to trigger the process. If a project involves multiple developers, they could each have their own copy to use a sandbox./p pSetting up a local VM definitely adds an upfront cost to create. However, for larger projects this investment can generally be recouped many times over with respect to increased development speed and the ability to start from a consistent target./p h3Final Advice/h3 pBy now, we hope that we#39;ve made the case that it#39;s important to do your due diligence when taking on project involving integrations. And while this entire list of potential pain points may seem overkill, we#39;ve personally experienced the effects of every one of them at some point in our company#39;s history. Ultimately, both you and the client want to avoid the uncomfortable conversation of a project#39;s timeline slipping and going over budget. Therefore, it#39;s critical to have address these issues thoroughly and as early in the project as possible. If uncertainty is especially high, it#39;s usually beneficial to include a line item within the project statement of work to evaluate this piece separately. Finally, if you#39;re able to effectively negotiate the terms of a contract, the budget for the integration shouldn#39;t be set until an evaluation (even a partial one) has been completed./p pThoughts? Story to share? We#39;d love to get your feedback on how to improve upon this article./p /div/div/div
Categories: Drupal Feeds

Metal Toad: Drupal Solr Search with Domain Access filtering

Wed, 07/23/2014 - 4:34pm
pMetal Toad has had the privilege to work over the past two years with DC Comics. What makes this partnership even more exciting, is that the main dccomics.com site also includes sites for Vertigo Comics and Mad Magazine. Most recently Metal Toad was given the task of building the new search feature for all three sites. However, while its an awesome privilege to work with such a well known brand as DC, this does not come without a complex set of issues for the three sites when working with a href=http://lucene.apache.org/solr/Apache Solr/a search and Drupal./p ul class=links inlineli class=0 first lasta href=http://www.metaltoad.com/blog/drupal-solr-search-domain-access-filtering rel=tag title=Drupal Solr Search with Domain Access filteringRead more/a/li /ul
Categories: Drupal Feeds

Gizra.com: Headless Drupal - Form API, Drupal 9

Wed, 07/23/2014 - 4:00pm
h2Defining moment/h2 pA few months ago my DrupalCon Austin session was rejected. I was a bit upset, since presenting plays a big part in my trip to the states, and also surprised, as I mistakenly assumed my presentation repertoire would almost guarantee my session would be accepted. But the committee decided differently./p pThis has been an important moment for me. Two days later I told myself I don#39;t care. I mean, I cared about the empresentation/em, I just stopped caring that it was not selected, since I decided I was going to do it anyway. As an quot;unpluggedquot; BoF./p pa href=https://www.getpantheon.com/blog/drupal-development-gizra-wayThe Gizra Way/a. I think this is probably the best presentation I#39;ve given so far, and quite ironically my emrejected/em session is second only to Dries#39;s keynote in YouTube./p pYou see - I had a quot;a href=https://www.youtube.com/watch?v=dzm8kTIj_0Mthere is no spoon/aquot; moment. The second I realized it can be done differently, I was on my own track, perhaps even setting the path for others./p h2Form API, Drupal 9/h2 blockquote pI use Drupal because Form API is so great div class=smallNo one, ever/div/p /blockquote pa href=http://www.gizra.com/content/headless-drupal-form-api-drupal9/Continue reading…/a/p
Categories: Drupal Feeds

Acquia: Search in Drupal 8 - Thomas Seidl Nick Veenhof

Wed, 07/23/2014 - 10:57am
div class=field field-name-body field-type-text-with-summary field-label-hidden div class=field-items div property=content:encoded class=field-item evenpThomas Seidl and Nick Veenhof took a few minutes out of the Drupal 8 Search API code sprint at the Drupal DevDays in Szeged, Hungary to talk with me about the state-of-play and what's coming in terms of search in Drupal: one flexible, pluggable solution for search functionality with the whole community behind it./p /div /div /div span property=dc:title content=Search in Drupal 8 - Thomas Seidl amp; Nick Veenhof class=rdf-meta/span
Categories: Drupal Feeds

Clemens Tolboom: Interested in ReST and HAL?

Wed, 07/23/2014 - 9:42am
div class=field field-name-field-images field-type-image field-label-hiddendiv class=field-itemsdiv class=field-item evena href=/content/interested-rest-and-halimg src=http://build2be.com/sites/build2be.com/files/styles/medium/public/3707-1269760552-19166314f102a283f25c2d8d88c32a7a.jpg?itok=Ud4nd912 width=220 height=196 alt=http://www.droidforums.net/galleries/photos/hal-9000.4475/ title=HAL 9000 //a/div/div/divdiv class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item evenolli Checkout the issue queue for a href=https://www.drupal.org/project/issues/search/drupal?project_issue_followers=amp;status[]=Openamp;version[]=8.xamp;component[]=hal.moduleamp;component[]=rest.moduleamp;issue_tags_op=%3DHAL and ReST/a. /lili Use the quickstart tool: a href=https://github.com/build2be/drupal-rest-testhttps://github.com/build2be/drupal-rest-test/a. /li/olh2Need HAL?/h2 olli Install a href=https://github.com/mikekelly/hal-browserHAL Browser/a on your site to see what we got till now. /lili div class=codeblockcodecd drupal-root/code/div/li/ol/div/div/div
Categories: Drupal Feeds