Myplay.com is a redesign and re-branding of Sony's Musicbox site which showcases SonyBMG's artists, providing free access to their videos, music and photos. Users can create lists of their favorite artists as well as review their music and embed widgets of their favorite artist's content into other sites. Sony Musicbox was originally implemented by the Lullabots who provided the base framework for this redesign. Thanks to their diligence and teaching as well as excellent tools provided by Earl Miles (Panels 2, Views and Nodequeue), three people (Suzi Arnold, Jerad Bitner and David Burns) were able to accomplish this task in just over a month.

This case study documents how the site is put together, and provides implementation details on how we've combined numerous important contributed modules to build a "next generation" Drupal site.

Overview

Here's a deconstruction of the home page to illustrate how we're using modules such as Views and NodeQueue to build dynamic pages that our content editors have full control over. More detailed information about implementation follows.

Each landing page is a Panel, with several Views and Blocks to pull in content from other sections. Panels allows content editors to make changes on-the-fly about how the landing pages should be structured, what content should be placed on the page, and where.

In places where artists or videos are featured, a NodeQueue is used so that content editors have precise control over the order in which the featured content is placed, and can selectively choose which is the most prominent in the page.

Two pieces of custom functionality are used to build this page: the first is the custom content type from which we're pulling the Flash animation. The second is an AJAX callback added to the artist View listing. The rest of this page is just creative theming of the output provided by Views, Panels, NodeQueue, and the Drupal block system.


Content Types

Since the site is based upon our Artists, these are essentially the "master" node types, in that the Album, Video, and Photo content types contain a node reference CCK field to the Artist of which they are an asset. The Album content type then has an asset of Track, creating an hierarchy as follows:

  • Artist
    • Album
      • Track
    • Video
    • Photo

Considering that there is this relationship between content types, a custom navigation module was created during the inception of Musicbox to not only keep track of translating the titles of these nodes into clean titles for urls (i.e. Foo Fighters becomes foo-fighters) but also, just in case someone tries to use a path of say: /artist/foofighters, they would be redirected to /artists/foo-fighters AND would keep track of its parent when it came to urls for artist assets. So Albums keep track of the fact that they have an Artist node as a parent, and Tracks are aware that their parent is an Album. This makes it easy to find the relationship of a particular node with a simple query.

Nodequeues

Nodequeues give our content administrators the ability to control what goes where. For example, by allowing our admins to create a list of the albums that they want to highlight this week, we can take this nodequeue and display it through a view to show on the front page as well as use it to generate an xml feed for the flash widget on the Videos page.

Initially we had just two nodequeues that defined our top artists, and then automated what assets were displayed by this list, but there was a need for more fine grained control of what content was shown on main pages (/artists, /videos, etc.) and more nodequeues were added to give them this control. Nodequeues are great for this purpose and allows content admins to have a uniform UI for adding, removing and sorting highlighted content.

Panels

With the new beta release of Panels 2, we were able to effectively cut the amount of panels in our list by almost 66%. This is due to the Context feature that Earl implemented. Context is a bit complex to grasp at first, but the simplest example I can give is the Argument Context. Let's deconstruct the Video Panel and you'll see what I mean.

The path for the Video Panel is simply /videos. In the Context Tab of this panel, we then add an argument for Node Title. The Node Title argument is a custom argument panel-plugin that I implemented by using the custom module mentioned above (myplay_navigation) that does our clean node title translation. But this panel-plugin is very similar to the Node ID argument that comes with Panels 2. So suffice it to say that instead of giving the panel a Node ID as an argument, I can give it a Node Title instead. ANYway... for each argument given, a new context is created. But that's not all. A new Display is also created. These displays can have a completely separate Layout and completely separate Content within those layouts. So the hierarchy here is as follows:

  • Panel
    • No Argument
      • Url: videos
      • Display: Default
      • Layout: Flexible 3 Col, 2 Row
      • Content: List of Videos from Priority Artists
    • Argument 1 - Artist Node Title
      • Url: videos/britney-spears
      • Display: Node Title Artist
      • Layout: Flexible 2 Col, 1 Row
      • Content: List of Videos by Britney Spears
    • Argument 2 - Video Node Title

Theming Panels and Views

