Quantcast
Channel: drupal.org - Site administrators
Viewing all articles
Browse latest Browse all 426

Theming Discogs 6.x

$
0
0

This is the documentation on all the theme override functions in Discogs 6.x.

  • After you find releases using the import form, the resulting import form is rendered using theme_discogs_forminfo($info). The $info variable is a multidimensional array of artist/label info.
  • For releases with multiple artists, you format the "artist" field using theme_discogs_artists($artists, $cleanup = TRUE). The $artists variable is a multidimensional array artist names and join characters. $cleanup is a boolean variable that says whether you should "clean up" artists' names; that is, convert "Artist, the (2)" into "Artist." The discogs code uses a helper function to cleanup the artist name, which is called _discogs_cleanup_artist_field($artist).
  • For releases with multiple labels, you format the label" field using theme_discogs_labels($labels).
  • The custom theme function for formatting the "track_notes" field, is called theme_discogs_extra_artists($extraartists, $cleanup = TRUE). This is the one you want to use for release credits. It works much the same as theme_discogs_artists().

    Note: The array that is passed to this function is generated automatically from the JSON returned by Discogs.com. That means that the track info is in the array - it's just not displayed. It also means that you can use some array-merging trickery to display it however you want.

  • To theme the "format" field, you use theme_discogs_formats($formats). It works similar to theme_discogs_labels().
  • Finally, there is theme_discogs_checkbox_text($release). This is to format the text that will be beside a checkbox, in the form where you import releases. The $release variable is a rather complicated array, so I'll just let the code do the talking there.

The code for all of these functions is below. To override it, make a function with the same signature, but substitute "yourthemename" (whatever that is) instead of "theme".

<?php
/**
* Custom theme function for formatting artist/label information on Discogs.com
* import form.
*
* @param $info_array
*   Multidimensional array of artist/label info
* @return
*   HTML markup of information
* @see _discogs_cleanup_artist_field()
*/
function theme_discogs_forminfo($info) {
 
$output = '<div class="discogs-form-info">';
  if (isset(
$info['images']['image']['uri150'])) {
   
$output .= theme_image($info['images']['image']['uri150'], '', '', NULL, FALSE);
  }
  elseif (isset(
$info['images']['image'][0]['uri150'])) {
   
$output .= theme_image($info['images']['image'][0]['uri150'], '', '', NULL, FALSE);
  }
  if (
is_array($info['urls']['url']) && isset($info['name'])) {
   
$output .= "\n<h3>". l($info['name'], $info['urls']['url'][0]) . "</h3>";
  }
  elseif (isset(
$info['urls']['url']) && isset($info['name'])) {
   
$output .= "\n<h3>". l($info['name'], $info['urls']['url']) . "</h3>";
  }
  elseif (isset(
$info['name'])) {
   
$output .= '\n<h3>'. check_plain($info['name']) . '</h3>';
  }
  if (isset(
$info['namevariations']['name'])) {
   
$out = (is_array($info['namevariations']['name'])
      ?
implode(", ", $info['namevariations']['name'])
      :
$info['namevariations']['name']);
   
$output .= '<p>Name Variations: '. check_plain($out) . '</p>';
  }
  if (isset(
$info['aliases']['name'])) {
   
$out = (is_array($info['aliases']['name'])
      ?
implode(", ", $info['aliases']['name'])
      :
$info['aliases']['name']);
   
$output .= '<p>Alias: '. check_plain($out) . '</p>';
  }
  if (isset(
$info['contactinfo'])) {
   
$out = str_replace("\n", "\n<br />", $info['contactinfo']);
   
$output .= '<p>Contact: '. check_markup($out) . '</p>';
  }
  if (isset(
$info['profile'])) {
   
$out = str_replace(array('[a=', ']'), '', $info['profile']);
   
$out = str_replace("\n", "\n<br />", $out);
   
$output .= '<p>'. check_markup($out) . '</p>';
  }
  if (isset(
$info['members']['name'])) {
   
$output .= '<p>Members: '. implode(", ", $info['members']['name']) . '</p>';
  }
 
$output .= '</div>';
  return
$output;
}

