OK, so here's the situation, I got asked to build a website for a friend in the US, here's what they wanted... (Just jump to the questions if this is too long!)

Requirements

Data structures

Vehicles

  • Long Int:ID - Internal db ID
  • Text:Stock Number - Company internal stock number
  • Text:Name - Model name of vehicle
  • Memo:Description - Vehicle Description
  • Long Int:Type - Vehicle Type ID
  • Long Int:Manufacturer - Vehicle manufacturer ID
  • Long Int:Engine - Vehicle engine ID
  • Int:EngineMileage - Engine Mileage
  • Long Int:Transmission - Vehicle engine ID
  • Int:TransmissionMileage - Transmission Mileage
  • Int:Price - Vehicle Price
  • Long Int:Status - Status ID
  • ????:Images - Pointer to any number of associated images

Engines

  • Long Int:ID - Internal db ID
  • Long Int:Manufacturer - Engine manufacturer ID
  • Text:Name - Model name of engine
  • Memo:Description - Engine Description
  • ????:Images - Pointer to any number of associated images

Transmissions

  • Long Int:ID - Internal db ID
  • Long Int:Manufacturer - Transmission manufacturer ID
  • Text:Name - Model name of transmission
  • Memo:Description - Transmission Description
  • ????:Images - Pointer to any number of associated images

Manufacturer

  • Long Int:ID - Internal db ID
  • Text:Name - Manufacturer name
  • Memo:Description - Manufacturer Description
  • Text:Link - URL of manufacturer website
  • ????:Image - Pointer to manufacturer logo

Type

  • Long Int:ID - Internal db ID
  • Text:Name - Type name
  • Memo:Description - Type Description

Status

  • Long Int:ID - Internal db ID
  • Text:Name - Status name
  • Memo:Description - Status Description

Details

They're not too bothered about registering users to their site but we'll probably add forums, etc. later, more important is fined grained access control within the organisation (e.g. over who gets to change prices and vehicles status, etc.) and excellent logging.

I implemented a lot of this in PostNuke and in a custom CMS, but got tired of certain limitations and Drupal was recommended. I have very little time to get a site up and running which can easily be administered by the computer illiterate, which means the admin forms have to be very simple.

Drupal has a very steep learning curve and so I'm desperate for a little help. I've been desperately ploughing through modules. Flexinode seemed excellent but didn't handle relationships well, the relativity module helped, but frankly it's all too complex for basic users to understand. I therefore need to write custom modules to do all this. I am relatively expert in PHP (wrote my own CMSs) and so this isn't too much a problem but I just need some reassurance and pointers before comitting to yet another CMS.

I have experience with coding for CMSs (and integrating TinyMCE for example).