We chose to use the 'flexible' layout for all of the panels on MyPlay. Flexible allows the admin to set exact width units (%, em or px) in the layout settings for the total page as well as individual columns. Pixel-based column widths were essential for the new design, specifically for browser compatibility as safari tends to read % and em differently than other browsers. This is another big advantage of Panels 2 as Panels 1 is all percentage-based.
Virtually every view we use has a custom theme function that allows us to recycle the view but change look and feel based on where/how the view is being called. We also account for this in the node tpl files as needed. Examples follow:

http://myplay.com/artists/britney-spears
and
http://myplay.com/music/britney-spears

use the same standard linked image/linked title list view for the music block:

In our theme function (in template.php) for "function mytheme_views_view_list_myview($view, $nodes, $type) {"
we break up the $output displays via:


// artist nodepanel needs only 1 image
if (arg(0) == 'artists' && !is_null(arg(1)) && is_null(arg(2))) {
  (make look this way)
}

elseif (arg(0) == 'music' && !is_null(arg(1)) && !is_null(arg(2))) {
  (make look that way)
}

Another handy trick is sniffing for views in the node.tpl file via:

<?php  global $current_view; ?>
<?php if ($current_view->name == 'some_view' || $current_view->name == 'another_view'): ?>

    (whatever you want here)

<?php elseif ($teaser): ?>

    (format the teaser)

<?php else: ?>

    (full node view)

Pane-specific node templates

Panels 2 has tools for very fine-grained theming control. Using our example above of Argument 2 - Video Node Title, there is a unique node tpl file for the video content type when called via this panel. Steps for using this method (in Drupal v 5.x) are as follows.

In the panel/content tab for Node Name 2 Video - node content pane we have the Identifier set as:

Next, in your template.php file, specifically the section for _phptemplate_variables - $hook == 'node', add the following code:


  if (!empty($vars['node']->panel_identifier)) {
    $vars['template_files'][] = 'node-'.$vars['node']->panel_identifier;
  }

...note that if your template.php file does not have a section for this check the Zen theme for examples to copy.

Finally, create your node tpl file. In our case this file is named: node-video_node_pane.tpl.php
This can be themed as any other node tpl file.

Questions/Comments?

We welcome your feedback! :)

Comments

KentBye’s picture

Wow. Great write up Jerad!
It's great to see some real-world examples of Panels 2 in action, and this is the best explanation of Panels context that I've seen so far. I still had to click through to the three example pages that you linked to before it finally started to click. But it does seem like there is a lot of power there, and it's interesting that you've cut out 2/3rds of your existing panels by using the context features.
The dynamic pages deconstruction graphic is also fascinating to see.

One question that I have is -- are you using the smartqueue feature of NodeQueue at all? Earl talked about it a bit at Drupalcon, but I think I'd have to see a real work example of it before I totally grasp it as well.

Thanks again for sharing this!

sirkitree’s picture

Yes we are! You can take a look at http://myplay.com/music and note that there are sections for the different genres. This is one smartqueue that we add nodes of the album content type to and they are put into their respective queue according to the Genre vocabulary.

Vocabulary: Genre
Terms: Rock, Pop, Hip-hop, etc.

This is then attached to the Album content type.

The smartqueue is then setup to take nodes of this Album content type and when one is added, it is automatically put into the associated queue. (i.e. when adding a Britney album, the album is already associated with the Pop vocabulary term, and therefore is inserted directly into this smartqueue in the subqueue 'Pop').

Is that clear enough?


~Professional: Lullabot
~Personal: jeradbitner.com

KentBye’s picture

It's more clear after seeing this example, re-reading the nodequeues section above and looking a bit at the source code.

So it seems like the smartqueue is a way to automatically add new nodes to a set of limited & ordered "views" categorized by taxonomy.

Or more specifically that http://myplay.com/music is a panels-driven page including one view of one smartqueued nodequeue that has six subqueues of pop, rock, R&B, Hip Hop, Country & Latin that are determined by taxonomy. So any new albums added to the system are automatically added to this smartqueue nodequeue, but that you're able to change the order of the list and determine which artists are featured depending on who you want to highlight.

Is that correct?

And according to your Nodequeue section above, I'm assuming that the album covers featured in the scrolling albumCoverFlow.swf are being driven by the same smartqueued nodequeue as down below. Or is that a different nodequeue since it seems to be in a more randomized the order.

sirkitree’s picture

Keep in mind that the smartqueue only holds the artists we want, but yes, we can change the order at will, and even set it to display them randomly by using a view to display the nodes that are within the view.

