Lullabot: Podcast 88: Copenhagen Loves Bon Jovi
Angie Byron, Addi Berry, Nate Haug, and Jeff Robbins report back from DrupalCon Copenhagen.
Davy Van Den Bremt: Three things we learned from indexing a Drupal site with millions of nodes in Apache SOLR
For one of our clients, we are running a Drupal site with about a millions of nodes. Before launch, those nodes are imported from another database and then indexed into Apache SOLR. The total time to index all of these nodes in an empty SOLR instance is measured in days rather than hours or minutes.
A bit too long to do this import regularly. So me and my (XDebug) profiler delved into the Apache SOLR module code to look where we could scrape of a few hours/days of the execution time.
Seemed like in our case, there were 3 components responsible for a large share of the execution time. Let's have a look.
BTW. We are using the latest dev build of version 2 of the Apache SOLR module.
Lullabot: Command Line presentation
I had a great time at Drupalcon Copenhagen! Thanks to everyone who made it happen. I did one presentation this time around, "The Command Line is your friend." It covered the basic commands for getting around and doing things, most of which are covered in more detail in the Command Line Basics video series. One thing that was new and that I ended up not having time to get to in Copenhagen was showing how to install Drupal from the command line. A number of people expressed interest in seeing that part, so I promised I'd make a video of it, and now I've gotten it done. I'm attaching the slides from the presentation here as well, so please have some fun playing around on the command line.
SthlmConnection: Exportable configuration with CTools – revisited
A while ago I wrote about how to provide exportable configuration presets in Drupal modules. While I was taking advantage of CTools' exportables API rather than building this functionality from scratch, we still ended up with quite a lot of code for what was supposed to be a standardized feature. Since then, however, CTools' exportables API has evolved and now also provides a UI out of the box.
Jake Strawn: Relaunch of Himerus.com in Drupal 7 and the Gamma theme indroduction...
The video here is a short (14:00 min) summary of the upgrade of himerus.com to Drupal 7, and also a quick look into the Gamma sub-theme, a new inclusion in the Drupal 7 branch of the Omega theme.
Thanks for taking the time to view it, the new site, and any feedback on the Gamma subtheme moving forward!!
Fleet Thought: Changing the Length of User Sessions in Drupal
I was recently trying to figure out exactly how long my users' sessions were lasting on an existing Drupal site that I had built. Generally it seemed like users were remaining logged in for an extremely lengthy period of time. I did some research and finally discovered that this setting is actually configured in the default settings.php file that ships with Drupal. There's a line in the settings file that initially reads:
ini_set('session.cookie_lifetime', 2000000);
CMS Quick Start: Drupal Video: Admin Tricks with MODULE FILTER & VERTICAL TABS
You have to agree that Drupal admin screens can be pretty gnarly to interact with. If you want a better looking Modules listing page and if you want a tidier node add and node edit form... Then read on and watch the video at the end.
OK. I Pride myself on being HIPP and knowing about the newest modules and the coolest modules. I can not explain how I missed the MODULE FILTER module.
Advantage Labs: Drawing a line between ready and done
Late in the code sprint the last day of DrupalCON in Copenhagen, there was a lot of discussion going on about the upgrade path in Drupal 7. Questions of how to handle certain aspects of the process and prevent horrible flaming death when upgrading a site and its contrib modules. Upgrade processes, much like data migration, often become a sticky problem. Right now that stickiness has literally stuck the release of Drupal 7.
Regardless of the release status, folks are starting to adopt D7 for their projects. The Examiner recently launched on Drupal 7. Acquia's Drupal Gardens moved into public beta this summer, also on D7. These folks aren't alone, but not everyone has the expertise and backing to convince the decision makers to live on the bleeding edge.
Lullabot: The Art of Presenting
I had the opportunity to present to a local organization in Salt Lake City on the techniques Lullabot uses for making kick ass presentations and how we streamline our presentations so they're reusable amongst our teaching staff. Watch the video below and download the slides.
EchoDitto Tech Blog: Nodereference Fails to Print Referenced Node
I had a case where CCK nodereference wasn't populating the view field in the array, so I had to check to see if it was empty and then manually populate it.
I leave this code as a gift to posterity.
E-Learning Institute at PSU: ELIMedia Asset Management Server Update
Some of you may have seen my tweets and screencasts about the ELI Media Server. It's a new project as part of ELMS that will involve a lot of screencasts about how we're integrating m Features JWPlayer Module
Appnovation Technologies: Using Hook Views Query Alter
Building a website I recently ran into an issue where I had HTML search facets interacting with Drupal views. The user would click on the facet and it would filter the view depending on the argument. I ended up implementing hook_views_query_alter. To make sure the values I wanted to filter on were in the view, I added the search facets into the view as fields. This automatically joins the necessary tables so that you don’t have to.
Implementing hook_views_query_alter requires two parameters, view and query, both are passed by reference. Since this hook is called for every view the first thing I did was check that I was altering the right query by adding an if statement that checks the view name. After that you're free to modify the query as you wish. In my example, I looped through the search facets and added them as where statements and arguments to the query.
function search_views_query_alter(&$view, &$query) {
if($view->name == 'example_view_name'){
foreach($parsed_url AS $key => $value){
$query->where[0]['clauses'][] = 'profile_values_profile_' . $key . '.value IN ("%s")';
Nextide Blog: Maestro Overview Part 2 - Interactive Tasks
In part 1 of our Maestro module overview we explained the different task types that we have available in the module. One of these task types is the Interactive Task and this blog post will provide more detail on this task type and how to create your own custom function for it to use.
In an interactive workflow driven process, there are many times you need to present information or request information to a user. Examples of this would include:
- Submit a task to a user to create or update a content type record. This may be a drupal article or something more site specific like a job request setup as a custom content type
- Prompt a user to review a piece of information to approve or reject - possibly an article or that job request
- Ask a user for some information using a form - results of which need to be used in the subsequent workflow
- Ask a user to pick from a list of users who should be assigned a subsequent task in the workflow
- Show a user some information - may not require any action
Basically any task where we want to interact with the user and we want full control over what is displayed. We may need to prompt the user with custom submit actions and execute code depending on what action the user takes.
EmmaJane: Code-Free Layout Webinar
Wow! Code-Free Drupal Layout with Skinr, Fusion and Panels has been my best launch of an ebook ever. Thanks to everyone that's already purchased their copy. I hope you're enjoying it so far. I made a special offer to my mailing list yesterday and it was so hugely popular that I thought I'd extend it to everyone else too.
Anyone that has purchased Code-Free Drupal Layout with Skinr, Fusion and Panels as of 11:59PM EST (Eastern Time..are we daylight or standard right now? I always get them mixed up.) Sunday September 5 will be eligible to attend a FREE one-hour Webinar next Wednesday. I'll run you through the content of the book. Show you the demo (and real) sites that were used to create the content and answer your questions. If you've already bought the ebook your name is already on the list for the Webinar and you'll get an email early next week with the sign-on details.
Not interested in spending your hard-earned $11.95 on an ebook? That's cool. You can learn a lot from these free resources too:
Metal Toad: Running Drupal Secure Pages behind a proxy
If you plan to use the securepages module behind a proxy that terminates SSL, there are some additional server configuration steps you need to take.
In order to detect what the protocol is in use, securepages tests the value of $_SERVER['HTTPS']. Out of the box, this merely reflects the immediate connection to your proxy. If this protocol differs from that used by the original client, then securepages can't work (the most likely outcome is a redirect loop).
To resolve this, you'll need to ask your proxy to send the X-Forwarded-Proto header. While you're free to use any header label you choose, X-Forwarded-Proto seems to have become the de facto standard.
Palantir: Better Know a Module: Menu Block (Part II)
Everyone knows the top-tier Drupal modules, but with over 5,000 modules available for Drupal it’s no surprise that many useful ones go unnoticed. As a public service to the Drupal community, Palantir is working to raise awareness of some of these unsung heroes.
In part 4 of our ongoing 5,162-part series, we present: Menu Block: Revisited
In Menu Block (Part I), I talked about its basic options. In this part, I’ll be going into the crazy non-obvious options:
The “options” toggle in menu_block for Drupal 7
Development Seed: Aegir 1.0 Release on Drupal 7 in Early 2011
Last week at DrupalCon Copenhagen Antoine Beaupre and I shared our plans for the 1.0 release of the Aegir hosting system. After the 0.4 release that we are currently working on, the project will start working towards a final 1.0 build, rather than head towards 0.5.
Our goal for Aegir has been to implement a hosting system with a stable documented API that provides a solid foundation for integration of other services. Once we hit the 0.4 release, we will have the infrastructure in place to support this. With our key goal met, we've begun determining our must have features for a 1.0 release.
Grayside.org: Node Form Dominos via Node Reference and Prepopulate
I like Prepopulate. I like to have that pseudo-RESTful way of preloading a form to minimize the amount of work a user has to do to get to the point of submitting a form. But I also like clean URLs. This post reviews in detail a technique to use a single prepopulated nodereference field to prepopulate a bunch of other fields based on that reference. Since Prepopulate’s recent 2.0 release, it because a whole lot more difficult to use the Form API to work magic on what it provides.
I use this in conjunction with nodereference to tailor node forms for their relationship with the referenced node.
CivicActions: Drupal 7 - Faster Than Ever
CivicActions has been working with Google's “Make the Web Faster” project team to make some (last minute) improvements that make Drupal 7 faster.
Advantage Labs: New Pay alpha release available
Yesterday afternoon we made a new Alpha release of Pay for Drupal available. What is Pay you might ask? At its core Pay is a modular API for accepting, processing and tracking payments. If you want to be able to accept payments on your Drupal site for simple transactions with out "Add to cart" or complicated checkout procedures then Pay is for you! To learn more about Pay, take a look at our blog post last week and check out the project page.
As part of the Pay API we provide a set of base classes which can be extended to provide payment forms or payment methods and gateways. Out of the box we're currently shipping with support for Authorize.Net and PayFlowPro payment gateways. While at DrupalCon Copenhagen I began adding support for PayPal Website Payments Pro and Standard. While still under development some of this work is now available for testing in the latest alpha.
