Drupal Planet

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

Phase2: Profiling Drupal Performance with PHPStorm and Xdebug

Tue, 08/19/2014 - 3:34pm
pProfiling is about measuring the performance of PHP code, at least when we are talking about Drupal and a href=http://xdebug.org/Xdebug/a. You might need to profile your site or app if you work at a firm where performance is highly scrutinized, or if you are having problems getting a migration to complete. Whatever the reason, if you have been tasked with analyzing the performance of your Drupal codebase, profiling is one great way of doing so. Note that Xdebug’s profiler does not track memory usage. If you want to know more about memory performance tracking you should check out Xdebug’s a href=http://xdebug.org/docs/execution_traceexecution trace features/a./p h3emAlright then lets get started! /em/h3 pWhoa there cowboy! First you need to know that the act of profiling your code is itself taking resources to accomplish. The more work your code does, the more information that the profiler stores; file sizes for these logs can get very big very quickly. You have been warned. To get going with profiling Drupal in PHPStorm and Xdebug you need:/p ul lia title=PHPStorm href=http://www.jetbrains.com/phpstorm/ target=_blankPHPStorm/a/li liPHP with the a title=Xdebug href=http://xdebug.org/ target=_blankXdebug/a extension/li liA website running on Drupal./li /ul pTo setup your environment, edit your php.ini file and add the following lines:/ppre class=crayon-plain-tagxdebug.profiler_output_dir=/tmp/profiler/ xdebug.profiler_enable=on xdebug.profiler_trigger=on xdebug.profiler_append=on/prepDepending on what you are testing and how, you may want to adjust the settings for your site. For instance, if you are using Drush to run a migration, you can’t start the profiler on-demand, and that affects the profiler_trigger setting. For my dev site I used the php.ini config you see above and simply added a URL parameter “XDEBUG_PROFILE=on” to my site’s url; this starts Xdebug profiling from the browser./p pTo give you an idea of what is possible, lets profile the work required to view a simple Drupal node. To profile the node view I visited span style=text-decoration: underline;http://profiler.loc/node/48581?XDEBUG_PROFILE=on in my browser/span. I didn#8217;t see any flashing lights or hear bells and whistles, but I should have a binary file that PHPStorm can inspect, located in the path I setup in my php.ini profiler_output_dir directive./p p style=text-align: center;a href=http://www.phase2technology.com/wp-content/uploads/2015/08/profiler_url.pngimg class=wp-image-8401 aligncenter alt=profiler_url src=http://www.phase2technology.com/wp-content/uploads/2015/08/profiler_url-1024x100.png width=608 height=59 //a/p pFinally lets look at all of our hard work! In PHPStorm navigate to Tools-gt;Analyze Xdebug Profile Snapshot. Browse to your profiler output directory and you should see at least one cachgrind.out.%p file (%p refers to the process id the script used). Open the file with the largest process id appended to the end of the filename./p p style=text-align: center;img class=size-medium wp-image-8390 aligncenter alt=PHPStorm Cachgrind Picker src=http://www.phase2technology.com/wp-content/uploads/2015/08/Screen-Shot-2014-08-18-at-6.44.44-PM-266x300.png width=266 height=300 //p pWe are then greeted with a new tab showing the results of the profiler./p p style=text-align: center;a href=http://www.phase2technology.com/wp-content/uploads/2015/08/Screen-Shot-2014-08-18-at-6.46.02-PM.pngimg class=wp-image-8391 aligncenter alt=PHPStorm Xdebug Profiler src=http://www.phase2technology.com/wp-content/uploads/2015/08/Screen-Shot-2014-08-18-at-6.46.02-PM-1024x560.png width=655 height=358 //a/p p style=text-align: center; p style=text-align: left;The output shows us the functions called, how many times they were called, and the amount of execution time each function took. Additionally, you can see the hierarchy of all function calls and follow potential bottlenecks down to their roots./p p style=text-align: left;There you have it! Go wild and profile all the things! Just kidding, don’t do that./p
Categories: Drupal Feeds

Phase2: Profiling Drupal Performance with PHPStorm and Xdebug

Tue, 08/19/2014 - 3:00pm
pProfiling is about measuring the performance of PHP code, at least when we are talking about Drupal and a href=http://xdebug.org/Xdebug/a. You might need to profile your site or app if you work at a firm where performance is highly scrutinized, or if you are having problems getting a migration to complete. Whatever the reason, if you have been tasked with analyzing the performance of your Drupal codebase, profiling is one great way of doing so. Note that Xdebug’s profiler does not track memory usage. If you want to know more about memory performance tracking you should check out Xdebug’s a href=http://xdebug.org/docs/execution_traceexecution trace features/a./p h3emAlright then lets get started! /em/h3 pWhoa there cowboy! First you need to know that the act of profiling your code is itself taking resources to accomplish. The more work your code does, the more information that the profiler stores; file sizes for these logs can get very big very quickly. You have been warned. To get going with profiling Drupal in PHPStorm and Xdebug you need:/p ul lia title=PHPStorm href=http://www.jetbrains.com/phpstorm/ target=_blankPHPStorm/a/li liPHP with the a title=Xdebug href=http://xdebug.org/ target=_blankXdebug/a extension/li liA website running on Drupal./li /ul pTo setup your environment, edit your php.ini file and add the following lines:/ppre class=crayon-plain-tagxdebug.profiler_output_dir=/tmp/profiler/ xdebug.profiler_enable=on xdebug.profiler_trigger=on xdebug.profiler_append=on/prepDepending on what you are testing and how, you may want to adjust the settings for your site. For instance, if you are using Drush to run a migration, you can’t start the profiler on-demand, and that affects the profiler_trigger setting. For my dev site I used the php.ini config you see above and simply added a URL parameter “XDEBUG_PROFILE=on” to my site’s url; this starts Xdebug profiling from the browser./p pTo give you an idea of what is possible, lets profile the work required to view a simple Drupal node. To profile the node view I visited http://profiler.loc/node/48581?XDEBUG_PROFILE=on in my browser. I didn#8217;t see any flashing lights or hear bells and whistles, but I should have a binary file that PHPStorm can inspect, located in the path I setup in my php.ini profiler_output_dir directive./p pa href=http://www.phase2technology.com/wp-content/uploads/2015/08/profiler_url.pngimg alt=profiler_url src=http://www.phase2technology.com/wp-content/uploads/2015/08/profiler_url-1024x100.png width=608 height=59 //a/p pFinally lets look at all of our hard work! In PHPStorm navigate to Tools-gt;Analyze Xdebug Profile Snapshot. Browse to your profiler output directory and you should see at least one cachgrind.out.%p file (%p refers to the process id the script used). Open the file with the largest process id appended to the end of the filename./p pimg alt=PHPStorm Cachgrind Picker src=http://www.phase2technology.com/wp-content/uploads/2015/08/Screen-Shot-2014-08-18-at-6.44.44-PM-266x300.png width=266 height=300 //p pWe are then greeted with a new tab showing the results of the profiler./p pa href=http://www.phase2technology.com/wp-content/uploads/2015/08/Screen-Shot-2014-08-18-at-6.46.02-PM.pngimg alt=PHPStorm Xdebug Profiler src=http://www.phase2technology.com/wp-content/uploads/2015/08/Screen-Shot-2014-08-18-at-6.46.02-PM-1024x560.png width=655 height=358 //a/p pnbsp;/p pThe output shows us the functions called, how many times they were called, and the amount of execution time each function took. Additionally, you can see the hierarchy of all function calls and follow potential bottlenecks down to their roots./p pThere you have it! Go wild and profile all the things! Just kidding, don’t do that./p
Categories: Drupal Feeds