And yes it is just one view, but given a subqueue id as an argument to determine which subqueue to display. (Man I hate typing 'queue'... you think I can get away with nodeQ and smartQ?)

As for the albumCoverFlow, the list of albums is actually using the same nodeQ that is on the Home page, and not the smartQ below.


~Professionally: Sony BMG - myplay.com
~Personally: sirkitree.net | drupalmao.com


~Professional: Lullabot
~Personal: jeradbitner.com

flickerfly’s picture

:-) Glad to know I'm not the only one who hates typing Q.

jcfiala’s picture

I've been working at updating nodeQ and smartQ to D6, and there's times I've started typing 'queue' and forgotten to stop. :) (queueueueue... oh, bugger.)

--
-john

--
-john

merlinofchaos’s picture

When I was rewriting Nodequeue into nodequeue 2, the queue ID (or qid) and subqueue id (or sqid) kept making my brain go "squids skid on their kids for a quid" or other such nonsense. It hurts.

-- Merlin

[Point the finger: Assign Blame!]
[Read my writing: ehalseymiles.com]
[Read my Coding blog: Angry Donuts]

-- Merlin

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

jitenm’s picture

Congratulations to Lullabot and Sony BMG on the launch of a hugely impressive project!

My question is regarding your fans social networking. Did you consider implementing with and leveraging an existing social network, such as Facebook? If so, what challenges did you encounter and why did you decide against it?

Also, can you tell us a little bit about how the fan profile page is structured?

Thanks for the excellent writeup and thanks for sharing this with the community!

Sree’s picture

Thats a wonderful! write up ....

-- Sree --
IRC Nick: sreeveturi

sirkitree’s picture

We did not leverage an existing social network. Musicbox, which was the first inception of this site, has been around for a couple of years now and running on Drupal. This was originally built by the Lullabots in Drupal 4.7. During last summer it was migrated by them (and a little help from me and Dave, more of a learning experience) to Drupal 5. The new rebranding to Myplay was then built by the Sony team with some consulting by the Lullabots. So the site being around that long, we already had a very good user base to work with. Though there are plans in the making of using Drupal as a back end to our artists we have on Facebook. But that's a story for another time ;)


~Professionally: Sony BMG - myplay.com
~Personally: sirkitree.net | drupalmao.com


~Professional: Lullabot
~Personal: jeradbitner.com

drupalina’s picture

Great site and congratulations of job well done!

I wonder if you could elaborate more on the social networking aspect of MyPlay:
1) what did you use for "Add to friends"? Is that buddylist? User-relationships? view-bookmark? Flag?

2)Waht did you use for the profile page? Nodeprofile? Bio? I'm also assuming that it's Panels that divides the page into those blocks. But did you use Advanced Profile Kit?

3) and how did you get the friends block working with pictures? Is that a module like Avatar blocks or Views with nodeprofile?

Thanks !

JohnForsythe’s picture

Nice writeup, nice site. Seems very functional and easy to navigate, which is something I appreciate in a design.

One thing I found kind of odd was keeping the search textbox hidden by default. It's a bit non-intuitive to have a form submit button, but no accompanying text entry area. It breaks with normal web interface conventions (and thus user expectations), which is generally a "bad thing" for usability.

PS: The Panels image is missing a link to the larger version.

--
John Forsythe
Drupal Modules - Find the module you need for your project!

venusrising’s picture

I assume that this is Drupal 5 due to the module list?

venusrising

sirkitree’s picture

Most definitely.


~Professionally: Sony BMG - myplay.com
~Personally: sirkitree.net | drupalmao.com


~Professional: Lullabot
~Personal: jeradbitner.com

sprite’s picture

Yes, the Sony site must have been constructed with Drupal 5.x because the modules used to implement it do NOT have released Drupal 6.x versions!

When is Drupal 6.x going to become a practical reality, with sufficient module support for features like photo galleries, views, and so on?

spritefully yours

spritefully yours
Technical assistance provided to the Drupal community on my own time ...
Thank yous appreciated ...

abdu’s picture

http://www.netlinkindia.com/

Thanks for your detailed explanation about the configuration, it's very interesting to read about the panel and views configuration you have used.

Liam McDermott’s picture

There's a small bug in Opera (9.26): from the home page, click on someone in the 'Whos online' section, scroll to the bottom of the screen. The breadcrumbs are at the bottom for some reason, and when the 'My friends' block is populated it overlaps the #footer graphic. Just tested in Firefox too, seems to be doing the same thing.

