Planet Drupal

Subscribe to flux Planet Drupal - aggregated feeds in category Planet Drupal
Mis à jour : il y a 54 sec

Gbyte blog: Prevent "Access Denied" for anonymous users - Session node access module

dim, 11/10/2015 - 18:36
Today's users are becoming increasingly spoiled by technologies allowing them to deeply interact with websites without having to create an account first. To keep up with this development and to entice users to use your website without them having to give up any personal information requires a bit of problem solving in Drupal.
Catégories: Elsewhere

ActiveLAMP: Drupal to Ember without Saving

sam, 10/10/2015 - 02:00

Running headless Drupal with a separate javascript framework on the front-end can provide amazing user experiences and easy theming. Although, working with content editors with this separation can prove to be a tricky situation.

Catégories: Elsewhere

Drupal Association News: DrupalCon North America RFP is Open!

ven, 09/10/2015 - 21:13

We are thrilled to announce that we have opened the RFP process and are accepting bids for the 2017 North American DrupalCon, and beyond.

DrupalCon is a pretty special event, it brings together thousands of people from across the globe who use, develop, design, and support the Drupal platform. It is easily the most widely attended Drupal event in the world.

If you are eager for your city to host a DrupalCon we recommend you send this link to your city's Convention Center or Tourism Bureau. We have begun outreach to cities that our DrupalCon team, and the community, has identified as a good fit. That said, we are always welcome to suggestions.

If you are a convention center or tourism bureau and have any questions, feel free to reach out to us.

We appreciate your interest in DrupalCon and can't wait to tell you where the next Con will be!

North America image by Eric Fischer on flickr.

Catégories: Elsewhere

Drupal core announcements: Drupal 8 is in RC! Yay! What happens to my patches now?

ven, 09/10/2015 - 18:59

Now that Drupal 8 is in release candidate phase, the goal is to get out of release candidate phase and onto release as quickly as possible. That means we'll be locking down the patches committed to 8.0.x fairly significantly, so as not to potentially disrupt stability.

What patches can get committed now?

This is a complete list of the issues that are allowed in Drupal 8 before 8.0.0:

  • critical issues: Issues that are (legitimately ;)) marked critical are the first priority to resolve ASAP during release candidate. We can and will roll back any other types of patches if they introduce critical issues, or impact our ability to fix a critical issue. Note that we may choose to defer critical fixes to 8.0.x/8.1.x if the impact vs. disruption ratio risks postponing release.
  • rc eligible: This tag is for non-invasive patches which solely make coding standards, testing, and docs improvements. Anyone may add (or triage) this tag.
  • rc target: These are a handful of exceptions to the above; generally major issues with both a high impact and low disruption that would be much better/easier to get in before release than after. Only core committers should set this tag.

And... that's it! :) If you feel your non-critical, non-docs/coding standards/tests patch should be considered for an exception to be committed during RC use the rc target triage tag to alert core committers to it. They can then review and choose to switch to rc target or not. In order to aid committers in making that decision, a good issue summary containing rc target justification will really help. A good issue summary is of course also important on rc eligible issues.

Make sure to read Allowed changes during the Drupal 8 release cycle and in particular the section on release candidates for more detailed information.

How long does this "commit freeze" go on?

Until Drupal 8.0.0's release. That could be a minimum of 4 weeks (RCs are released every two weeks, and we'll need at least two of them [including a 3 week notice on release date] to tell if we're release-ready), or a maximum of $your_bet_here. ;)

Over at Release branches for core patch releases/release candidates we're discussing ways we can potentially commit RTBC patches during RC without disrupting our ability to ship (think feature branches 0.1). Thoughts over there would be welcome.

Catégories: Elsewhere

Lullabot: A Tale of Two Base Themes in Drupal 8 core

ven, 09/10/2015 - 18:24

Hi, my name is Marc, and I am a markup nerd.

My skin crawls when I see HTML filled with divs tucked inside each other over and over again like a Russian nesting doll. My shoulders tense up when I see class names spilling out of a class attribute like clowns in a circus car. Conversely, my heart sings at the sight of cleanly crafted HTML that uses just the right elements to describe its contents, with sensible BEM-style classes that simplify styling and clarify how the markup has been structured.