DrupalCon Amsterdam: Schedules, BOFS, Training in Amsterdam

Tue, 08/19/2014 - 1:20pm
div class=field field--name-body field--type-text-with-summary field--label-hiddendiv class=field__itemsdiv class=field__item evenpa href=https://amsterdam2014.drupal.org/scheduleThe schedule for DrupalCon Amsterdam is live/a, which means that you can start planning out every detail of your Amsterdam experience. You can start the hard work of choosing the sessions, BOFs, and social events you want to attend, and a href=https://amsterdam2014.drupal.org/schedulebuild your own schedule/a right on the DrupalCon Amsterdam site./p h3BOF scheduling is live/h3 pSpeaking of a href=https://amsterdam2014.drupal.org/birds-of-a-featherBOFs/a, you don’t have to wait until DrupalCon Amsterdam to claim yours: you can start using the a href=https://amsterdam2014.drupal.org/bofs/tuesdayonline booking feature/a today to schedule your BOFs. Be sure you do it soon, though— BOF rooms go fast!/p h3Register for training before 5 September/h3 pLastly, we need more people to a href=https://amsterdam2014.drupal.org/trainingregister to attend training/a at DrupalCon Amsterdam. Show us you're interested in these topics! Book before strong5 September/strong to make sure the course you want to attend runs. We know it's difficult to make a decision this early out, but classes which do not meet the minimum to run will be cancelled!/p pa href=https://amsterdam2014.drupal.org/trainingThe training options are all fantastic/a and a great opportunity to learn more about Drupal, so register today./p pSee you in Amsterdam!/p /div/div/div
Categories: Drupal Feeds

Drupalize.Me: Upgrading Drush to work with Drupal 8

Tue, 08/19/2014 - 9:00am
div class=field field-name-body field-type-text-with-summary field-label-hidden text-content text-secondarydiv class=field-itemsdiv class=field-item evenpWhen I first started learning Drupal, I remember the process of enabling and disabling modules on the Modules page and it took for-ev-er. My laptop was in serious danger of getting hurled across the room, due to my frustration. Then I discovered drush, and downloading and enabling modules was now performed with ease instead of pain and suffering. Of course there's a lot more you can do with drush than just download and enable modules, this is just one example./p pI've been using Drush 6.x on my local machine for quite some time now. Poking around Drupal 8's UI and seeing what's new, I haven't missed drush too much...until it was time to test drive a new contrib module for Drupal 8. When I typed into my Terminal window codedrush dl page_manager/code, I got quite the error message:/p img src=https://drupalize.me/sites/default/files/blog_post_images/drush-error-d8.png width=889 height=275 alt=Drush 6.1.0 does not support Drupal 8. /pDrush 6.x only works with Drupal 6 or 7. If I wanted to use Drush on my Drupal 8 site, I would need to upgrade to Drush 7.x./p/div/div/divdiv id=comment-wrapper-nid-1748/div
Categories: Drupal Feeds

Drupalize.Me: Upgrading Drush to work with Drupal 8

Tue, 08/19/2014 - 9:00am
div class=field field-name-body field-type-text-with-summary field-label-hidden text-content text-secondarydiv class=field-itemsdiv class=field-item evenpWhen I first started learning Drupal, I remember the process of enabling and disabling modules on the Modules page and it took for-ev-er. My laptop was in serious danger of getting hurled across the room, due to my frustration. Then I discovered drush, and downloading and enabling modules was now performed with ease instead of pain and suffering. Of course there's a lot more you can do with drush than just download and enable modules, this is just one example./p pI've been using Drush 6.x on my local machine for quite some time now. Poking around Drupal 8's UI and seeing what's new, I haven't missed drush too much...until it was time to test drive a new contrib module for Drupal 8. When I typed into my Terminal window codedrush dl page_manager/code, I got quite the error message:/p img src=http://drupalize.me/sites/default/files/blog_post_images/drush-error-d8.png width=889 height=275 alt=Drush 6.1.0 does not support Drupal 8. /pDrush 6.x only works with Drupal 6 or 7. If I wanted to use Drush on my Drupal 8 site, I would need to upgrade to Drush 7.x./p/div/div/divdiv id=comment-wrapper-nid-1748/div
Categories: Drupal Feeds

ComputerMinds.co.uk: Language lessons: What are you translating?

Tue, 08/19/2014 - 7:00am
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=schema:articleBody content:encodedh2Content (node-level) translation or entity (field-level) translation?/h2 pIt seems an obvious question to ask, but emwhat are you translating?/em/p pThe tools exist to translate just about anything in Drupal 7*, but in many different ways, so you need to know exactly what you're translating. Language is 'a first-class citizen', in the sense that any piece of text is inherently written by someone on some language, which Drupal 7 is built to recognise. Sometimes you want to translate each amp; every individual piece of text (e.g. at the sentence or paragraph level). Other times you want to translate a whole page or section that is made up of multiple pieces of text./p/div/div/divspan rel=schema:url resource=/drupal-code/language-lessons-what-are-you-translating class=rdf-meta/spanspan property=schema:name content=Language lessons: What are you translating? class=rdf-meta/span
Categories: Drupal Feeds

Joachim's blog: Getting Module Builder ready for Drupal 8

