Blogs

Packt Publishing book - Premium Drupal themes

In 2013 I was invited by Packt Publishing to play a role of technical reviewer in one of their books.
Just got my sample of the book “Premium Drupal Themes” by mail.
It was an honor and nice experience for me, and now I hope to find time and become an author some day :)

Drupal 7 vs Symfony 2: overview after 1 year of Symfony development

We’ve decided to switch to Symfony2 development in July 2012, if I’m not mistaken - after 7 years of (mostly) Drupal development.
There were reasons to do that:

1. Not-too-great experience with high load projects, powered by Drupal 7

Okay, Drupal is good enough until you get a project with big expectations in terms of response time for authenticated users. Nginx proxy, boost and memcached help a lot with anonymous page hits, but things are sometimes not good enough when we talk about authenticated user saving some nodes (1 field = 2 inserts to fields and revisions table, 40 fields - and you get super-slow node saving, at least on non-ssd hosting), using ajax stuff like dynamic forms (Drupal form ajax is not bad, it’s just not super-blazing-fast). Read more »

Storing monetary amounts in db? Use decimals, not floats!

Lot’s of people will be surprised (or shocked, when it happens in production) when they see that mysql can work like this:

Query:

SELECT transaction_id, amount FROM transactions WHERE amount>20.5

Response:

123|20.5

Query:

SELECT transaction_id, amount FROM transactions WHERE amount=20.5

Response:

No rows

So, 20.5 is really greater than 20.5 in sql database. Sometimes. Read more »

Rules won't work properly when run during cron, if you use node access restrictions

I’ve recently created USPS tracking module for Drupal, so Qwintry.com users could get notifications when their international packages change state. I’ve used queue operations to build requests to USPS API by cron, and it seems to work great for our customers, but this story is not about the module.

My plan was to provide rules event “The package [tracking number] changed active state from [old state] to [new state]”. (words in square brackets are Rules arguments). Read more »

Image title as text description for colorbox image formatter (Drupal 7)

When you have core “image” field on your node type and you want to output “title” (or “alt”) of this image just under the image thumbnail as text - you can use image_caption_formatter module for that.
But only in the case when you don’t need another image formatter in place - e.g. Colorbox - because Colorbox provides its own image formatter, and image_caption_formatter module also provides its own image formatter. You obviously can’t use two formatters at the same time. Read more »

Be careful with drupal_get_form() in theme layer

When you create Drupal code for 7 years, it’s easy to mistakenly assume that you know everything regarding such basic things as theme_preprocess_node() and drupal_get_form() functions.
And that is a wrong feeling. Today I’ve discovered that you shouldn’t mix these functions!

The bug description:
I was creating “join” form which was rendered in node.tpl.php of organic group.
When the form was submitted, validation/status messages were shown only after additional page refresh. So, after form submit page was reloading without any messages, and all the messages were appearing on the screen after additional page reload. Read more »

Improving user experience: using Dialogs for profile edit in modal forms

We are now developing big Drupal 7 project where users have profiles with lots of fields.
They also have a node tied to them (“My story”) which is created during registration.

Initially, these were “edit my profile” and “edit my story” links which were leading to a huge forms where user was scared by amount of elements.

And that is the result of UI improvements:
Modal 1

and after clicking “Edit” near “Hobby” item…
Modal 1

So, basically, user has separate small form for photo upload, separate form for about field, and separate form for small details. Read more »

Using Ubercart to sell files: ui improvements and creating file feature programmatically

uc_file module that allows selling files in Ubercart is definitely not perfect in terms of API, but it is a nice piece of functionality.
We’ve just finished creating one e-book store which has product-import feature.
Each product has multiple formats (pdf, epub, rtf) - some products can have pdf+epub, some can have just pdf, others have all three formats attached.

On product page, we wanted to show nice block like this:

Ubercart file downloads

where pdf and doc are just text for regular users, and download links for users that already bought this book.

All the code was created for Drupal 7 + Ubercart 7.x-3.x Read more »

Calendar with highlighted dates

In Drupal 7, it’s easy to show calendar (ui.datepicker) date selector to user. (it’s not hard in Drupal 6, too - but in d6 you need to enable http://drupal.org/project/jquery_ui to get the calendar, I think)

You just write several lines of js code, and you get a calendar.
But things are quickly getting more complicated when you need to allow visitors to choose from dates that have some nodes “attached” to them only. E.g. if you have news view, and you don’t have news for 13 Nov 2011, there is no sense in allowing user to click on this date in calendar (I’m talking about the case when clicking on calendar redirects user to views page /news/2011/11/02 , where 2011/11/02 is a context filter for news nodes)

Here is the screenshot illustrating the desired functionality: Read more »

Writing robust code that uses fields, in Drupal 7

In Drupal 7, the direct access to entity fields (CCK in d6) is different. In Drupal 6 you write:

<?php
$field_val
= $node->field_yourfield[0]['value'];
?>

in Drupal 7 you have to write:

<?php
$field_val
= $node->field_yourfield[LANGUAGE_NONE][0]['value'];
?>

(this is a way suggested by core docs).
So, we have different languages here now.

I haven’t built any d7 multilanguage websites yet, so I don’t know if that approach makes it really easy to create language-aware code for i18n websites (I hope it does!), but for regular single language websites this approach just adds some headaches to the developers. Read more »

Recent comments

"Hey There. I discovered your weblog the use of msn. That is a very neatly written article. I'll be sure to bookmark it and come back to read more of your helpful info. Thanks for the post. I will...
by Kiara2 days 13 hours ago
"Excellent perspective. I certainly like what you wrote and I have been contemplating the same thing. Slick site as well, did you design it yourself? Looks great. Could be a smithereen quicker though...
by Delbert Cox1 week 3 days ago
"I unfortunately I could not get the code above to work (Drupal 6, Ubercart 6.x-2.8). "
by M. P.2 weeks 2 days ago
"Wonderful blog! I found it while surfing around on Yahoo News. Do you have any suggestions on how to get listed in Yahoo News? I've been trying for a while but I never seem to get there! Thanks...
by Johnf4323 weeks 6 days ago
"Hi what about this table uc_cart_review_table ? "
by Anonymous6 weeks 3 days ago
Drupal association member