/**
* Custom theme function for formatting releases from Discogs that have more
* than one primary artist.
*
* @param $artists
*   Multidimensional array of artist names and join characters
* @param $cleanup
*   Boolean whether to clean up artist field (default TRUE)
* @return
*   String with multiple artists, joined with join characters
* @see _discogs_cleanup_artist_field()
*/
function theme_discogs_artists($artists, $cleanup = TRUE) {
 
$artist_string = '';
  if (isset(
$artists['name'])) {
   
$artist_string = $cleanup
     
? _discogs_cleanup_artist_field($artists['name'])
      :
$artists['name'];
  }
  elseif (isset(
$artists[0]['name'])) {
    foreach (
$artists as $artist) {
     
$name = $cleanup
       
? _discogs_cleanup_artist_field($artist['name'])
        :
$artist['name'];
     
$join = empty($artist['join']) ? ' / ': "{$artist['join']}";
     
$artist_string .= $name . $join;
    }
  }
  return
rtrim($artist_string, $join);
}

/**
* Custom theme function for formatting releases from Discogs that have more
* than one label and catalog number.
*
* @param $labels
*   Multidimensional array of artist names and join characters
* @return
*   String with multiple artists, joined with join characters
* @see _discogs_cleanup_artist_field()
*/
function theme_discogs_labels($labels) {
  if (isset(
$labels['name'])) {
   
$new_labels['discog_label']   = $labels['name'];
   
$new_labels['discog_cat_num'] = $labels['catno'];
  }
  elseif (isset(
$labels[0]['name'])) {
   
$name  = '';
   
$catno = '';
    foreach (
$labels as $label) {
     
$name  .= $label['name']  . ', ';
     
$catno .= $label['catno'] . ', ';
    }
   
$new_labels['discog_label']   = rtrim($name', ');
   
$new_labels['discog_cat_num'] = rtrim($catno, ', ');
  }
  return
$new_labels;
}

/**
* Custom theme function for formatting Discogs 'extraartist' array of artist
* names and roles.
*
* @param $extraartists
*   Array of artist names/roles
* @param $cleanup
*   Boolean whether to clean up artist field (default TRUE)
* @return
*   String with themed artists and roles
* @see _discogs_cleanup_artist_field()
*/
function theme_discogs_extra_artists($extraartists, $cleanup = TRUE) {
 
// Convert $extraartists['name'] and $extraartists['role'] to $notes
 
$notes = '';
  if (
is_array($extraartists) && !empty($extraartists)) {
    foreach (
$extraartists as $extra) {
     
// $extraartists is sometimes multidimensional and sometimes not
     
if (isset($extra['name'])) {
       
$name = $cleanup ?
         
_discogs_cleanup_artist_field($extra['name']) :
         
$extra['name'];
       
$notes .= $extra['role'] . ' - <b>'. $name . "</b>\n";
      }
      else {
       
// Handle multidimensional array through recursion
       
$notes .= theme_discogs_extra_artists($extra, $cleanup);
      }
    }
  }
  return
$notes;
}

/**
* Themes an array of formats, which may or may not be multidimensional.
*
* @param $formats
*   Array (possibly multidimensional) of format names from Discogs
* @return
*   String with format names, comma-separated
*/
function theme_discogs_formats($formats) {
 
$format_string = '';
  if (isset(
$formats['name'])) {
   
$format_string = $formats['name'];
  }
  elseif (isset(
$formats[0]['name'])) {
    foreach (
$formats as $format) {
     
$format_string .= $format['name'] . ', ';
    }
  }
  return
rtrim($format_string, ', ');
}

/**
* Takes an array of release information, and outputs text that can be
* displayed in a checkbox form element.
*
* @param $release
*   Release array. Structure:
* @code
*   [release] => array
*   (
*     [id] => (Discogs ID)
*     [status] => (usually "Accepted")
*     [type] => (usually "Main," sometimes "TrackAppearance")
*     [title] => (Album title)
*     [format] => (Album format)
*     [label] => (Record label)
*     [year] => (4-digit Year, if any)
*     [artist] => (Artist, if any)
*     [summary] => (Summary, if any)
*   )
* @endcode
* @return
*   Text to put into checkbox fields
* @see discogs_import_step2()
*/
function theme_discogs_checkbox_text($release) {
 
$artist = isset($release['artist'])
    ?
check_plain($release['artist'])
    :
theme('discogs_artists', $release['artists']['artist']);
 
$text  = empty($artist) ? '': "$artist - ";
 
$text .= "<b>{$release['title']}</b>";
 
$text .= empty($release['format']) ? '': "{$release['format']}";
 
$text .= empty($release['year']) ? '': " ({$release['year']})";
  return
$text;
}
?>

Additionally, there is an entire template file dedicated to displaying releases, and a CSS file. These are discogs-releast.tpl.php and discogs.css respectively. I won't post the code for these here.

Hope this helps!


Viewing all articles
Browse latest Browse all 426

Trending Articles