Tue, 08/19/2014 - 3:12am
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedpI've just made a commit to a href=https://www.drupal.org/project/module_builderModule Builder/a that adds unit tests. This is a big deal, because having these frees me up to start making the big changes that are needed for supporting Drupal 8's new structures: routes, plugins, forms, and so on./p pThe biggest challenge is going to be the interface. Currently, you give Module Builder just a module name and a list of hook names, and it does the necessary. On the command line it's nice and simple:/p pdiv class=codeblockcodedrush mb mymodule install schema node_insert form_alter views_data_alter/code/div/p pThe first parameter is the module name, and everything that follows is a hook name. Now we add to the mix requests such as a form called MyModuleCakeToppingForm, or an entity type plugin, or a route bake_my_cake and its page controller. How to elegantly specify all that over the command line, without making it horribly unwieldy and impossible to remember how to use?/p pIt's also going to be an interesting exercise in reading my own documentation and seeing how much sense it makes after something like 7 months away from the code./p pFrom what I recall, Module Builder uses a hierarchy of component generators to build your module. Taking our example above, the first thing that happens is that the Module generator class kicks in. 'So, you want a module, do you?' it asks, 'You'll need some of these.' And it begins to assemble a list of further generators, for the components it needs: an info file, and the hooks generator. The hooks generator does the actual job of examining your list of requested hooks, and decides based on that that you need three code files: a .module, a .install, and a .views.inc. So by now we have a tree of generators like this:/p pre - Module -- Info file -- Hooks --- Code file: .module --- Code file: .install --- Code file: .views.inc /prep This is not a class hierarchy; this is a tree of objects where each generator has a list of the generators beneath it, and is responsible for collecting data from them. Once we have the tree, we iteratively have each generator assemble the data it wants to contribute, starting with the Module generator at the top./p pThe original plan when I wrote this system was to make the smallest granularity be a file. The leaves of the generator tree would assemble the text for their file's contents, and the Module generator would collect the files up and return them to the caller for output (either in the UI, or to write them directly)./p pHowever, while the original intention of this system was that it could be generalised to base components other than modules (so profiles and themes, which are both supported to some extend but lack the UI, see above!), it's also proven to be extendable downwards to smaller components, and to be worthwhile to do so./p pEnter the Form generator. Once we have a generic Function generator (and its child class the HookImplementation), we can create a Form generator. Given a form machine name, 'foo_form', it simply knows to add three copies of the Function generator: 'foo_form', 'foo_form_validate', 'foo_form_submit', along with the correct parameters and some boiler plate code./p pAnd we can specialize this further: the AdminSettingsForm simply extends the Form generator, and adds a menu item component, which itself ensures hook_menu() is requested./p pAt this point it starts to get a bit complicated, as we have components that request other components that are in totally different parts of the component tree. That's the point at which I think I was when I realized I needed tests so that I can refactor and clean up the messy bits of this, and enhance and extend it, without breaking what's already there./p pSo that's the current state of Module Builder: not yet ready for Drupal 8, but has lots of potential. At this point, I'd really welcome input on the Drush interface, as that's the big quandary. And any input on new Drupal 8 component generators would be great too; there are a few open issues in the queue. And finally, Module Builder is a complex beast; should anyone looking at the code find it baffling and impenetrable, do please file a documentation issue to highlight the problem and request clarification./p /div/div/div
Categories: Drupal Feeds

Daniel Pocock: Is WebRTC private?

Mon, 08/18/2014 - 2:55pm
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedpWith the a href=https://lists.debian.org/debian-devel-announce/2014/08/msg00007.htmlexciting developments/a at a href=https://rtc.debian.orgrtc.debian.org/a, many people are starting to look more closely at browser-based real-time communications./p pSome have dared to ask: does it solve the privacy problems of existing solutions?/p h3Privacy is a relative term/h3 pPerfect privacy and its technical manifestations are hard to define. I had a go at it in a blog a href=http://danielpocock.com/the-gold-standard-in-free-communications-technologyon the Gold Standard for free communications technology/a on 5 June 2013. By pure co-incidence, a few hours later, a href=http://www.theguardian.com/world/2013/jun/23/edward-snowden-nsa-files-timelinethe first Snowden leaks appeared/a and this particular human right was suddenly thrust into the spotlight./p h3WebRTC and ICE privacy risk/h3 pWebRTC does not give you perfect privacy./p pAt least one astute observer at a href=http://france.debian.net/events/minidebconf2014/my session at Paris mini-DebConf 2014/a questioned the privacy of a href=http://tools.ietf.org/html/rfc5245Interactive Connectivity Establishment (ICE, RFC 5245)/a./p pIn its most basic form, ICE scans all the local IP addresses on your machine and NAT gateway and sends them to the person calling you so that their phone can find the optimal path to contact you. This clearly has privacy implications as a caller can work out which ISP you are connected to and some rough details of your network topology at any given moment in time./p h3What WebRTC does bring to the table/h3 pSome of this can be mitigated though: an ICE implementation can be tuned so that it only advertises the IP address of a dedicated relay host. If you can afford a little latency, your privacy is safe again. This privacy protecting initiative could be made by a browser vendor such as a href=http://www.mozilla.orgMozilla/a or it can be done in JavaScript by a softphone such as a href=http://jscommunicator.orgJSCommunicator/a./p pMany individuals are now using a proprietary softphone to talk to family and friends around the world. The softphone in question has properties like a virus, siphoning away your private information. This proprietary softphone is also an insidious threat to open source and free operating systems on the desktop. WebRTC is a positive step back from the brink. It gives people a choice./p pWebRTC is a particularly relevant choice for business. Can you imagine going to a business and asking them to make all their email communication through hotmail? When a business starts using a particular proprietary softphone, how is it any different? WebRTC offers a solution that is actually easier for the user and can be secured back to the business network using TLS./p pWebRTC is based on open standards, particularly HTML5. Leading implementations, such as the a href=https://www.resiprocate.org/WebRTC_and_SIP_Over_WebSocketsSIP over WebSocket support in reSIProcate/a, a href=http://jscommunicator.orgJSCommunicator/a and the a href=http://www.drucall.orgDruCall module for Drupal/a are fully open source. Not only is it great to be free, it is possible to extend and customize any of these components./p h3What is missing/h3 pThere are some things that are not quite there yet and require a serious effort from the browser vendors. At the top of the list for privacy:/p ullia href=http://www.lumicall.org/encryptionZRTP support/a - browsers currently support a href=http://tools.ietf.org/html/rfc5764DTLS-SRTP/a, which is based on X.509. ZRTP is more like a href=http://en.wikipedia.org/wiki/Pretty_Good_PrivacyPGP/a, a democratic and distributed peer-to-peer privacy solution without needing to trust some central certificate authority./li lia href=http://tools.ietf.org/html/rfc6091TLS with PGP/a - the TLS protocol used to secure the WebSocket signalling channel is also based on X.509 with the risk of a central certificate authority. There is increasing chatter about the need for TLS to use a href=http://en.wikipedia.org/wiki/Pretty_Good_PrivacyPGP/a instead of X.509 and WebRTC would be a big winner if this were to eventuate and be combined with ZRTP./li /ulpYou may think I'll believe it when I see it. Each of these features, including WebRTC itself, is a piece of the puzzle and even solving one piece at a time brings people further out of danger from the proprietary mess the world lives with today./p /div/div/div
Categories: Drupal Feeds

Drupal.org Featured Case Studies: Viraland