Great site though, great write-up too. It's so important to see how real-world, ninja Drupal sites are put together. Thank you for sharing it with us. :)

----
Web Design, GNU/Linux and Drupal.

Liam McDermott’s picture

Found another couple.

On this page: http://myplay.com/user (seems to only be in Opera), the 'Log In' text is still visible as well as the 'Go' text in the login block on the right side. Also, clicking 'Supersize it' underneath an image results in a popup with two grey--Google ads--boxes, but no image.

Tiny problems, thought you'd like to know though. :)

----
Web Design, GNU/Linux and Drupal.

mondo’s picture

same here.. the supersize it link is very perplexing. i'm using firefox, not opera.
i also can't get videos to play. it just says "sponsor message" and nothing happens.

mrbert’s picture

This is the best explanation of panels I've read. Congrats on a great job well done.

Ghana Real Estate | Voacanga Africana Seeds | http://www.voacanga-africana.com.gh/sheabutter/">Shea Butter

themegarden.org’s picture

Thanks for this amazing article.

---
Drupal Theme Garden

LCD-1’s picture

Thanks , very nice.

mokargas’s picture

One month! Incredible turnaround time!

alex.b’s picture

I have found very useful things in this article, especially explanation regarding Panels and Views configuration. Thanks.

Alexander
ThemeArtists.com

WorldFallz’s picture

Great site-- and thanks SO MUCH for taking the time to do this write-up. I find that write-ups like these are by far one of the most valuable ways to turn drupal knowledge into actual sites. Well done.

Jody Lynn’s picture

Whoa, I really like the 'sniffing for your current view' and the panels 'identifier' stuff. Did not know those variables were there- thanks!

--Zivtech--

coltrane’s picture

I'm interested in the custom navigation module used to discover relationships. Can you talk a little about how it's implemented? Are you doing look-ups off page arguments or have you hooked into the menu system (or something else)? Thanks! Great writeup, wonderful examples of panels-use.

sirkitree’s picture

This module was created by Nate of the Lullabots. Originally it did more then it does now, because some of the context features of panels 2 replaced some of the myplay_navigation.module's functionality such as the function myplay_navigation_determine_panel() which I'm sure you can guess as to it's purpose ;)

Basically, the purpose of this module was to be able to do a lookup of a node from it's title, from the url or node id and determine certain inherent properties. This was accomplished by using custom_url_rewrite() and a separate table to keep track of each node's properties such as it's parent (a track has an album parent) and it's parent type as well as the full title, a 'clean' title and a compressed title. So for instance, Britney's song "Break the Ice" is a track. It's parent is of node type 'album' with the node id for the "Blackout" album. It's 'clean' title is 'break-the-ice' and it's compressed title is 'breaktheice'. However there would be another entry for her video "Break the Ice". It's parent is of node type 'artist' with the node id for the artist "Britney Spears". Then when you go to do a lookup of 'break-the-ice' myplay navigation has a lookup function in which you give it the parameters $word = 'break-the-ice' and $parent_type = 'album' and you will receive the node id for the track and not the video.

Nate would be able to expand on this concept if asked, I'm sure ;)


~Professionally: Sony BMG - myplay.com
~Personally: sirkitree.net | drupalmao.com


~Professional: Lullabot
~Personal: jeradbitner.com

quicksketch’s picture

The myplay_navigation module largely provided a complete replacement for the url_alias table, for reasons of efficiency and complexity. Drupal has the most bad-ass secret function that no one knows about: custom_url_rewrite.

By putting a variant of this function in our settings.php file, it makes it possible to build an entirely different system for looking up URLs for a node, panel, or whatever. The trouble we had with panels originally was that panels could only take numeric arguments. So we'd setup a panels like this:
panel_url/$genre_taxonomy_id/$artist_nid/$album_nid

However, we weren't going to want a URL like "albums/3/324322/544544". Due to the number of combinations of media type (album/video/news), genre, artist name, album name, song name, etc. using the menu_alias table wasn't an option because we'd have millions (or billions) of URL combinations. So instead we wrote the myplay_navigation_module that supported a sort of relationship structure where it would look at the current URL and do separate alias lookups for each part (find me the nid for an artist named 'britney-spears', okay now find me the nid for an album named 'baby-one-more-time' who has a parent nid of X, now find me a track with the name... with the parent nid..., etc). This keeps the lookup table from being ridiculously large. Then once we had all the term or node ids necessary we'd call the panel we wanted and display it. So we gained the ability to have complex defined hierarchies for panels, but we lost the ability to specify any sort of user-defined path for a URL, it's like a hard-coded version of pathauto.

