Recent Example Work

views handler

Working in Views can be a challenge when trying to do something outside the box. One of the best ways to get around limitations in Views is to build your own handlers. Here is an example of a field that needs to display a form for updating content for the given row.


On Arcadia's private intranet side of the site, they have a dashboard that is made up of widgets. These widgets usually just display data feeds. It never really caught on, but I still tried to use it. One of the first ones was built when HR had a need to display a link to an external training tool. This tool required a login and most people on campus didn’t even have an account. HR wanted an easy way for everyone on campus to access their training tools without having to remember another password. So I built the MindFlash Widget to solve this problem. This is an implementation of a Json lookup using the MindFlash API.

analytic layer

At Arcadia, we held a bi-weekly UX meeting to discuss different items our team needs to think about. At one meeting we talked about a request from the Enrollment Dept to modify the interaction on the Program Search page. 

I remember how much time we spent reviewing this page to get it right. Weeks were spent with experts and focus groups to give the user a valuable experience. 

I built this module to track clicks on this Program page. These clicks that were tracked were interaction clicks which do not take the user away from the page. They simply display and hide a summary set of data. I didn't want to record every single click, but rather a group of how many clicks were clicked at a single session.

What this data showed allowed my boss to go back to the department to show them that people indeed use the interaction as originally designed.

note: They really didn't need to have this changed, and were fine that it didn't.

Most of the work is in the js file. This module loads the js file on our specific page and initializes it. Inside the js file, there is a defined function to update the data layer. This function is called on specific clicks on the page that pass the title of the html element as defined in the theme. This code, combined with Google Tag Manager, let's us send custom site data and UX information into our analytic reports.

active slide

The home page that was built for us at Arcadia was a custom content type that only had one purpose. We also had this great content type called a landing page that was built with paragraph bundles. We thought it made sense to rebuild our home page using the existing landing page content type. This makes things easier for the user. The challenge on my side was to recreate the slider, carousel and feeds to be paragraph bundles. This worked out great. The most challenging piece was getting the carousels to stay in sync. The feeds were rendered as carousels and so were the main slide and the thumbnails. Each was it's own carousel and I had to build the interaction between them to change the slides. It worked great, until you clicked really fast. Sometimes the sync would be off. So I made a little js that checks the slides in the carousels and puts them in sync.

menu handler

The Drupal site was such a success at Arcadia that the blog sites on campus are going away from their individual sites and adopting the new Drupal site as their home. But they still wanted some sense that they were their own site. To make this really work, each section had to manage their own navigation. To allow this, we needed to get better control of our menus. The menus are displayed in 3 places on the page that we wanted to modify for these subsites. At the heart of this control is a little function that handles which menu to display where. 

All of the Sub Sites were to be nested in the primary navigation. The first page would have information that controlled how the navigation would display. For instance, field_display_primary_navigation would indicate if the main site primary navigation would be displayed. In this field, a user could select to display the primary nav, no nav or their own subsite nav. This display would be replicated to any page saved within the sub site navigation.