Questions
  • What example modules do you recommend to look at that show manipulation of related database tables (that is a bit more complex than the very basic - and yet still buggy - page_example.module)?
  • Should I implement each object as a seperate module (i.e. Vehicle module, Engine module, etc.) or should I have one module that handles the lot?
  • Does the watchdog module allow more fine grained logging types (e.g. Vehicle changes, Engine changes, etc.)? Where should I look for examples on creating log events (e.g. User x changed price on vehicle y)?
  • Is there any image upload module out there that is easily used by custom modules to add sets of images to a data strucute? There seems to be a lot of custom image modules, do any allow me to add image uploading for example to my 'Add Vehicle' form in a robust and easy manner, and then allow displaying of those images when displaying the Vehicle node? (I've already written imagemagick code for adding watermarks, thumbnailing etc. even image comparison to see if an image is already uploaded! Would it better to write a module from scratch - if so what should I use as a good example base?)

Please could someone give me some pointers here as I'm desperate to get this stuff done ASAP and am very concerned about committing to yet another CMS before I waste more time.

Thank you,

Craig

Comments

PeterLucas’s picture

Drupal seems to be for hobbyists who love to tinker all day and night. It's very hard to get fast, clear answers to issues. The forums here are not very responsive because the "developers community" is split between Drupal and CivicSpace - which is supposedly not a fork, although you'll run into compatibility issues if you try to use modules and themes from one in the other. Starting with Drupal will cost you a lot of time you clearly don't have.

bonobo’s picture

First, it would be great if nobody takes the flamebait offered in the "Don't bother" post.

Second, to get to your question re Drupal and this project: Drupal will do it. But, you are describing a fairly large project. I don't how much time you mean when you say "ASAP", but if you are looking to get this done in a few days, that just doesn't seem possible.

RE "What example modules do you recommend to look at that show manipulation of related database tables (that is a bit more complex than the very basic - and yet still buggy - page_example.module)?"

Try the forum module -- This will give you a good idea of how nodes are created/saved in Drupal, which will also help with the "manipulation or related tables" (if I understand what you're asking). The book review module could also be useful.

RE "Should I implement each object as a seperate module (i.e. Vehicle module, Engine module, etc.) or should I have one module that handles the lot?"

Personal preference. I'd probably start by hashing out the db structure that will hold the info, and then make the decision about whether to use one module or several modules.

I hope this helps as a start.

Cheers,

bonobo

-------
http://www.funnymonkey.com
Tools for Teachers

unclethargy’s picture

I will give the forum module a good looking over.

I'm not sure what you mean by hashing out the db Structure as I believe I've done that in my original post (I didn't want to give actual SQL Create Table commands as that wouldn't be very readable!). In essence Vehicles have manufacturers, engines, transmissions, states and types.

Engines and transmissions have manufacturers.

Most of the tables have a number of images associated with them.

victorkane’s picture

I agree (from just a few days of knowing anything about Drupal) that Drupal will do it.

For image uploading "as you work", one option is to install the FCKeditor and upload options, since it is at once a rich text editor and a server-side repository manager.

In terms of which modules to make, I would strongly urge you to make a functional analysis, not just a data centric analyis, so you can determine the design of the site, and for each view, construct a controller (static page with some php) which makes the appropriate queries to the model and invokes the view (theme api) with the results.

You may need some kind of module for paging results.

For forms, I have not tried, but seen in these pages, the webform (http://drupal.org/node/7404)module, which was designed for a large web application, and should be just what you need.

I am sure "there are many ways to do it", hope this helps...

ingles,
http://awebfactory.com.ar

unclethargy’s picture

Here's a simple example of how I envision an employee would add a new vehiclepr and edit an existing vehicle...

  1. Add new vehicle
    1. Add Name, Description, Price, Year and mileage info
    2. Select Type and Status
    3. Add new Manufacturer
      1. Add Name, Description, Image, URL
    4. Add new engine
      1. Add Name, Description, Images, and select Manufacuter
    5. Select existing transmission
    6. Add images
  2. Edit existing vehicle
    1. Change price
    2. Add new image

Here you can see that it may prove necessary to add for example a new manufacturer or engine in the process of creating a new vehicle, this would ideally be done in a popup. But I could live with the limitation of making the user add necessary manfucaturers, engines, transmission, etc. before creating vehicles.

From your comment if I were to go down a functional analysis route rather than a data structure driven route it would make sense to seperate out seperate modules. (It would help in code-clarity too I believe)

victorkane’s picture

I have been working with Drupal for just a few days.
Like any software in the world, if you don't invest some time, you won't be able to make use of sophisticated alternatives.
But I have chosen Drupal because it is far from being a "hobbyist" community: I have chosen Drupal due to its practical nature!
In fact, this is the first post I have had to put up (because I can't tolerate the injustice of those remarks).
Every single question I have had in getting up to speed, I have been able to have answered through reading the extensive documentation and through effectuating searches.
One of the threads I followed was the excellent "site configuration challenge" (http://drupal.org/node/31896) concerning the setting up of a brochure site, which I am following as an exercise at the test site http://awebfactory.com.ar (whose hosting I was able to choose through an excellent discussion... right here).
In a few days I plan on making a post to that thread, explaining the concrete path I have followed and making it available for others who may perhaps benefit from the example.
In terms of the requirements set out for the database project, they certainly could be met by Drupal (and doubtfully by many other CMS platforms), but not by any "off the shelf" or "mod" approach, but by following some kind of development process.
As in the case of any development project "I don't have time" is not going to cut it.

Patient professionals who appreciate a clean way of doing things (there is little difference between the php snippet for listing the latest 5 stories which I opted to use, and a clean Java MVC pattern, since the snippet is actually a controller which queries the model and invokes the view, whatever the theme is, in just a few lines of code) will find in Drupal, with much less work than either starting from scratch or adopting other CMS alternative, a good way of providing themselves and their customers with interactive, modern and scalable sites.

unclethargy’s picture

Thanks for the comments (I am a patient professional by the way, I have impatient CLIENTs, very different). However, I'm in need of some answers to reasonable questions and it would be great if we can keep this post on topic (i.e. answering those questions) and avoid turning it into a flame war that will prevent me from getting the answers I desperately need!

Thanks

PeterLucas’s picture

...but Drupal is not ready for professional use. It's for tinkerers or for research and development, not for quick jobs and results.

My comment was practical advice in response to the post.

Drupal is an interesting system with great potential, but it is very frustrating and confusing to work with if you're not a PHP coder and insider of the developers community.

Sorry if the truth hurts...

unclethargy’s picture

I certainly found your opinion helpful, as a new-comer to Drupal I obviously have to take such opinions seriously.

sepeck’s picture

That by clicking on a persons's name, you can see their profile information.
http://drupal.org/user/5195
http://drupal.org/user/34385
http://drupal.org/user/36011

This lets you know how long individuals have been involved with Drupal. If you click an individuals tracker you can judge for yourself by the their posts and comments whether they are valuable to you.

-sp
---------
Test site, always start with a test site.
Drupal Best Practices Guide -|- Black Mountain

-Steven Peck
---------
Test site, always start with a test site.
Drupal Best Practices Guide

PeterLucas’s picture

sepeck, I'm obviously not a developer god and longtime Drupal insider like you. I was responding to this:

...desperate to get this stuff done ASAP and am very concerned about committing to yet another CMS before I waste more time

From my experience in the last two weeks Drupal seems like a bad idea for someone in his situation.

rjung’s picture

"Drupal is an interesting system with great potential, but it is very frustrating and confusing to work with if you're not a PHP coder and insider of the developers community."

If you're not a coder, you're not going to get professional-level results out of any system. Whining that Drupal is frustrating for non-coders is like blaming a hammer for your lack of carpentry skills.

Now, speaking as someone who does write code for a living (over 15 years' experience), who has built proprietary and COTS e-commerce sites, and who is using Drupal to build commercial-level projects (and making money doing so), I'll just close by noting that -- like anything else in life -- how much you get out of Drupal depends on how much you put into it. And if you don't have experience in software development, the problem isn't with the framework...

Now, if you'll excuse me, I have to get back to work. :-)

--R.J.
http://www.electric-escape.net/

--R.J.

eaton’s picture

I've worked for a number of companies -- private corps looking to build a web presence, web design/marketing firms looking to put together solutions for clients, large consultancies building sites for high-paying clients... and I'm curious what your criteria for 'ready for professional use' are. VBScript will NEVER be ready for professional use, but that hasn't stopped scrillions of sites from launching based on a frightening monster of ASP and MS Access. :-)

If you mean that Drupal is not a turnkey solution for any particular web site development task, you're VERY much correct. That's a bit like saying that a particular development framework isn't an already-functional word processor, however.

As the original poster was a relatively knowledgable developer with a good handle on site design and some experience developing DBs and coding for them (at least from the tone of his post), I think you may be mistaken.

Drupal is not (yet, at least) a turnkey site creation tool. That's fine with me, as most of the sites I work on would require so much customization that a turnkey tool would cause more problems than it would solve. That's one of the reasons I'm here -- not because I'm a 'researcher', rather because I got tired of coding sites from scratch in C# for ASP.Net and butchering 'turnkey' solutions to get them just-so.

I would not recommend Drupal to someone who has complex needs AND has no experience coding in PHP. That's hardly a slam against Drupal, though.

--
Eaton — Partner at Autogram

unclethargy’s picture

In the hope of dragging us back on topic...

  • How easy is it to use the revisioning system with custom modules and custom content? Do my datastructures need to be designed in a way to allow versioning?
  • How well are date/times handled in the CMS, is there anywhere I should look for coding standards in this particular area? For instance are there a number of API functions for storing and retrieving Date/Time stamps in a consistent manner?

In the end I don't believe the data structures I've mentioned are overly complex, I can think of a number of projects I've worked on with far more tables and inter-relations. My real question is how suitable Drupal is to handling such interactions.

Thanks for all your feedback.

gerd riesselmann’s picture

I'm recently writing a module to extend Drupal with newspaper articles, authors and volumes. And I didn't find it that hard to step into Drupal's code.

Escpecially handling the DB, providing forms for user input, introduce custom node rendering, and extending the menu where quite easy. And this usually already is the main part of the work. However, it took me a while to figure out you also need the "menu" hook to tell Drupal your module wants to handle a specific kind of url, like e.g. /vehicles/id :-).

To answer at least a 3 of your questions:

1.) What modules to learn from? For extending nodes to a larger extend than page_example does, I personally took a look at the bookreview module. However, I also found myself diving through the node and taxonomy module quite a lot, since there you'll find some real complex SQL statements.

And I definitly recommend to use a good PHP IDE to trace down code flow, else you will be lost.

2.) One module per node type. I'm not even sure if you are able to define more than one node type in a module. However, having one module will keep your code cleaner. And name the node type the same as the module. I had problems when trying to force a different name.

3.) There's a function watchdog($type, $message, $severity = WATCHDOG_NOTICE, $link = NULL) to log events to the DB. This should do it, I guess

4.) Unfortunately, I don't know anything about image uploading :-(.

------------------
Gerd Riesselmann
www.gerd-riesselmann.net

unclethargy’s picture

That's some great tips! Could you expand on how modules link with node types. For instance if I create an 'Engine' module I assume I make create a corresponding node type of 'Engine' which allows the manipulation of engines and display of engine info. How does a module specify a new node type for itself?

Also is the $type attribute in Watchdog a string of any value? Or do you have to use built in types?

Thanks

gerd riesselmann’s picture

1.) By providing a menu entry for "add [node type]" in hook_menu() and a type name in hook_node_name(). See for example the page module which does nothing execpt introducing a new node type.