Anyway, recent enhancements to panels.module make most of this unnecessary and Jerad is working to phase out the module.

Nathan Haug
creative graphic design        w: quicksketch.org
& software development       e: nate@quicksketch.org

xamount’s picture

Very well detailed write up Jerad. Awesome job.

brst t’s picture

Britney who?

sirkitree’s picture

We were going to use Weird Al, but corporate initiatives kicked in ;)


~Professional: Lullabot
~Personal: jeradbitner.com

benansell’s picture

Great case study!

From what I understood form the write up, CCK node-reference fields and some additional custom module development were used to create and manage the inter-node relationships for artist, album, and track.

Could you please give some background reasoning as to why this approach was adopted over and above other alternatives like using Node Relativity? Currently working on a project where there are both one-to-one and one-to-many relationships that need to exist amongst the various content types, and we are at a proverbial fork in the road when it comes to deciding how to actually implement these inter-node relationships within Drupal.

Are there specific gotchas, pros and cons to one approach versus the other?
What content display considerations should one consider in order to decide which approach has more merit given the circumstances?
Is one approach more favourable than the other in the context of compatibility with with Drupal 6-7 directions?

All we ' think' we know at this point is the following:

Node-reference field approach:
- relationships are one-way, so you need one node-reference field for each inter-related node in a relationship
- node creation is separated from node-relationship definition in that the relationship can be set up after the fact (assuming the node reference fields are not Required). This could be a pro or con depending on the details on the node creation/publishing process.
- making each node-reference field in say two relate content types A and B 'required' will skirt around orphaned children syndrome, but what if one does not necessarily need B to exist to create A?

Node-relativity approach:
- can set up the cardinality of relationships on a paired content type basis
- relationships are innately bi-directional
- seems that relationships can only be established at node creation time through "link operations" - but, have not figured out how (or if even possible) to create a node relativity relationship between two already existing nodes

Any and all guidance will be greatly appreciated!

Thank you again for the case study.

sirkitree’s picture

With a very small turnover time expectation, we decided to use what already worked rather then spend the time exploring alternatives. Though we were able to reduce the amount of custom code in use, the inter-relational management already worked well and would have been a huge task to try and stage any other solution.

During the original inception of the site, in which this custom module was devised, I'm not sure that Node Relativity yet existed or was mature enough to use. I admit to not knowing exactly why this decision was made originally and since I've not used any other alternatives personally, I'm not sure I'm qualified to answer all of these questions. I can tell you that in our instance, node relationships were required, so a track absolutely required a reference to and album, and an album absolutely required a reference to and artist. The custom module then kept track of the inheritance, so that a track was inherently associated with an artist by proxy.


~Professionally: Sony BMG - myplay.com
~Personally: sirkitree.net | drupalmao.com


~Professional: Lullabot
~Personal: jeradbitner.com

BioALIEN’s picture

Thank you for sharing this great write up. You shouldn't be encouraging the use of Beta quality modules ;)

---
Dee
iScene Interactive :: iScene.eu

sinasalek’s picture

Nice working example :), Thanks for sharing it.

sina.salek.ws
Feel freedom with open source softwares

sina.salek.ws, Software Manager & Lead developer
Feel freedom with open source softwares

astra’s picture

Very helpful example to learn Panels, Views and combination with them, as well as the theme system. Thanks a lot!

pwolanin’s picture

You don't seem to use the CSS aggregator. Is that due to using private downloads or because development/theming is still in progress?

---
Work: BioRAFT

sirkitree’s picture

We do use it actually, but it gets toggled when we push changes to the live server. Looks like someone forgot to turn it back on ;) Thanks!


~Professionally: Sony BMG - myplay.com
~Personally: sirkitree.net | drupalmao.com


~Professional: Lullabot
~Personal: jeradbitner.com

newdru’s picture

thanks for the great writeup! nice site!

i understand the way you used node reference to relate the different content types.

the question i have is how you implemented the actual audio (aka track) and video content types.

