i-lign is a NZ software company with a web based project management product. We have recently finished a major update to our website, and did all the work ourselves. Previously we used Drupal to run our community forums and support knowledge base (see previous showcase from a year ago) while the product brochure site was a completely separate non Drupal site. The new site combines both sites into one with a completely new look. Our philosophy is that enterprise software vendors should be a lot more transparent and open about their products and we are putting everything about the software up front on our site, and in the future will be relying on even more cool Drupal functionality to support user groups, blogs and issue tracking etc.

The sites architecture and the different sections are mostly driven by the primary menu. The menu is used to determine which section a particular page is in (there are default menu positions for nodes not in the menu), and then that section changes which stylesheets are used.

The knowledge base section architecture is almost entirely taxonomy based, and uses the Taxonomy Filter module we wrote. For the latest site we've added a lot of new features to the module - eg handling hierarchical vocabs (incl multi hierarchies), and choices of different filter menu types for different vocab structures.

The highly site specific theme was built from scratch using phptemplate. There are two different page templates that get used - one for the front page and one for the other pages. There is a base stylesheet holding common styles, then each section gets another stylesheet for its specific styles or overrides. Unfortunately this easy guide to creating square corners in CSS arrived too late for us, and we had to do it the hard way ;)

We coded a few site specific modules too: one was just a container for a bunch of form_alter and nodeapi tweaks to core/contrib modules and a few menu tweaks, one was for a simple node type with 2 text bodies for the 2 column pages (could've used CCK but didn't), and the third was for custom taxonomy listing pages (could've used Views but didn't). None of these are fit for general consumption yet, but as we refactor the site we might add them to drupal.org as well.

Currently the site is still Drupal 4.7, but an upgrade to Drupal 5 is the next thing on the todo list once we've replaced some older legacy modules.

Comments

newdru’s picture

Can you say more about this:

The sites architecture and the different sections are mostly driven by the primary menu. The menu is used to determine which section a particular page is in (there are default menu positions for nodes not in the menu), and then that section changes which stylesheets are used.

what do you mean by there are default menu positions for nodes NOT in the menu? trying to follow you here. and how you implemented that once i understand it? :-)

thanks

styro’s picture

As an example the following listing http://ilign.com/categories/13,67 and node http://ilign.com/node/818 (edit: previous randomly chosen node wasn't actually published - doh!) appear under the "Support" -> "Knowledge Base" menu trail. The site knows that listings of terms from certain vocabs or nodes of a certain type should set the Drupal breadcrumb to that menu trail.

We used this function to set the breadcrumb trail.
http://api.drupal.org/api/4.7/function/menu_set_location
Although we don't actually display breadcrumbs anywhere, we do use them for manipulating the active menu items.

eg: for the nodes (notice the defined constants for various site ids)

function modulename_nodeapi(&$node, $op, $teaser = NULL, $page = NULL) {
  if ($op == 'view' && $page) {
    if ($node->type == 'story' ) {
      if (!$node->parent) { // if the node is in a book, skip it and let the book set the menu trail
        $trail = array(menu_get_item(menu_get_active_nontask_item()));
        foreach($node->taxonomy as $term) {
          if ($term->vid == PURPOSE_VOCAB_ID) {
            switch ($term->tid) {
              case PRODUCT_INFO_TERM_ID:
              case RELEASE_NOTES_TERM_ID:
                $trail[] = menu_get_item(ALL_RELEASES_MENU_ID);
                $trail[] = menu_get_item(PRODUCT_INFO_MENU_ID);
                break;
              case SUPPORT_FAQS_TERM_ID:
                $trail[] = menu_get_item(SUPPORT_FAQS_MENU_ID);
                break;
              case ENGAGE_FAQS_TERM_ID:
                $trail[] = menu_get_item(ENGAGE_FAQS_MENU_ID);
                break;
            }
          }
        }
        if (count($trail) == 1) {
          $trail[] = menu_get_item(KNOWLEDGE_BASE_MENU_ID);
        }
        $last = end($trail);
        $trail[] = menu_get_item($last['pid']);
        $trail = array_reverse($trail);
        menu_set_location($trail);
      }
    }
  }
}

The taxonomy listing pages do a similar thing.

--
Anton
New to Drupal? | Forum posting tips | Troubleshooting FAQ