The menu entry "add xyz" was causing me problems, since it appears twice (both in the "create content" page and menu). But somehow the menu entry was pointing to a wrong url, as long as node type and module name where not the same.

2.) Yes, type and message are just string.

------------------
Gerd Riesselmann
www.gerd-riesselmann.net

gerd riesselmann’s picture

Just a few quick thoughts regarding your data model:

- Type and Status are simple nodes with title = name, content = description and id = nid (node id). Writing a module for this is as easy as the page or story module. A handfull of functions for access rights and help. But possibly these can also be implemented using the taxonomy module. No coding necessary, but some customization when distributing your modules. See Vehicles below for another drawback of taxonomy.

- Manufactorer extends a node by only one field (link), this isn't difficult.

- For Engines and Transmissions: These are common nodes, too, except they need a link to Manufactorer. From my experience, this is not hard (I did it myself to keep links from articles to both volumes and authors). Regarding the images: all image modules should link images to nodes, so this is very linkely already implemented somewhere.

- For Vehicles, the same than for Engines hold, excepts it's just more fields. If you implement Status and Type using Taxonomy, there's no coding required for that. However, it may become more difficult to do reports, since taxonomy is quite complex. On the other hand taxonomy also is very mighty in querying, allowing for example OR and AND. In the end it depends on what you want to do exactly, I suppose.

------------------
Gerd Riesselmann
www.gerd-riesselmann.net

sepeck’s picture

I don't do complex websites, but here are some modules to look at.
taxonomy to categorize stuff.

Flexinode. This swill let you build custom field types. There is an ecommerce module bundle that may get you some more product flow as well

You mention permissions. You can do it through taxonomy or by node, not both. Depending on How you do your site, taxonomy_access_contorl or node_privacy_by_role may suit you.

For images, I would suggest img_assist, posible in combination with tinyMCE.

You could also write your own node type if you are familier with php. See drupaldocs.org for misc stuff.

Logging has always been sufficient for me, but there are some odules that add some stuff. You may be able to use themn as a basis for increasing what you want.

Whether or not you can come up to speed on Drupal in a timely fashion is an interesting question. I have seen people beat their head, say nasty things in the forums and quit. I have seen people beat their heads for a while and suddenly something clicks and I have seen people that thought Drupal was the most logical thing since sliced bread and just 'got it' right off the bat.

Whether you use it for thi sproject or others, welcome to the community and have fun.

-sp
---------
Test site, always start with a test site.
Drupal Best Practices Guide -|- Black Mountain

-Steven Peck
---------
Test site, always start with a test site.
Drupal Best Practices Guide

laura s’s picture

I was going to mention it, but as sepeck did, I'll just add that flexinode was my first thought, at least for handling the specific info you're dealing with.

Laura
===
pingVisionscattered sunshine

_____ ____ ___ __ _ _
Laura Scott :: design » blog » tweet

bonobo’s picture

I'd recommend building custom modules over flexinode -- designing your own modules will give you a greater degree of control over how and where the data is stored, which will simplify things.