1) is the audio track entirely a cck custom type? if so which "type" of cck field was used to keep track of the actual audio file to play (someone is going to have to use a form to upload it and then the track will later need to be pulled from a location on the disk for playback - so which cck type field best allows for uploading the file and then retrieving the audio in a meaningful way for later playback)?

OR

2) did you base the audio track itself on an existing contrib module type like "audio" module or some other and then extend that "base" content type with extra cck fields like nodereference etc? if this approach was used, which module was used for the base audio content type?

3) same questions above apply to the video file and how it was actually handled / implemented / typed?

thanks for any info you can share on the matter

sirkitree’s picture

Tracks are their own nodes with a node reference to the album and a cck field for the track url which is then served up through a custom player. The actual track is hosted on a third party server so we just reference the location within the node and let the player deal with serving up the actual track itself.

Videos are also their own nodes with a node reference to the artist and a cck field with a url to brightcove where all of our videos are hosted. This is then displayed on the theme layer through brightcove's player using their api to make the appropriate ad calls and pull up the specific video.


~Professionally: Sony BMG - myplay.com
~Personally: sirkitree.net | drupalmao.com


~Professional: Lullabot
~Personal: jeradbitner.com

newdru’s picture

So you didn't use the track node content type to *locally* upload tracks to the server that powers your website (the one described here).

You use the third party services / servers for both audio and video files proper. Then you have to manually copy and paste the url into a cck *textfield* on the local content type.

I'm trying to figure out what would be the best way to do what you guys did but upload and store the audio (and or video) files locally. Should i extend the audio module node type with cck node ref fields or is it better to create the entire audio "track" content type from scratch, using a predefined cck field type (not sure which one?) to both upload and store the audio file locally. make sense?

if you have any thoughts based on your current experience, i'd love to hear them?

thanks for the replies

sirkitree’s picture

This is automated through a custom module that uses the Amazon API to generate the nodes. You could use the Amazon services module for something like this.

~Professionally: Sony BMG - myplay.com
~Personally: sirkitree.net | drupalmao.com


~Professional: Lullabot
~Personal: jeradbitner.com

gusaus’s picture

How you're doing audio/playlists is one of 'many' great bits of information in this case study (thanks!). I set up a wiki to explore the multitude of options for this type of functionality:
http://groups.drupal.org/node/10894

More info on how Amazon API generates the nodes and third party audio is referenced would have a great deal of value.

Thanks!

---------------------------------------
Gus Austin
PepperAlley Productions

---------------------------------------
Gus Austin

shaman365’s picture

Great Job on the site! Absolutely inspirational.

I'm trying to follow this blueprint and I was wondering if you set up a view for the track nodes to be served up to your custom mp3 player. I'm attempting this with a druplash approach where I want to have a custom flash mp3 player grab the track node fields from a view.

I've set up similar nodereferences between artist, album, track etc. My view is set up to grab a nodereference field that contains track information such as the mp3 url, an image, artist names, etc. But when my view comes up it shows something like this:

[field_trackitem] => Array
(
[0] => Array
(
[nid] => 9
)

[1] => Array
(
[nid] => 12
)

)

Does anyone know how to get those [nid]'s to display the actual nodereference values? Sorry I'm noobed out.

Thanks and I appreciate any help you can give me.

andrewblack’s picture

subscribe

berenErchamion’s picture

Very nice writeup - and it is very interesting to see how a large content site works. I would be very interested to know more about the back end infrastructure that is used to host a drupal site of this size. For example - are you using caching technologies? Do you have multiple database servers and php engines clusters? This kind of information would be very helpful. A number of times people have objected to the use of Drupal (as opposed to custom code) due to concerns about performance and required infrastructure.

beren erchamion
http://tarnaeluin.wordpress.com/

sirkitree’s picture

We do use caching technologies, mainly memcache, a whole server is dedicated to this task and it has helped immensely in keeping out main databases cool. We have one load balancer, 4 web heads and 2 database servers. I'm not saying that we actually require that much hardware, but we like to be on the safer side then sorry. ;)


~Professionally: Sony BMG - myplay.com
~Personally: sirkitree.net | drupalmao.com


~Professional: Lullabot
~Personal: jeradbitner.com

alexic’s picture

Wow! it really shows the power of drupal...

but it means that we miss a lot of documentation!

Fabio
---
http://pastaconlesarde.netsons.org

neochief’s picture