Because I prefer being very particular about markup, I’ve been known to develop an eye twitch from time to time while theming Drupal sites.

In 2013 I started contributing fairly regularly to the development of Drupal 8. Working at Lullabot since September 2014 has made it possible to devote even more of my time to working on Drupal 8 front-end improvements. There’s a great team of developers around the world focused on improving the theming experience in Drupal 8, and it’s been a joy collaborating with them. I’m very excited about how we’ve worked together to make Drupal 8 better for front-end developers and themers.

Thanks to those efforts, I’m looking forward to having much better tools for carefully crafting markup in Drupal 8.

Making markup shine in Drupal 8

The new templating engine in Drupal 8, Twig, makes it easier to change markup without knowing the ins and outs of PHP. Most of the classes in Drupal are now added in the Twig templates themselves, rather than being buried deep in preprocessor and theme functions. Better yet, by turning on Twig Debug in the services.yml file in your sites/default folder, you can see which templates are generating each bit of markup when you view source. You’ll find which template file is currently in use along with suggestions for filenames you can use in your theme to override that template.

The markup itself has been greatly improved as well. Contributors worked to improve template logic so that only necessary divs or other elements are generated: yes, there are fewer wrapper divs in Drupal 8! In previous versions of Drupal, field markup introduced wrapper after wrapper, often unnecessarily. Now if you have only one value and no label for a field...there’s only one div.

Two base themes in Drupal 8: Classy and Stable

In general, your theme has the final say on Drupal’s markup, CSS, and JS. Themes can override templates, CSS, and JS that come from core modules, contributed modules and base theme. Themes can have parent-child relationships, with the parent theme serving as the base theme for a sub-theme. A sub-theme inherits templates, CSS, and JS from its base theme. Themes can also have grandparent themes or even great-grandparent themes: we’ll talk about chaining together contrib themes with core themes in just a bit.

Drupal’s markup comes in two flavors, depending on what you choose as your base theme.

  • If you want to start with markup with sensible classes you can use as styling hooks, then you can use Classy as your base theme. This is similar to the approach used with Drupal 7’s default markup, but with classes and markup significantly improved.
  • However, if you want markup that is even more lean, you can use Stable as your base theme; in fact that’s the default. Stable still has some classes needed for front-end UI components like the toolbar and contextual links, but in general has far fewer classes than Classy, and even fewer wrapper elements.

By providing two flavors of markup with the Stable and Classy base themes, Drupal 8 allows you to choose how you want to approach markup changes:

  • Tweak the classes Drupal provides as a starting point (Classy),
  • Only add classes where you think they are essential (Stable).

If you prefer to start from scratch in order to use highly customized markup patterns, Stable may be the right base theme for you. This approach can be useful when implementing a framework like Bootstrap or Foundation that relies upon very particular markup patterns.

Field markup: Stable vs Classy

Let’s look at one example of how markup can differ between Stable and Classy.

Here’s Classy field markup when you have a label and multiple field values:

<div class="field field--name-field-favorite-horses field--type-string field--label-above"> <div class="field__label">Favorite horses</div> <div class='field__items'> <div class="field__item">Black Stallion</div> <div class="field__item">Shadowfax</div> <div class="field__item">Hidalgo</div> </div> </div>

In contrast, here’s the same markup when using Stable:

<div> <div>Favorite horses</div> <div> <div>Black Stallion</div> <div>Shadowfax</div> <div>Hidalgo</div> </div> </div>

Just for fun, look how much slimmer Classy’s markup is when only one value is allowed on a field, and the label is hidden:

<div class="field field--name-field-best-horse field--type-string field--label-hidden field__item">Mister Ed</div>

That markup gets even leaner with Stable:

<div>Mister Ed</div>

To see how far we've come, here's how that markup would look by default in Drupal 7:

<div class="field field-name-field-best-horse field-type-text field-label-hidden"> <div class="field-items"> <div class="field-item even">Mister Ed</div> </div> </div>

That’s a lot more markup than you really need when you know there will only ever be one value for a field.

From this example, you can see that Stable is a starting point. You would want to customize Stable’s markup in your theme to add sensible classes. Writing CSS using only HTML elements in your selectors is painful. However, with Stable you can build up only the classes you need, rather than spending time evaluating which classes in Classy should be retained.

Keeping Core markup reliable

One of the primary purposes of the Stable theme, which is new to core, is to provide a backwards compatibility layer for Drupal’s core markup, CSS, and JS. Those will all be locked within the Stable theme as of Drupal 8 RC1. You can rely upon Stable as your default base theme without worry that the markup will change on you during the Drupal 8 cycle.

The Classy theme will also provide reliable markup, CSS and JS, most likely by using Stable as its base theme.

So whether you choose Stable or Classy as your base theme, you can also rely on its markup whether you have Drupal 8.0.5 or Drupal 8.3.4 installed. Both Stable and Classy will still receive bug fixes—for example, if the wrong variable is being printed by a template. The goal is to make these fixes in a way that ensures backwards compatibility.

Drupal 8 also ships with two other themes, Bartik and Seven.

  • Bartik is the default theme when you install Drupal 8 and demonstrates one possible front-end implementation.
  • Seven serves as the default admin theme.

Both have been improved in Drupal 8 and use Classy as their base theme. Bartik and Seven can also continue to change throughout Drupal 8, so you wouldn’t want to use Bartik or Seven as a base theme. Bartik or Seven’s markup could be tweaked in 8.1 or 8.2, which could break your site’s appearance if you use Bartik or Seven as a base for your theme.

In the meantime, during the Drupal 8 cycle, core markup can continue to evolve. Contributors can continue to clean things up so that we don’t need to spend nearly as much time working on tidying our markup when work on Drupal 9 begins.

How to define the base theme in .info.yml

Many of a theme’s basic settings are defined in a file called within your theme folder, where MYTHEME is replaced with the name of your theme. This is similar to the .info file in Drupal 8.

If you want to use Classy as your theme, add the following in your theme’s .info.yml file:

base theme: classy

If you want Stable as your base theme, you do not need to add a base theme setting to your theme’s .info.yml. If no base theme is declared, by default your base theme will be set to Stable.

If you don’t want a base theme at all, add this to your theme’s .info.yml file:

base theme: false

That would mean your theme would use Drupal 8’s core templates, CSS, and JS directly, rather than passing through Stable or Classy first. That’s a risky strategy. If something changes in core, you might need to update your theme accordingly.

Using Classy or Stable as your base theme is a more reliable way to ensure the stability of your theme.

Chaining base themes together

Contrib themes can also choose to use Classy or Stable as their base theme, or no base theme at all. That’s right, a base theme like Zen can have Stable or Classy as its base theme. A sub-theme of Zen would have Zen as its base theme, but would also inherit from Zen’s base theme, whether that’s Classy or Stable. So while you might end up using a contrib theme as a base for your theme, ultimately that contrib theme will likely trace back to one of the two base themes in core, Classy or Stable.

When you evaluate base themes like Zen or Omega or Adaptive Theme, make sure to check their info.yml file for the base theme setting. If you see base theme: false, you may want to be wary as core markup will surely change. If you see Classy or no base theme setting at all, you’ll have an idea what kind of markup (and stability) to expect from that contrib theme.

To pull together what we've learned so far, this graphic created by Morten DK shows how Drupal's core themes interact with contrib themes or themes you might develop:

How Drupal 8 themes relate to each other

This is a good look at how things stand in October 2015, with Drupal 8 RC1 recently released. As more and more people try out Drupal 8 and build themes, we'll continue to develop a better understanding of how best to set up contrib and custom themes.

Learning more

You can learn more about theming in Drupal 8 by checking out John Hannah’s great articles on the subject, Drupal 8 Theming Fundamentals Part I and Part II