Also -- and I could be wrong here, as I haven't used flexinode on busy sites -- I'd be a little concerned about how flexinode would scale.

Just my .02 -- you've gotten a fair amount of feedback in direct response to your questions (and a fair amount of chatter that's completely unrelated on top of it)

Anyways. Good luck with your project.

Cheers,

bonobo

-------
http://www.funnymonkey.com
Tools for Teachers

unclethargy’s picture

I think the amount of posting in here puts a lie to the notion that it's hard to get answers out of the Drupal community!

I have looked at flexinode and other modules already, although they go someway to doing things I'd like I am concerned about performance issues using serialized data and flexinode doesn't really do relational data very well (even with the relativity module). As I mentioned in my original post the data has to be entered by a relatively inexperienced set of end-users and so using generic modules will end up being a little confusing.

I am still toying with using the taxonomy/vocabulary system but I'm still worried about confusing the end-user again.

For that reason I will have to go down a custom modules route to ensure fine grained control of the functional process. I'll write a module for each node type and probably customise an existing image module to add watermarks, allow zip files of multiple images and check for image duplication (sha hashing probably).

I am still wondering how easy it is to make use of the versioning systems built in to Drupal to handle my own data, and would appreciate some pointers towards documentation on this.

Thanks again,

Craig

victorkane’s picture

To chime in again,

Having used versioning systems on other portal/wiki and cms platforms, I think you should realize that they are designed for node versioning. That is, if you think of nodes at the business object level (not the data persistence level), you would be ok; while on the strictly database level, it would be better to use some kind of timestamp versioning of each record. Given the powerful database query support in Drupal, you would have no difficulty creating a kind of "data access object" module (per node, or (I think you mean) business object type, as you say).
So the node can make good use of the versioning system built into Drupal, whereas the data (records in the database) I think should have a timestamp on every record, and then you query for the latest, etc.

On the graphics side, someone here has suggested TinyMCE in conjunction with an image handling module. That could be a solution. Another one could be installing something like Gallery or Coppermine on the same site as a kind of repository and referencing them (right clicking on any image will allow for access, in Firefox anyway, to absolute position (copy image location).

I am seeing that FCKeditor in its latest version anyway seems to have a couple of difficulties, although it is an excellent solution. One difficulty is that it is a little slow and seems to be top heavy, whereas TinyMCE is not. Slow not only in the loading of the icons (you can select a subset and configure that also) but in the typing of the text. But it excels in one way: gives you pure xhtml code!

See http://drupal.org/node/22069 for a discussion on the merits of the various htmlarea replacements, and see post http://drupal.org/node/33844#comment-60329 (thread concerned with the difficulties some people have encountered in installing FCKeditor with Drupal) for a fascinating look at FCKeditor in use in "upload enabled repository mode" in tandem with a complete image manipulation package: http://scroogie.de/index.php?/archives/41-FCKEditor-ImageManager.html

cheers!

------------
http://awebfactory.com.ar

rjung’s picture

Just a few ideas to address the OP, off the top of my head:

What example modules do you recommend to look at that show manipulation of related database tables (that is a bit more complex than the very basic - and yet still buggy - page_example.module)?

All of 'em. ;-) Drupal is open source, so just grab an existing module that does something similar to what you want and dig into it. I wouldn't underestimate the utility of the example module, either -- it's a good start for learning how to build custom nodes.

Should I implement each object as a seperate module (i.e. Vehicle module, Engine module, etc.) or should I have one module that handles the lot?

I'd say customize it. Write a simple one to get your feet wet (using node_example as a start), then scale as needed. Once you wrap your mind around how Drupal's form callbacks work, it's easy. Flexinode is nice for quick-and-dirty prototyping, but in the long term, IMO it's better to roll your own.

Does the watchdog module allow more fine grained logging types (e.g. Vehicle changes, Engine changes, etc.)? Where should I look for examples on creating log events (e.g. User x changed price on vehicle y)?

Watchdog will log any message you throw at it; just stick watchdog() calls wherever you want. Since it automatically logs the user at the time of the call, all you need is to determine the granularity of the detail you want to capture, and call watchdog() accordingly.

Is there any image upload module out there that is easily used by custom modules to add sets of images to a data strucute? There seems to be a lot of custom image modules, do any allow me to add image uploading for example to my 'Add Vehicle' form in a robust and easy manner, and then allow displaying of those images when displaying the Vehicle node?

If you just want the ability to upload images, associate them with a node, and view them, I'd use the upload module (included as part of the Drupal core component set) with the inline module. If you want to build image galleries and link to them from multiple nodes, then image.module and img_assist would be better fits -- but if your images will be associated with only one parent node (such as engine schematics), then that's probably overkill.

All IMO, anyway. If I were to do the project in the OP, I'd create custom node modules for all the fundamental types (vehicle.module, engine.module, etc.), use the relativity module to build links between them, and use upload.module and inline.module for the images. I'd also create a few different user roles, so the folks using the system wouldn't accidentally stumble into a system administration task and futz something up by mistake.

--R.J.
http://www.electric-escape.net/

--R.J.

PurpleEdge’s picture

This isn't meant to be a Drupal flame, but why use a cms at all? It seems to me that for this type of application you would be much better off starting with CodeCharge (would be perfect), or Dreamweaver, and providing your users with the tools to enter data into their database?

Based on my limited experience you will be forever trying to twist a cms to do what you want, since they aren't designed for this?

killes@www.drop.org’s picture

CMSes are exactly made fur applications such as his.
--
Drupal services
My Drupal services

merlinofchaos’s picture

1) example modules:

While learning how to program Drupal, I found some of the basic built-in modules extremely helpful.

  1. The node module is invaluable, if for no other reason that you have to learn how this module works to really understand how a few of the hooks really work. This is an unfortunately poorly documented process, but if you have a good grasp of OO methodology, it is not too hard to follow. The _nodeapi hook, for example, is ludicrously powerful, but knowing where and when it gets called takes some study.
  2. The story module is a great simple module to learn how some of the basics of a node are actually used. The poll module is a good example for looking at a module that uses a custom node extension, and the forum module is as well.
  3. The workflow and actions modules are good for implementing process in Drupal. I don't think they're quite at the stage they need to be -- for my site, I had to do quite a bit of work to make them do what I needed to do, but they are worth a look.

2) I believe I would implement the sub-tables as Taxonomy, and if you believe that would confuse the end-user, I would spend my time coding up an alternative interface to the parts that you believe would be confusing. I would probably just hack the taxonomy module, in fact, to do what I want. I realize this is not necessarily accepted practice, because it makes future upgrades difficult, but if you do a good job of localizing your hacks, you should be able to upgrade with a known amount of work. I would do my level best to put as much of it as I could into my custom module, but I don't know, offhand, how much of the taxonomy module would need to be changed to suit your purposes. You may not need much -- it's entirely possible that changes you need to make can simply be changed with theme_ functions. Those are some of the coolest parts of Drupal.

3) The watchdog question has been answered by someone else. You might have to do some work here in order to make certain that your watchdog entries are preserved, as I believe the watchdog only goes back so far. But otherwise I believe it will do what you want.

4) look at the attachment module that comes with Drupal. It does basic image uploading and creates the images as an attachment. It does not do exactly what you want. However, it is an extremely simple module and I believe you can either beat it up so that it does what you want, or you can simply hack the code you need into your own module.

5) the exiting revisioning system is unlikely to be what you want, and I would not look at it. The one that's in Drupal 4.6.3 is broken, and is being replaced in 4.7 anyway, but that version only exists in the CVS version of Drupal. The new one will likely do what you want, though.

6) Date/Time seems to be handled relatively well, but it's pretty simple. I haven't had to do too much work with date/time, but it handles the basics just fine. It does handle timezones quite nicely.

I think Drupal can do what you want it to do. I think you should plan for 2-3 weeks of good solid coding, plus any extra you feel would be necessary to your learning curve, but I think you could end up with a good product, and you would have a lot of good stuff that you could re-use.

Someoned mentioned that you may need a module for paging results: Drupal has paging built-in. (pager_query() and theme_pager() -- look on drupaldocs.org for those) and they're quite powerful. Also, themeable, so if you don't like the default pager output you can easily rewrite it all you like. (I did!))

I wish you all sorts of good luck in your endeavor!

Also, if you have more questions, I will be more than happy to answer them. I often miss the forums, though, the traffic is relatively high and I go through phases of reading/not reading based on how much time I'm spending on a Drupal-related activity that week.

-- Merlin

[Read my writing: ehalseymiles.com]
[Read my Coding blog: Angry Donuts]