Mon, 08/18/2014 - 1:27pm
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/Viraland1.jpg?itok=Ka4eFh63 width=588 height=306 alt=Viraland - Homepage //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=http://www.viraland.gr/http://www.viraland.gr//a/div/div/divdiv class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item evenpViraland is a strongGreek/strong online community where you can find the latest viral messages from around the world. Users participate in the community by posting new content and sharing it through social channels. Strange, meaningful and popular messages that go viral are posted daily in Viraland, reflecting the interests of its users./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/viewsViews/a/divdiv class=field-item odda href=/project/panelsPanels/a/divdiv class=field-item evena href=/project/zenZen/a/divdiv class=field-item odda href=/project/mediaMedia/a/divdiv class=field-item evena href=/project/rpxJanrain Social Login/a/divdiv class=field-item odda href=/project/rulesRules/a/divdiv class=field-item evena href=/project/i18nInternationalization/a/divdiv class=field-item odda href=/project/field_permissionsField Permissions/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=/user/2287190highvrahos/a/div/div/div
Categories: Drupal Feeds

SitePoint PHP Drupal: Fine Tuning Drupal Themes with Patterns, Arg and Types

Mon, 08/18/2014 - 11:00am
pIn this article, we’ll discuss how you can leverage various Drupal API functions to achieve more fine grained theming. We’ll cover template preprocessing and alter hooks using path patterns, types and args(). We’ll use the arg() function which returns parts of a current Drupal URL path and some pattern matching for instances when you want [#8230;]/ppemContinue reading %a rel=nofollow href=http://www.sitepoint.com/fine-tuning-drupal-themes-patterns-arg-types/Fine Tuning Drupal Themes with Patterns, Arg and Types/a%/em/p
Categories: Drupal Feeds

Zivtech: Creating Parallax Scrolling with CSS

Mon, 08/18/2014 - 9:58am
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even pHere at Zivtech, we are obsessed with creating immersive experiences for mobile and the web using cutting-edge design and Open Source Software like Drupal and Angular.js. One of the web design techniques that we've had on our radar is Parallax Scrolling, which gives depth to a page by scrolling two dimensions of the site at different rates (for example, text in the front would scroll faster than the image behind it). Parallax Scrolling is most often associated with 2D video game development, but has been becoming more and more prevalent on the web (for some live examples see Creative Bloq's post a href=http://www.creativebloq.com/web-design/parallax-scrolling-1131762 target=_blank46 Great Examples of Parallax Scrolling/a).nbsp;/p pspan style=line-height: 1.538em;While we find this technique engaging, we never adopted it for our designs/spanspan style=line-height: 1.538em;nbsp;due to the fact that it relied heavily on Javascript tools and techniques that we found caused performance issues, and especially due to problems with making it work within a responsive web design. However, that may be about to change.nbsp;/spanspan style=line-height: 1.538em;In a recent post on his blog, Keith Clark wrote about an exciting new way to create Parallax Scrolling through CSS rather than Javascript, making for more mobile-friendly and responsive Parallax Scrolling effects. Clark writes:/span/p blockquotepDeferring the parallax effect to CSS removes all these issues and allows the browser to leverage hardware acceleration resulting in almost all the heavy lifting being handled directly by the compositor./p /blockquote pThis technique, which removes the bulk of the work off the browser, creates the illusion of 3D without bogging pages down. Now, with CSS, we can maintain the same effect without creating a disjointed experience across multiple platforms.nbsp;span style=line-height: 1.538em;Check out Keith's post on /spana href=http://blog.keithclark.co.uk/pure-css-parallax-websites/ style=line-height: 1.538em; target=_blankpure CSS parallax scrolling/aspan style=line-height: 1.538em; websites for code snippets and samples./span/p p!--break--/p /div/div/divdiv class=field field-name-taxonomy-vocabulary-2 field-type-taxonomy-term-reference field-label-inline clearfixdiv class=field-labelTerms:nbsp;/divdiv class=field-itemsdiv class=field-item evena href=/terms/drupal-planetDrupal Planet/a/divdiv class=field-item odda href=/terms/parallax-scrollingParallax Scrolling/a/divdiv class=field-item evena href=/terms/cssCSS/a/divdiv class=field-item odda href=/terms/javascriptJavaScript/a/divdiv class=field-item evena href=/terms/drupalDrupal/a/divdiv class=field-item odda href=/terms/angularjsAngular.js/a/divdiv class=field-item evena href=/terms/designDesign/a/divdiv class=field-item odda href=/terms/web-designWeb Design/a/divdiv class=field-item evena href=/terms/responsive-web-designresponsive web design/a/div/div/div
Categories: Drupal Feeds

Appnovation Technologies: Different Point of Views

Mon, 08/18/2014 - 9:25am
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encoded pThe a href=http://www.appnovation.com/content-tags/drupal-0 target=_blankDrupal/a Views module is an amazing tool. It certainly has contributed significantly to the widespread adoption of Drupal./p/div/div/divdiv class=field field-name-field-blog-header-image field-type-image field-label-hiddendiv class=field-itemsdiv class=field-item evena href=/blog/different-point-viewsimg typeof=foaf:Image src=http://www.appnovation.com/sites/default/files/styles/blog_listing_page_header/public/differentpointofviews.jpg?itok=GJ337jnX width=680 height=200 alt= //a/div/div/divdiv class=sharethis-buttonsdiv class=sharethis-wrapperspan st_url=http://www.appnovation.com/blog/different-point-views st_title=Different Point of Views class=st_facebook/span span st_url=http://www.appnovation.com/blog/different-point-views st_title=Different Point of Views class=st_twitter/span span st_url=http://www.appnovation.com/blog/different-point-views st_title=Different Point of Views class=st_sharethis/span script type='text/javascript'var switchTo5x = false;/scriptscript type='text/javascript' src='http://w.sharethis.com/button/buttons.js'/scriptscript type='text/javascript'stLight.options({publisher:dr-75626d0b-d9b4-2fdb-6d29-1a20f61d683});/script/div/div
Categories: Drupal Feeds

Gábor Hojtsy: Moving Drupal forward at Europe's biggest warm water lake

Mon, 08/18/2014 - 9:08am
div class=field field-name-body field-type-text-with-summary field-label-hidden view-mode-rssdiv class=field-itemsdiv class=field-item evenpa href=http://2014.drupalaton.hu/Drupalaton 2014/a was amazing. I got involved pretty late in the organization when we added sprinting capacity on all four days, but I must say doing that was well worth it. While the pre-planned schedule of the event focused on longer full day and half day workshops on business English, automation, rules, commerce, multilingual, etc. the sprint was thriving with backend developer luminaries such as Wim Leers, dawehner, fago, swentel, pfrennsen, dasjo as well as sizable frontend crew such as mortendk, lewisnyman, rteijeiro, emmamaria, etc. This setup allowed us to work on a very wide range of issues./p pa href=https://www.drupal.org/project/issues/search?issue_tags=Drupalaton%202014The list of 70+ issues we worked on/a shows our work on the drupal.org infrastructure, numerous frontend issues to clean up Drupal's markup, important performance problems, several release critical issues and significant work on all three non-postponed beta blockers at the time./p div style=text-align: center;img src=http://hojtsy.hu/files/14874949612_1aed1136a3_z.jpg /br /Drupalers shipped from port to port; a href=https://www.flickr.com/groups/2704663@N23/pool/Photo by TCPhoto/a/div pOur coordinated timing with a href=http://2014.tcdrupal.org/sprintsthe TCDrupal sprints/a really helped in working on some of the same issues together. We successfully closed one of the beta blockers shortly after the sprint thanks to coordinated efforts between the two events./p pOur list of issues also shows the success of the Rules training on the first day in bringing new people in to porting Rules components, as well as work on other important contributed modules: fixing issues with the Git deploy module's Drupal 8 port and work on the Drupal 8 version of CAPTCHA./p pThanks to the organizers, a href=http://2014.drupalaton.hu/sponsorsthe sponsors of the event/a including a href=https://assoc.drupal.org/grantsthe Drupal Association Community Cultivation Grants program/a for enabling us to have some of the most important Drupal developers work together on pressing issues, eat healthy and have fun on the way./p pemPs. There is never a lack of opportunity to work with these amazing people. a href=https://groups.drupal.org/node/427578Several days of sprints are coming up around DrupalCon Amsterdam/a in a little over a month! The weekend sprint locations before/after the DrupalCon days are also really cool! See you there!/em/p /div/div/div
Categories: Drupal Feeds

Acquia: Drupal Stories Kick Off: My Own Drupal Story

Mon, 08/18/2014 - 8:55am
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 evenpIt’s no secret that Drupalists are in high demand. I’ve blogged about the need for training more Drupalers and getting to them earlier in their careers a href=/blog/closing-drupal-education-gap target=_blankpreviously/a, but that’s just one aspect of the greater topic which merits a closer inspection as a cohesive whole./p/div /div /div span property=dc:title content=Drupal Stories Kick Off: My Own Drupal Story class=rdf-meta/span
Categories: Drupal Feeds

godel.com.au: Use Behat to track down PHP notices before they take over your Drupal site forever

Mon, 08/18/2014 - 8:15am
div class=field-blog-header-image-display div class=blog-header-image-inner data-backstretch-image-url=https://www.godel.com.au/sites/default/files/styles/darken_and_desaturated/public/8310058192_6df7d4d5f5_k_0.jpg?itok=2xEJy9X7/div /div div class=field-post-date Mon August 18, 2014 /div div class=field-title h2Use Behat to track down PHP notices before they take over your Drupal site forever/h2 /div div class=field-body pa href=http://docs.behat.org/en/v2.5/Behat/a is one of the more popular testing frameworks in the Drupal community at the moment, for various reasons. One of these reasons is the useful a href=https://www.drupal.org/project/drupalextensionBehat Drupal Extension/a that provides a codeDrupalContext/code class that can be extended to get a lot of Drupal specific functionality in your codeFeatureContext/code right off the bat./p pIn this post, I'm going to show you how to make Behat aware of any PHP errors that are logged to the codewatchdog/code table during each scenario that it runs. In Behat's default setup, a notice or warning level PHP error will not usually break site functionality and so won't fail any tests. Generally though, we want to squash every bug we know about during our QA phase so it would be great to fail any tests that incidentally throw errors along the way./p pThe main benefits of this technique are:/p ulliNo need to write extra step definitions or modify existing steps, but you'll get some small degree of coverage for all functionality that just happens to be on the same page as whatever you are writing tests for/li liVery simple to implement once you have a working Behat setup with the codeDrupalContext/code class and Drupal a title=API is an acronym for quot;Application Programming Interfacequot;. Technically, pretty much every piece of modern software written with internal APIs, as it simply refers to the low level set of quot;functionsquot; or quot;methodsquot; that a program can run to achieve a task. Most commonly, this term refers to a quot;publicquot; API though, which allows external software to directly run functions as though they were run by the current program. This is how integrations between two different websites are usually achieved and there are various standards and conventions that exist to guide how APIs should be constructed by programmers in order to ensure security and interoperability between systems. class=glossify-link href=/content/apiAPIimg src=/sites/all/themes/custom/gt/glossify.png class=glossify-img //a driver/li liPHP errors are usually very easy to cleanup if you notice them immediately after introducing them, but not necessarily 6 months later. This is probably the easiest way I've found to nip them in the bud, especially when upgrading contrib modules between minor versions (where it's quite common to find new PHP notices being introduced)./li /ulh2The setup/h2 pOnce you've configured the Drupal extension for Behat, and set the codeapi_driver/code to codedrupal/code in your codebehat.yml/code file, you can use Drupal API functions directly inside your codeFeatureContext.php/code file (inside your step definitions)./p pConceptually, what we're trying to achieve is pretty straightforward. We want to flush the codewatchdog/code table before we run any tests and then fail any scenario that has resulted in one or more PHP messages logged by the end of it. It's also important that we give ourselves enough debugging information to track down errors that we detect. Luckily, codewatchdog/code already keeps serlialized PHP error debug information serialized by default, so we can unserlialize what we need and print it straight to the console as required./p pYou will need to write a custom codeFeatureContext/code class extending codeDrupalContext/code with hooks for code@BeforeSuite/code and code@AfterScenario/code./p pYour code@BeforeSuite/code should look something like this:/p pre class=prettyprint lt;?php /** * @BeforeSuite */ public static function prepare(SuiteEvent $event) { // Clear out anything that might be in the watchdog table from god knows // where. db_truncate('watchdog')-gt;execute(); } /prepAnd your corresponding code@AfterScenario/code would look like this:/p pre class=prettyprint lt;?php /** * Run after every scenario. */ public function afterScenario($event) { $log = db_select('watchdog', 'w') -gt;fields('w') -gt;condition('w.type', 'php', '=') -gt;execute() -gt;fetchAll(); if (!empty($log)) { foreach ($log as $error) { // Make the substitutions easier to read in the log. $error-gt;variables = unserialize($error-gt;variables); print_r($error); } throw new \Exception('PHP errors logged to watchdog in this scenario.'); } } /prepMy apologies, I know this code is a little rough, I'm just using codeprint_r()/code to spit out the data I'm interested in without even bothering to process the Drupal variable substitutions through codeformat_string()/code, but hey, it's still legible enough for the average PHP developer and it totally works! Maybe someone else will see this, be inspired, and share a nicer version back here.../p /div div class=field-author-info div class=group-leftdiv class=field-profile-picture div class=user-picture a href=/users/david-meister title=View user profile.img src=https://secure.gravatar.com/avatar/23515b947aa5c46da2f113d264d99834.jpg?d=mmamp;s=160amp;r=G alt=David Meister#039;s picture title=David Meister#039;s picture //a /div /div/divdiv class=group-rightdiv class=field_nameh3a href=/users/david-meister title=View user profile. class=usernameDavid Meister/a/h3/divdiv class=field-position-titleDirector amp; lead developer/div/divdiv class=group-footerdiv class=field-position-descriptionDave is one of the two directors of Godel. He is also our best developer. Dave spends his time improving processes, researching new and shiny techniques and generally working on making Godel the best it can be./div/div /div div class=field-blog-social a class=facebook-share icon-facebook href=javascript:window.open('https%3A%2F%2Fwww.facebook.com%2Fsharer%2Fsharer.php%3Fu%3Dhttps%3A%2F%2Fwww.godel.com.au%2Frss%2Fplanet-drupal', '_blank', 'width=500,height=300');void(0); target=_blankf/aa class=twitter-share icon-twitter href=javascript:window.open('https%3A%2F%2Ftwitter.com%2Fshare', '_blank', 'width=500,height=300');void(0); target=_blankt/a /div div class=field-call-to-action div id=block-calltoaction class=block block-- div class=content h3Want to work with us?/h3pIf you have a project that requires a creative but practical approach.../pa href=mailto:josh@godel.com.au class=buttonGet in touch/a /div /div /div div class=field-custom-pager div role=article class=ds-1col node node-blog-entry view-mode-custom_pager clearfix div class=field-title h3a href=/blog/turn-your-emails-actions-activeinboxTurn your emails in to actions with ActiveInbox/a/h3 /div div class=field-post-date Thu July 31, 2014 /div div class=field-body Harness email hell with ActiveInbox, which turns your Gmail in to actionable tasks and helps you remind yourself to do the things you said you would. /div /div div class=next no-result node-blog-entry/div /div
Categories: Drupal Feeds

Deeson Online: Using Grunt, bootstrap, Compass and SASS in a Drupal sub theme

Mon, 08/18/2014 - 1:37am
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedstyle type=text/css !--/*--![CDATA[/* !--*/ pre { padding: 10px; width: 560px; } .post .meat p img:nth-child(n+1), .copy-jump-out p img:nth-child(n+1) { margin-left: 0; } /*--!]]*/ /stylepIf you have a separate front end design team from your Drupal developers, you will know that after static pages are moved into a Drupal theme there can be a huge gap in structure between the original files and the final Drupal site./p pWe wanted to bridge the gap between our theme developers, UX designers, front end coders, and create an all encompassing boilerplate that could be used as a starting point for any project and then easily ported into Drupal./p pAfter thinking about this task for a few weeks it was clear that the best way forward was to use Grunt to automate all of our tasks and create a scalable, well structured sub theme that all of our coders can use to start any project./p h3What is Grunt?/h3 pGrunt is a Javascript task runner that allows you to automate repetitive tasks such as file minifying files, javascript linting, CSS preprocessing, and even reloading your browser./p pJust like bootstrap, there are many resources and a vast amount of plugins available for Grunt that can automate any task you could think of, plus it is very easy to write your own, so setting Grunt as a standard for our boilerplate was an easy decision./p h3The purpose of this post/h3 pWe use bootstrap in most projects and recently switched to using SASS for CSS preprocessing bundled with Compass, so for the purpose of this tutorial we will create a simple bootstrap sub theme that utilises Grunt amp; Compass to compile SASS files and automatically reloads our browser every time a file is changed./p pYou can then take this approach and use the best Grunt plugins that suit your project./p h3Step 1. Prerequisites/h3 pTo use Grunt you will need node.js and ruby installed on your system. Open up terminal, and type:/p pre style=background:#fff;color:#000 node span style=color:#00f;font-weight:700-/spanv /prepre style=background:#fff;color:#000 ruby span style=color:#00f;font-weight:700-/spanv /prepIf you don't see a version number, head to the links below to download and install them./p pDon’t have node? a href=http://nodejs.org/ target=_blankDownload it here/a/p pDon’t have ruby? a href=http://code.tutsplus.com/tutorials/how-to-install-ruby-on-a-mac--net-21664 target=_blankFollow this great tutorial/a/p h3Step 2. Installing Grunt/h3 pOpen up terminal, and type:/p pre style=background:#fff;color:#000 sudo npm install -g grunt-cli /prepThis will install the command line interface for Grunt. Be patient whilst it is downloading as sometimes it can take a minute or two./p h3Step 3. Installing Compass and Grunt plugins/h3 pBecause we want to use the fantastic set of mixins and features bundled with Compass, lets install the Compass and SASS ruby gems./p pOpen up terminal, and type:/p pre style=background:#fff;color:#000 sudo gem install sass /prepre style=background:#fff;color:#000 sudo gem install compass /prepFor our boilerplate we only wanted to install plugins that we would need in every project, so we kept it simple and limited it to Watch, Compass and SASS to compile all of our files. Our team members can then add extra plugins later in the project as and when needed./p pSo lets get started and use the node package manager to install our Grunt plugins./p pSwitch back to Terminal and run the following commands:/p pre style=background:#fff;color:#000 sudo npm install grunt-contrib-watch —save-dev /prepre style=background:#fff;color:#000 sudo npm install grunt-contrib-compass —save-dev /prepre style=background:#fff;color:#000 sudo npm install grunt-contrib-sass —save-dev /preh3Step 4. Creating the boilerplate/h3 pNote: For the purposes of this tutorial we are going to use the bootstrap sub theme for our Grunt setup, but the same Grunt setup described below can be used with any Drupal sub theme./p ul liCreate a new Drupal site/li liDownload the bootstrap theme into your sites/all/themes directorybr / pre style=background:#fff;color:#000 drush dl bootstrap /pre/li liCopy the bootstrap starter kit (strongsites/all/themes/bootstrap/bootstrap_subtheme/strong) into your theme directory/li liRename strongbootstrap_subtheme.info.starterkit /strongtostrong bootstrap_subtheme.info/strong/li liNavigate to strongadmin/appearance/strong and click “strongEnable, and set default/strong for your sub-theme./li /ul pYour Drupal site should now be setup with Bootstrap and your folder structure should now look like this:/p pimg alt= src=/sites/default/files/uploads/subtheme-structure.jpg style=width: 404px; height: 271px; //p pFor more information on creating a bootstrap sub theme check out the a href=https://www.drupal.org/node/1978010 target=_blankcommunity documentation/a./p h3Step 5. Switching from LESS to SASS/h3 pOur developers liked less, our designers likes SASS, but after a team tech talk explaining the benefits of using SASS with Compass (a collection of mixins with an updater with some cleaver sprite creation), everyone agreed that SASS was the way forward./p pOfficially Bootstrap is now packaged with SASS, so lets replace our .less files with .scss files in our bootstrap_subtheme so we can utilise all of the mixin goodness that comes with it SASS amp; Compass./p ul liHead over to bootstrap and a href=http://getbootstrap.com/getting-started/#download target=_blankdownload the SASS version/a/li liCopy the strongstylesheets/strong folder from strongboostrap-sass/assets//strong and paste it into your strongbootstrap_subtheme/strong/li liRename the strongstylesheets/strong folder to strongbootstrap-sass/strong/li liCreate a new folder called strongcustom-sass/strong in strongbootsrap_subtheme/strong/li liCreate a new file in the strongcustom-sass/strong called strongstyle.scss/strong/li liImport strongbootstrap-sass/bootstrap.scss/strong into strongstyle.scss/strong/li /ul p​You should now have the following setup in your sub theme:br /img alt= src=/sites/default/files/uploads/grunt-style-css.png style=width: 672px; height: 233px; //p p class=p1span class=s1We are all set!/span/p h3Step 6. Setting up Grunt - The package.json amp; Gruntfile.js/h3 pNow lets configure Grunt to run our tasks. Grunt only needs two files to be setup, a package.json file that defines our dependencies and a Gruntfiles.js to configure our plugins./p pWithin bootstrap_subtheme, create a package.json and add the following code:/p pre style=background:#fff;color:#000 { span style=color:#036a07name/span: span style=color:#036a07bootstrap_subtheme/span, span style=color:#036a07version/span: span style=color:#036a071.0.0/span, span style=color:#036a07author/span: “span style=color:#00f;font-weight:700Your/span span style=color:#00f;font-weight:700Name/spanspan style=color:#036a07, /spanhomepagespan style=color:#036a07: /spanhttp:span style=color:#06f;font-style:italic//homepage.com,/span span style=color:#036a07engines/span: { span style=color:#036a07node/span: span style=color:#036a07gt;= 0.8.0/span }, span style=color:#036a07devDependencies/span: { span style=color:#036a07grunt-contrib-compass/span: span style=color:#036a07v0.9.0/span, span style=color:#036a07grunt-contrib-sass/span: span style=color:#036a07v0.7.3/span, span style=color:#036a07grunt-contrib-watch/span: span style=color:#036a07v0.6.1/span } }/prepimg alt= src=/sites/default/files/uploads/package-json.png style=color: rgb(34, 34, 34); font-family: Arial, Verdana, sans-serif; width: 672px; height: 255px; //p pIn this file you can add whichever plugins are best suited for your project, check out the full list of plugins at the official a href=http://gruntjs.com/plugins target=_blankGrunt site/a./p h3Install Grunt dependencies/h3 pNext, open up terminal, cd into strongsites/all/themes/bootstrap_subtheme/strong, and run the following task:/p pre style=background:#fff;color:#000 sudo npm install /prepThis command looks through your strongpackage.json/strong file and installs the plugins listed. You only have to run this command once when you set up a new Grunt project, or when you add a new plugin to strongpackage.json/strong./p pOnce you run this you will notice a new folder in your strongbootstrap_subtheme/strong called strongnode_modules/strong which stores all of your plugins. If you are using git or SVN in your project, make sure to ignore this folder./p pNow lets configure Grunt to use our plugins and automate some tasks. Within strongbootstrap_subtheme/strong, create a strongGruntfile.js/strong file and add the following code:/p pre style=background:#fff;color:#000 span style=color:#6d79de;font-weight:700module/span.span style=color:#0000a2;font-weight:700exports/span span style=color:#687687=/span span style=color:#00f;font-weight:700function/span (grunt) { grunt.initConfig({ watch: { src: { files: [‘span style=color:#687687*/spanspan style=color:#687687*/spanspan style=color:#06f;font-style:italic/*.scss', '**//spanspan style=color:#687687*/span.phpspan style=color:#036a07'], tasks: ['/spancompass:devspan style=color:#036a07'] }, options: { livereload: true, }, }, compass: { dev: { options: { sassDir: '/spancustomspan style=color:#687687-/spansass/scssspan style=color:#036a07', cssDir: '/spancssspan style=color:#036a07', imagesPath: '/spanassets/imgspan style=color:#036a07', noLineComments: false, outputStyle: '/spancompressedspan style=color:#036a07' } } } }); grunt.loadNpmTasks('/spangruntspan style=color:#687687-/spancontribspan style=color:#687687-/spancompassspan style=color:#036a07'); grunt.loadNpmTasks('/spangruntspan style=color:#687687-/spancontribspan style=color:#687687-/spansassspan style=color:#036a07'); grunt.loadNpmTasks('/spangruntspan style=color:#687687-/spancontribspan style=color:#687687-/spanwatchspan style=color:#036a07'); }; /span/prepThis file is pretty straight forward, we configure our watch tasks to look for certain files and reload our browser, and then we define our scss and css directories so that compass knows where to look./p pI won’t go into full detail with the options available, but visit the links below to see the documentation:/p pa href=https://github.com/gruntjs/grunt-contrib-watch target=_blankWatch documentatation/a/p pa href=https://github.com/gruntjs/grunt-contrib-compass target=_blankSASS documentatation/a/p pimg alt= src=/sites/default/files/uploads/gruntfile-js.png style=width: 709px; height: 447px; //p p /p h3Step 7. Enabling live reload/h3 pDownload and enable the livereload module into your new Drupal site. By default, you will have to be logged in as admin for live reload to take effect, but you can change this under Drupal permissions./p pOnce you enable livereload, refresh your browser window to load the livereload.js library./p h3Step 8. Running Grunt/h3 pWe are all set! Head back over to Terminal and check you are in the bootstrap_subtheme directory, then type:/p pre style=background:#fff;color:#000 grunt watch /prepimg alt= src=/sites/default/files/uploads/waiting.png style=width: 470px; height: 213px; //p pNow every time you edit a scss file, Grunt will compile your SASS into a compressed style.css file and automatically reload your browser./p pGive it a go by importing compass into the top of your style folder and changing the body background to be a compass mixin./p pre style=background:#fff;color:#000 span style=color:#00f;font-weight:700@import/span span style=color:#036a07'compass'/span; span style=color:#00f;font-weight:700@import/span span style=color:#036a07'../bootstrap-sass/bootstrap.scss'/span; span style=color:#06f;font-style:italic/* * Custom overrides *//span span style=font-weight:700body/span { @include span style=color:#6d79de;font-weight:700background/span(linear-gradient(#eee, #fff)); } /prepimg alt= src=/sites/default/files/uploads/sass-grunt-import.png style=width: 843px; height: 236px; //p pTo stop Grunt from watching your files, press strongCtrl/strong and strongC/strong simultaneously on your keyboard./p h3Step 9. Debugging/h3 pOne common problem you may encounter when using Grunt alongside live reload is the following error message:/p pre style=background:#fff;color:#000 Fatal error: Port 35729 is already in use by another process. /prepimg alt= src=/sites/default/files/uploads/fatal-error.png style=width: 470px; height: 213px; //p pThis means that the port being used by live reload is currently in use by another process, either by a different grunt project, or an application such as Chrome./p pIf you experience this problem run the following command and find out which application is using the port./p pre style=background:#fff;color:#000 lsof | grep 35729 /prepSimply close the application and run “grunt watch” again. If the error still persists and all else fails, restart your machine and try to stop Grunt from watching files before moving on to another project./p h3Next steps…/h3 pThis is just a starting point on what you can achieve using Grunt to automate your tasks and gives you a quick insight to how we go about starting a project./p pOther things to consider:/p ul liDuplicating the strong_variables.scss/strong bootstrap file to override the default settings./li liAdding linted, minified javascript files using the a href=https://github.com/gruntjs/grunt-contrib-uglify target=_blankuglify plugin/a/li liConfigure Grunt to automatically validate your markup using the a href=https://github.com/code-computerlove/grunt-w3c-markup-validation/blob/master/README.md target=_blankW3C Markup Validator/a/li liWrite your own Grunt plugins to suite your own projects/li /ul h5Let me know your thoughts - you can share your ideas and views in the comments below./h5 p /p /div/div/divdiv class=field field-name-node-link field-type-ds field-label-hiddendiv class=field-itemsdiv class=field-item evena href=/labs/using-grunt-bootstrap-compass-and-sass-drupal-sub-themeRead more/a/div/div/divdiv class=field field-name-title field-type-ds field-label-hiddendiv class=field-itemsdiv class=field-item even property=dc:titleh2Using Grunt, bootstrap, Compass and SASS in a Drupal sub theme/h2/div/div/divdiv class=field field-name-meta field-type-ds field-label-hiddendiv class=field-itemsdiv class=field-item evenBy a href=/category/author/david-allardDavid Allard/a | 18th August 2014/div/div/div
Categories: Drupal Feeds

Victor Kane: Super simple example of local drush alias configuration

Sun, 08/17/2014 - 9:12am
!-- google_ad_section_start --pSo I have a folder for drush scripts _above_ several doc root folders on a dev user's server. And I want to run status or whatever and my own a href=http://drush.ws/docs/shellscripts.html target=_blankcustom drush scripts/a on _different_ Drupal web app instances. Drush has alias capability for different site instances, so you can do:/p p$ drush @site1 status/p pSo, how to set up an aliases file?/p p(I'm on Ubuntu with Drush 6.2.0 installed with PEAR as per this great d.o. doc page a href=https://www.drupal.org/node/2132447 target=_blankInstalling Drush on Any Linux Server Out There/a (a href=http://www.kalamuna.com/ target=_blankKalamuna/a people, wouldn't you know it?))./p pCareful reading of the a href=http://drush.ws/excellent drush documentation/a points you to a a href=http://drush.ws/docs/shellaliases.html target=_blankDrush Shell Aliases/a doc page, and from there to the actual a href=http://drush.ws/examples/example.aliases.drushrc.php target=_blankexample aliases file/a that comes with every drush installation./p pSo to be able to run drush commands for a few of my local Drupal instances, I did this:/p ul liIn my Linux user directory, I created the file ~/.drush/aliases.drushrc.php/li liContents:/li /ul prelt;?php $aliases['site1'] = array( 'root' =gt; '/home/thevictor/site1/drupal-yii', 'uri' =gt; 'drupal-yii.example.com', ); $aliases['site2'] = array( 'root' =gt; '/home/thevictor/site2', 'uri' =gt; 'site2.example.com', );/prepThen I can do, from anywhere as long as I am logged in as that user:/p pre$ cd /tmpbr /$ drush @site1 statusbr /...br /$ drush @site2 status/prepand lots of other good stuff. Have a nice weekend./p p/p!-- google_ad_section_end --div class=og_rss_groups/divpa href=http://awebfactory.com.ar/node/527 target=_blankread more/a/p
Categories: Drupal Feeds

Wesley Tanaka: Fast, Low Memory Drupal 6 System Module

Fri, 08/15/2014 - 8:24pm
pA a rel=nofollowDrupal 5 version of this module/a is also available.nbsp; If you would like this patch to be committed to Drupal core, please do not leave a comment on this page—please instead add your comment to a rel=nofollow target=_blank href=http://drupal.org/node/455092Drupal issue #455092/a./p pThis is a drop-in replacement for the codesystem.module/code of Drupal 6.33 which makes your Drupal 6 sitenbsp;a rel=nofollowuse less memory/a and may even make it faster. A test I ran in a development environment with a stock Drupal 6 installation suggested that I got:/ppa rel=nofollow target=_blank href=http://wtanaka.com/drupal/system-6read more/a/p
Categories: Drupal Feeds

Appnovation Technologies: Some World-Class Museums Using Drupal

Fri, 08/15/2014 - 3:56pm
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encoded pI love museums and galleries! I love Open Source! I love a class=links href=http://www.appnovation.com/technologies/drupal target=_blankDrupal/a! Why not weave them all together into a single, harmonious blog post, I thought…./p/div/div/divdiv class=field field-name-field-blog-header-image field-type-image field-label-hiddendiv class=field-itemsdiv class=field-item evena href=/blog/some-world-class-museums-using-drupalimg typeof=foaf:Image src=http://www.appnovation.com/sites/default/files/styles/blog_listing_page_header/public/worldclassmuseum.jpg?itok=Orl6koxz width=680 height=200 alt= //a/div/div/divdiv class=sharethis-buttonsdiv class=sharethis-wrapperspan st_url=http://www.appnovation.com/blog/some-world-class-museums-using-drupal st_title=Some World-Class Museums Using Drupal class=st_facebook/span span st_url=http://www.appnovation.com/blog/some-world-class-museums-using-drupal st_title=Some World-Class Museums Using Drupal class=st_twitter/span span st_url=http://www.appnovation.com/blog/some-world-class-museums-using-drupal st_title=Some World-Class Museums Using Drupal class=st_sharethis/span script type='text/javascript'var switchTo5x = false;/scriptscript type='text/javascript' src='http://w.sharethis.com/button/buttons.js'/scriptscript type='text/javascript'stLight.options({publisher:dr-75626d0b-d9b4-2fdb-6d29-1a20f61d683});/script/div/div
Categories: Drupal Feeds

Mediacurrent: Join Mediacurrent for These Drupal and Digital Marketing Events

Fri, 08/15/2014 - 3:16pm
img typeof=foaf:Image src=http://www.mediacurrent.com/sites/default/files/styles/thumb_blog_spotlight/public/upcoming-events.png?itok=lkax8KT6 width=200 height=152 / pSome Mediacurrent's top talent will be leading discussions on the latest developments in Drupal and digital marketing trends in many upcoming events. Check out the links below for more information and to register. We hope to see you there and make sure you stop by and say “hello”!/p
Categories: Drupal Feeds