I’m definitely looking forward to working with markup in Drupal 8, more so than I ever have before. Hopefully you will too!

Catégories: Elsewhere

Drupal core announcements: Recording from Oct 9th 2015 Drupal 8 critical issues discussion

ven, 09/10/2015 - 17:50

Last week we did not have this meeting, because .... there were no critical issues to talk about. This time however, we did have one and we also took the opportunity to talk about what is going to happen to Drupal 8 now, what things would be allowed, and so on. Watch this recording for some practical information and questions answered as well as discussion of some specific issues we raised. (See all prior recordings).

If you also have significant time to work on issues important for Drupal 8's release and we did not include you, let me know as soon as possible.

The meeting log is as follows (all times are CEST real time at the meeting):

[11:12am] jibran:
[11:12am] Druplicon: => ImageStyles can be deleted while having dependant configuration. [#2479487] => 57 comments, 7 IRC mentions
[11:12am] Druplicon: jibran: 1 day 45 min ago tell jibran
[11:23am] GaborHojtsy: issue levels is
[11:23am] GaborHojtsy: jibran: ^^^
[11:25am] dawehner: alexpott: yeaah colors!
[11:28am] jibran:
[11:28am] Druplicon: => [Meta] Convert core listings to Views [#1823450] => 73 comments, 2 IRC mentions
[11:34am] jibran:
[11:34am] Druplicon: => Calculate configuration entity dependencies on install [#2520526] => 76 comments, 14 IRC mentions
[11:35am] jibran:
[11:35am] Druplicon: => UpdatePostUpdateTest is extremely fragile to change and does not test batches in post updates [#2581459] => 6 comments, 2 IRC mentions
[11:44am] WimLeers:
[11:44am] Druplicon: => Allow a header value size limit to be specified [#2542868] => 22 comments, 2 IRC mentions
[11:44am] WimLeers:
[11:44am] Druplicon: => Only send cache context/tags if frontend proxy exists [#2527126] => 73 comments, 19 IRC mentions
[11:58am] dawehner:
[11:58am] Druplicon: => Remove the usage of ChainRouter by default [#2576809] => 22 comments, 8 IRC mentions
[11:59am] jibran: i didn't know this at all
[12:04pm] dawehner: WimLeers: alexpott I didn't knew that!
[12:04pm] WimLeers: dawehner: hHHAHAHAHHAHAHAAHA
[12:05pm] WimLeers: dawehner: you trolled yourself
[12:05pm] WimLeers: nice :D
[12:05pm] GaborHojtsy:
[12:05pm] dawehner: WimLeers: well I think this was just the interface ... I was looking whether we could provide a more dense implementation of the chain router
[12:05pm] WimLeers: :)
[12:05pm] dawehner: WimLeers: as well, one reason is that it support multiple types of routers internally
[12:05pm] WimLeers: dawehner: you gotta admit it's funny though :D
[12:06pm] dawehner: WimLeers: oh yeah absolutely. You might have heard my "oh shit" earlier
[12:06pm] WimLeers: dawehner: right :P
[12:06pm] WimLeers: dawehner: now it makes sense
[12:06pm] dawehner:
[12:06pm] Druplicon: => Step 2: Create a JavaScriptTestBase using PhantomJs Driver/Binary [#2469713] => 26 comments, 5 IRC mentions

Catégories: Elsewhere

Drupal Watchdog: The No-Workflow Workflow

ven, 09/10/2015 - 17:38


In the 6 years that the Penn State University Libraries has been using its current enterprise Content Management System, the number of author/publishers has grown to over 200, the number of pages has increased from 5,000 to over 10,000 and the number of media files now sits at several thousand. When the libraries made the decision to switch to a Drupal platform, the time was right for a shift: to fewer editors, to a surefire way to keep content fresh, and to a dead simple workflow that won’t get in the way.


The primary goal in redefining the workflow is to avoid content “ROT" (Redundant, Outdated and Trivial) on the site. Hundreds of authors, contributing content with no oversight, has naturally led to a bloated site with lots of unnecessary, duplicate, and obsolete content. We conducted a full content inventory prior to our move to Drupal, and after having analyzed 10,000 pages of content, page by page, we clearly understood the importance of managing and maintaining content control. It is critical that every piece of content on the site has an owner, is easily reusable across the site, meets all copyright guidelines, and is fully accessible to users with any disability or learning difference. Many areas of the site have content that changes regularly; therefore, minor edits to the site need to be taken care of without delay. And, if there’s a problem identified with the site, it needs to be easily reportable and quickly addressed.


So what's the key to making all of this happen? A simple, streamlined workflow that doesn’t get in the way or allow changes to get stuck in limbo. Our new workflow involves a small group of frequent users who are empowered to make regular content additions and changes, and a content board led by a content strategist that will review these changes after-the-fact, in batches.

Catégories: Elsewhere

Advomatic: Drupal 8: Migrate from Drupal 6 with a custom process plugin

ven, 09/10/2015 - 16:29

When migrating a site from Drupal 6 to Drupal 8, we had to write some very basic Plugins. Since plugins and some of their related pieces are new to Drupal 8, here is a walk-through of how we put it together: Use case In Drupal 6, the contrib Date module provided a date field that... Read more »

The post Drupal 8: Migrate from Drupal 6 with a custom process plugin appeared first on Advomatic.

Catégories: Elsewhere

Red Crackle: Managing Inventory

ven, 09/10/2015 - 15:59
We will go through the basic steps required to set up inventory management on your Drupal Commerce site. You will learn how to manage the quantity of products in your store.
Catégories: Elsewhere Reflecting on Elixir and Phoenix

ven, 09/10/2015 - 14:02
The New Hotness I read a post recently that had the click bait title "Is Drupal Dying?" Ironically I read this while attending ElixirConf. The basis of that post was clients asking for the next thing --expecting Drupal to be old and busted in five years. I am at ElixirConf because I see great potential in Elixir, Erlang, and Phoenix. I expect it to be the next big thing and...
Catégories: Elsewhere

flink: Leaflet 1.0.0 flies! ... in Drupal

ven, 09/10/2015 - 13:19
img { max-width: none !important; } #map-with-flyto { height: 330px; margin-right: 2px; } #buttons { display: -webkit-flex; /* Safari */ display: flex; } button { background-color: #1c95d0; border: 1px solid white; border-radius: 5px; color: white; font-family: courier, monospace; font-size: 14px; height: 28px; margin: 7px 7px 0 0; min-width: 35px; padding: 0 5px; text-align: center; } button#top { border: none; background: transparent; color: darkblue; font-weight: bolder; margin: 7px 0 0 0; padding-left: 0; } Fly to: LHR SFO GIG PVG CPT MEL var attr = 'Map data © Google'; var tileLayerOptions = { attribution: attr, subdomains: [0, 1, 2, 3], detectRetina: true }; var tileLayer = L.tileLayer('http://mt{s}{x}&y={y}&z={z}', tileLayerOptions); function flyTo(lat, lon, name) { flyMap.flyTo([lat, lon], 11); L.marker([lat, lon]).addTo(flyMap).bindPopup(name + "
International Airport
[" + lat + ", " + lon + "]") } var start = [-37.673,144.843]; var flyMap ='map-with-flyto', {}).setView(start, 3); tileLayer.addTo(flyMap); L.marker(start).addTo(flyMap);


Since its earliest releases (2011) Leaflet JS has been a huge hit in map land. For many happy mappers across the world it is the preferred light-weight mobile-friendly API. No matter what map tiles you want to bring to life, Esri, Mapbox, OSM, even Google, Leaflet makes them shine.

Although it’s been around for years, Leaflet is yet to make its official debut: version 1.0.0 is to be released soon.

Version 1.0.0-beta is out now.

Thousands will ask: what does Leaflet JS 1.0.0 have to offer over 0.7.5? And: can I use 1.0.0-beta in Drupal today?

To start with the improvements, most of the new offering is under the hood. Better performance, bug fixes, improvements in UX, animation, projections. Check the Changelog for details -- there are many.

Visually, a striking new feature is the flyTo() function, which you can see in action by pressing the 3-letter airport codes above. [Note: for now this works best on non-mobile devices]. For a full screen version with more destinations and different map styles, head over to our friends at RegionBound, who have a similar demo.

With Leaflet JS 1.0.0 come some API improvements.

And herein lies the rub. Some of the API changes may break some of the hundreds of free Leaflet JS add-ons strewn across the Internet and on Including the base Leaflet module. Yesterday we checked in a patch to deal with multi-polygons, multi-linestrings and circles. With that and some other changes the Leaflet-the-D7-module is now in pretty good shape. So are some of our other favourites: Leaflet More Maps, Leaflet Hash, Leaflet Label, IP Geolocation Views & Maps.... These were already ok, or required minor fixes.

To cut to the chase... in D7, can you upgrade to Leaflet JS1.0.0-beta now ?


In three easy steps:

  1. You need to use Leaflet-the-Drupal module version 7.x-1.3 (or latest 7.x-1.x-dev), which has the patches described above. It will continue to work with Leaflet JS 0.7.5 too, if you need to fall back.
  2. Then Replace your current Leaflet JS in sites/all/libraries/leaflet with the latest Leaflet JS 1.0 downloaded from here.
  3. Check which of the Leaflet add-ons you are currently using. Some will work fine unchanged, some may require patches or simply updated versions of their associated libraries, most notably Leaflet Markercluster -- see its project page.

Should you find an issue after switching to Leaflet JS 1.0.0, please let the community know via the respective Leaflet extension modules issue queues,

What about D8 ?
There is no Leaflet D8 version yet. Some have suggested re-architecting the Leaflet module. If these plans go ahead, it would make sense to target compatibility with Leaflet JS 1.0.0.

Whether it’s D7 or D8, let’s all chip in to make sure that Leaflet continues to fly in Drupal!


* * *File under:: Planet Drupal
Catégories: Elsewhere

OpenLucius: Headless Drupal & Node.js | Part 3/3: Express JS and Drupal API integration

ven, 09/10/2015 - 12:50

Here at Lucius HQ we are always interesting in cool new technologies. So to discover the decoupled world, we build our new corporate website with Node.js and headless Drupal 8. In this blog serie we explain the implementation.

So this is the third and last part of the 'Headless Drupal & Node.js' series.

In this last part I'll show you:

  1. Installation and intro Express JS in Node.js
  2. Routes and dynamic templates with EJS in Express JS.
  3. Connect the JSON data from the REstful Drupal 8 web service
1) Installation and intro Express JS in Node.js
Catégories: Elsewhere Introducing Tours - Tours Search, Booking and Management in Drupal

ven, 09/10/2015 - 11:35
Here at Roomify our long-term goal is to provide tools that can support the widest possible range of booking problems. There is an increasing demand for such solutions both from "traditional" companies (especially within travel) that want to leverage new online tools, as well as from the new breed of "sharing economy" startups. We view our role as technology providers to all of them. We build platforms that allow you to create your own special coctail of Content + Reservation/Booking + Commerce + Community and target your particular niche.  Our Agency solution does this for whoever is interested in building their niche AirBnB-style site and today we are very excited to introduce Tours! Tours enables people to create platforms through which to describe and offer tours that can either last a few hours or a few days. In this post we present some of the highlights of tours.
Catégories: Elsewhere How To Install Drupal 8 With MAMP (Drupal 8 Tutorial #1) (Article + Video)

ven, 09/10/2015 - 11:00

First release candidate for Drupal 8 is out. Here is how to install it with Mamp.

Catégories: Elsewhere

Don't Panic: A blog about Drupal: Podcast on DrupalCon Barcelona

ven, 09/10/2015 - 10:31

I've been a part of the Swedish podcast Drupalsnack for over 2 years now, and it's always fun to do a podcast while at a DrupalCon. This year, we managed to record the podcast in one of the BoF rooms, but some interference with the recording led up to a re-recording a couple of days later. 

This year, we did three interviews: Kristoffer's colleague Kevin who was a first-time-attendee at a Drupal event ever, Antje from the Drupal Documentation Group and Holly Ross. Furthermore we talked about the conference itself, highlighted some of the sessions we attended and also covered the upcoming release of Drupal 8 RC1 (that was released two days ago). 

You can click here to download the mp3-file or visit the official site of the Drupalsnack podcast to listen in your browser. We apologize for grammatical errors and that we sometimes sound like The Swedish Chef (hurdy-burdy-gloop).

Catégories: Elsewhere

INsReady: Update your Nginx config to support Drupal 8

ven, 09/10/2015 - 09:41

If you are running Drupal 7 on Nginx, the good news is that your existing Nginx configuration is almost fully compatible with hosting Drupal 8. Except one thing: Drupal 8 Update module has been re-implemented, and your existing Nginx configuration will probably return 404. For more details on Drupal 8 Update module change, please see Move update.php back to a front controller.

The change matters to Nginx config is that Drupal 7 update.php URL is like

/update.php?op=info or /update.php?op=selection

while Drupal 8 update.php URL pattern is like

/update.php/selection or /update.php/result

So, what we need to change in the existing configuration is very simple. Look for your matching condition like

location ~ \.php$ {...}

then, change it to

location ~ \.php$|^/update.php {...}

This change is adding a new case to tell Nginx, if you run into update.php on the root level, just pass it to your upstream.

I have updated my Nginx template for running Drupal 7 and Drupal 8, you can see it to look at the full picture.

Tag: Drupal PlanetDrupal 8
Catégories: Elsewhere

Yonas Yanfa: Benchmarking Drupal 8.0 RC1

ven, 09/10/2015 - 08:42

Drupal 8.0 RC1 has just been released! I've been looking forward to improved performance since Wim Leers wrote about Drupal 8's new caching system six months ago.

Benchmark tool

I performed a quick benchmark using siege, which was run on a separate computer and connected to the server via a HP 1810-24G gigabit switch.

Server setup
  • HP DL160
  • 2x Intel Xeon L5520
  • 18GB RAM
  • 2x Gbe network ports
  • FreeBSD 10.2 RELEASE
  • ZFS filesystem over iSCSI
Testing methodology
  • Fresh install of Drupal 6, 7, and 8
  • Create one article node to appear on the front page
  • Caching was enabled on all sites
  • Used nginx v1.8.0 and php-fpm
  • Run 100 concurrent connections for 30 seconds
Results Transaction rate (requests/second) - higher is better

Response time (seconds) - lower is better

-legend\"><% for (var i=0; i
  • \"><%if(datasets[i].label){%><%=datasets[i].label%><%}%><%}%>" } new Chart( document.getElementById("rate-chart").getContext("2d") ).Bar(rate_data, options); new Chart( document.getElementById("response-chart").getContext("2d") ).Bar(response_data, options); //--> Raw data Drupal 8 - caching enabled siege -b -c 100 -r 1000 -t 30S http://drupal.8.dev3 Transactions: 10615 hits Availability: 100.00 % Elapsed time: 29.49 secs Data transferred: 118.18 MB Response time: 0.28 secs Transaction rate: 359.93 trans/sec Throughput: 4.01 MB/sec Concurrency: 99.47 Successful transactions: 10615 Failed transactions: 0 Longest transaction: 0.43 Shortest transaction: 0.02 Drupal 7 - caching enabled siege -b -c 100 -r 1000 -t 30S http://drupal.7.dev3 Transactions: 29577 hits Availability: 100.00 % Elapsed time: 29.48 secs Data transferred: 235.08 MB Response time: 0.10 secs Transaction rate: 1003.14 trans/sec Throughput: 7.97 MB/sec Concurrency: 99.79 Successful transactions: 29577 Failed transactions: 0 Longest transaction: 0.21 Shortest transaction: 0.05 Drupal 6 - caching enabled siege -b -c 100 -r 1000 -t 30S http://drupal.6.dev3 Transactions: 31246 hits Availability: 100.00 % Elapsed time: 30.02 secs Data transferred: 126.20 MB Response time: 0.10 secs Transaction rate: 1040.72 trans/sec Throughput: 4.20 MB/sec Concurrency: 99.77 Successful transactions: 31246 Failed transactions: 0 Longest transaction: 0.75 Shortest transaction: 0.01 Conclusion

    Drupal 8 is about 3 times slower than Drupal 7 and Drupal 6.

    I believe this might not be due to Drupal itself, but the Symphony PHP framework that it uses. Symphony has been shown to be one of the slowest PHP frameworks available. Symphony is 14 times slower than Phalcon.

  • Catégories: Elsewhere

    Jim Birch: Login Destination: Sending us where we need to go!

    ven, 09/10/2015 - 07:06

    Rare is the site where the user who logs into the site, and needs to end up on their User page.  This is the default behavior of Drupal.  It makes sense if you are making a community or social media type website.  But for most of us, building publishing, marketing, and general business sites, we want to send our users to a specific place so they can start or continue their workflow.

    The Drupal Login Destination module comes to our rescue.  With this module, we can redirect a user after logging in, after registering to the site, after using a one-time login link, or after logging out.  We can set rules based on the user's Role, and can direct users to internal or external links, keeping any variables needed.  It is a very powerful tool that you can use to help administrators on their way into their work, or help users into a conversion funnel of your design.

    Installing Login Destination

    Installation is simple, download to your modules folder and enable to the modules screen, or do so using drush:

    Read more

    Catégories: Elsewhere

    flink: Leaflet 1.0.0 flies!

    ven, 09/10/2015 - 06:35
    var rb = 'RegionBound | '; var cc = 'CC-BY-SA'; var attr1 = rb + 'Map data © OpenStreetMap contributors, ' + cc; var tileLayer1Options = { attribution: attr1 }; var tileLayer1 = L.tileLayer('http://{s}{z}/{x}/{y}.png', tileLayer1Options); var attr2 = rb + 'Tiles © Esri'; var tileLayer2Options = { attribution: attr2 }; var tileLayer2 = L.tileLayer('{z}/{y}/{x}.png', tileLayer2Options); var flyMap; function flyTo(lat, lon, name) { flyMap.flyTo([lat, lon], 11); L.marker([lat, lon]).addTo(flyMap).bindPopup(name + "
    International Airport
    [" + lat + ", " + lon + "]") } img { max-width: none !important; } .main-container.container { min-height: 550px; margin-left: 0; margin-right: 0 !important; padding-left: 0; padding-right: 0; width: 100%; } h1 { color: green; font-family: courier, monospace; position: absolute; top: 37px; text-align: center; width: 100%; z-index: 999; } { border: none; } #map-with-flyto { height: 560px; position: absolute; top: 27px; width: 100%; } button { background-color: limegreen; border: 1px solid white; border-radius: 5px; color: white; display: -webkit-flex; /* Safari */ display: flex; font-family: courier, monospace; font-size: 14px; height: 30px; margin: 0 0 7px 10px; min-width: 35px; padding: 0 5px; position: relative; text-align: center; top: 125px; z-index: 999; } button#top { border: none; background: transparent; color: darkgreen; font-size: 15px; font-weight: bolder; top: 114px; } Fly
    to: LHR JFK SFO GIG CAI CPT DME PVG MEL var mapOptions = { }; flyMap ='map-with-flyto', mapOptions).locate({setView: true, maxZoom: 16}); tileLayer2.addTo(flyMap); var layers = { 'OSM': tileLayer1, 'Esri Topo': tileLayer2 }; L.control.layers(layers, {}).addTo(flyMap); flyMap.on('locationfound', function(e) { var radius = (e.accuracy / 2).toFixed();, radius).addTo(flyMap).bindPopup("You are within this circle"); L.marker(e.latlng).addTo(flyMap).bindPopup("You are within " + radius + " meters of this marker."); }); flyMap.on('locationerror', function(e) { alert(e.message); }); File under:: Planet Drupal
    Catégories: Elsewhere