You've done great job on the whole architecture of the site, guys. It's really great.
But site has a huge lacks of quality in details. I hope they all will be fixed soon. By the way, isn't myplay.musicboxdev.com is your sandbox for the project? :) I surfed it through the link in gydget's video widget. It was "read more" link in Britney Spears bio in that widget. I think it should point directly to the myplay.com

Anyway, great job! Congratulations from Russian Drupal's community.

yeeloon’s picture

Hi sirkitree,

How do you actually accomplished the "Favorite Artist", "Favorite Music", all those favorites' types?

Is it done using existing Views Bookmark or Favorite Nodes? I'm trying to achieve something like instead of display a row of texts, I want to just display the Artists / Albums images.

Btw, anybody managed to do something similar to this using Views Bookmark?

Cheers,
yeeloon

sirkitree’s picture

Yes, we're using Views Bookmark for this feature.


~Professionally: Sony BMG - myplay.com
~Personally: sirkitree.net | drupalmao.com


~Professional: Lullabot
~Personal: jeradbitner.com

BostonDave’s picture

Thank you for this post - as someone who is looking at drupal for high-profile sites, it is very helpful to have one already released when you are speaking with other members of your team.

Thank you!

joep.hendrix’s picture

Thanks for sharing!

-----------------------------------------
Joep
CompuBase, Drupal websites and design

-----------------------------------------
Joep
CompuBase, Dutch Drupal full service agency

jstoller’s picture

If it's not too much to ask, could you post a list of all the modules you have installed on this site?

––
Jeremy Stoller
Senior Graphic Artist
California Science Center

––
Jeremy Stoller
Senior Graphic Artist
California Science Center

smoothify’s picture

Thanks for writing all this up, and sharing some of the details on how you set up such a large site with the load balancing.

very cool!

Its also interesting to see your usage of Views Bookmarks and Node Queues, i seemed to have missed those and they could be very useful.

Thanks

Ben

drupalgeek’s picture

hey ,

the above thing looks quite amazing ....... its very well explained .... i like ur work
lately i also found facebook clone in drupal ( http://kickwork.com/) build by EBIZON TECHNOLOGIES http://www.ebizontek.com/

andrewblack’s picture

coll site

purrin’s picture

what an awesome breakdown!

tax’s picture

Great site, really good work.
I have a simple question, how do you make those gray panels with rounded corners solid?
With basic panels usage i can't get those rounded panels solid like yours,rounded, yes, but filled with anything.
How do you fill them? Can u explain as simply as possible this basic task?
Sorry to ask a simple task like this, but i have a really basic knowlegment of code and css.

Cheers

tomrenner’s picture

Congrats on the great work you've done. And thank you so much for sharing your experiences with us!
I have tried to follow your instructions concerning panels2.
I set up 2 different panels for 2 content-types (artist and programme) which I would like to call via path "artist/%" and "programme/%".
This ist the point where I am stuck right now: as my URLs are being generated by autopath-module, it seems I won't get any further without your node-title-argument-panel-plugin.
Or is there another way to assign different panels to various content-types?
Somehow I feel the arguments-list in the context-page is in urgent need of extension. Adding a title-argument would enhance flexibility provided by the combination of CCK and panels2 enormously.

ragazzo

Aquilasfx’s picture

How you make video page with video i the left and information to the right like (rate, embed, views ecc). Which module you use for that?

prezaeis’s picture

could you share how you did the artist listing block? would really appreciate it

JohnLinux’s picture

Yea the artists page pleeease

--
www.whereis.co.ke

grupalduru’s picture

Your setup looks much better than what they have right now... even though it still uses drupal, I loved your design much better...

vindos’s picture

Hi sirkitree,
Thanks for your time and effort in writing up this article with clear instructions and examples as how you have used the drupal modules. Seeing this kind of live examples gives us (beginners :-) ) the idea and applicability of Drupal Moduels.

I can say that, it helped me to understand, not completely but at-least the basic know-how of 'Panel' and 'NodeQueue' modules. It helps me to work further and implement in my projects.

Once again thanks for all the support you are providing by following up the comments.

Thanks,
Vinod S.T.

StarPower-Com’s picture

in the red box on the overwview section where it says ' Flash feb by xml feed of a custom content type that holds the large iamge, a thumbnail and a link. '

Does anyone know how that was created. Is it possible to create something like that using existing modules. Any help appreciated. Thanks

adrianmak’s picture

Should audio track of an album is created one node by one node ?