Radiant Newsletter extension has stats
March 27th, 2008
Some weeks ago Casper Fabricius sent me a patch for the Radiant Newsletter extension. He added a statistics system to track how many times sent emails are opened. I have finally found the time to apply it and make a commit to my repository. Thank you very very much for your work Casper! I’ll write an article about this extension as soon as possible.
Speed up your sortable list with LiteSortable
December 17th, 2007
I love to use prototype and scriptaculous to create Rich Internet Application, and I love all the built-in effects and libraries of script.aculo.us.
Today I was working with Sortable.create to provide a simple way to reorder images inside a gallery. I started using the same code used in the SortableListsDemo page of the official wiki. Each time the list is updated, the serialized list is sent to the server. The server receives the list and updates all the images positions. It’s pretty simple and works fine, but the problem is that the server executes a query for each image in the gallery. This means that if I have 100 images, 100 queries will be run. It’s a hell for my server! The best way to improve this action is to send to the server more detailed information, such as the dragged image, the old position and the new position. In this way I can execute only 2 queries for each movement. To do that I wrote a simple javascript class called LiteSortable that acts like the Sortable.create method. It receives the same parameters, and the same callbacks: onUpdate, onChange. The only change is that these 2 callbacks will receive more information about the movement, and I can improve the previous client side code with:
function sort(list, element, id, old_position, new_position) {
new Ajax.Request('/admin/gallery_item/sort/', {
evalScripts:true,
parameters: {
id: id,
old_position: old_position,
new_position: new_position
}
});
}
document.observe('dom:loaded', function() {
new LiteSortable('list', {
onUpdate: sort
});
});
And the server code become like the following:
def sort
old_position, new_position = params[:old_position].to_i, params[:new_position].to_i
@item = GalleryItem.find(:first, :conditions => ["id = ? AND position = ?", params[:id], old_position])
if @item
x, y, z = old_position < new_position ? ["-", "<", ">"] : ["+", ">", "<"]
GalleryItem.update_all("position = (position #{x} 1)", ["parent_id IS NULL AND gallery_id = ? AND position #{y}= ? AND position #{z}= ?", @item.gallery_id, new_position, old_position])
@item.update_attribute('position', new_position)
else
@error = true
end
end
If @error is true, it means that the dragged image it’s been deleted or moved by somone else.
If you want to use LiteSortable you can check out the entire project with:
svn co http://dev.gravityblast.com/svn/projects/js/LiteSortable/
…or save download the lite_sortable.js file from here.
Subversion Support for Gallery Extension
December 5th, 2007
I’m going to move all my projects to subversion. Now I’m moving the Gallery extension.The subversion repository is here:
http://dev.gravityblast.com/svn/projects/radiant/extensions/gallery/
You can check it out with
svn co http://dev.gravityblast.com/svn/projects/radiant/extensions/gallery/
The new version uses attachment_fu, and the filesystem organization is changed. In order to use the new version with galleries created by old versions of the Gallery extension you must run this rake task:
rake RAILS_ENV="production" radiant:extensions:gallery:version_0_7_0:upgrade_filesystem_structure
I suggest making a backup of all your pictures before running the above rake task. Let me know if everything works correctly!
CopyMove 1.9 is out!
November 29th, 2007
Now the CopyMove extension uses subversion, and you can check it out from its repository with:
svn co http://dev.gravityblast.com/svn/projects/radiant/extensions/copy_move/
Thanks to Benny Degezelle now it works with the shards extension. This is the best way to hack the Radiant admin UI! Benny also helped me updating the rake tasks and rewriting the CopyMove html structure so it is similar to the other admin screens…Thanks Benny :)I also moved all the code in a separated controller, wrote a complete test suite, and added the ability to choose the status for the copied pages.
GravityBlast respositories
November 19th, 2007
UPDATE: The new repository is based on subversion, and you can find it here.
I’ve just moved my repositories from darcs.bigchieflabs.com to darcs.gravityblast.com. Here you can find my projects, primarily extensions for radiant like Gallery, CopyMove, DefaultPageParts, Dynamic, Subscriber, Newsletter…
Radiant Gallery extension 0.6.1
August 26th, 2007
Gallery extension 0.6.1 is out! Many people ask me how to implement a full gallery system, with nested galleries (or album of galleries), and final page for an image. I implemented some new features and here you can see a demo:
I also fixed some javascript bugs in the import page. Now it should work also with safari! Let me know!
Gallery extension 0.5.0
May 31st, 2007
Radiant Gallery extension 0.5.0 is just released! Now you can set set name and description for each gallery and gallery item.

CopyMove 1.8.3
May 26th, 2007
I fixed some bugs in the CopyMove extension. Now you can copy the whole tree of a page under one of its children…you can also duplicate the hompage..if you already use this extension, download the latest release!
Duplicate extension becomes CopyMove
May 16th, 2007
I changed the name of my Radiant duplicate extension…now it’s called CopyMove! Check it out!!!
Using Gallery Extension to list mp3 files
May 14th, 2007
In the latest release (0.4.1) of the Radiant Gallery extension I added the ‘link’ tag for each gallery item. With this new tag you can use Gallery extension to display a set of file that aren’t images..and link directly to each item instead of display a thumbnail. I use this feature to display my band album. I created a new hidden gallery uploading all the mp3’s, and then I created a new page with this code:
<r:gallery id="3">
<h4><r:gallery:name /></h4>
<ol>
<r:gallery:items:each>
<li><r:gallery:item:link /></li>
</r:gallery:items:each>
</ol>
</r:gallery>
..and this is the result:

