| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 | <?php/** Typically in a Tripal template, the data needed is retrieved using a call to* chado_expand_var function.  For example, to retrieve all * of the feature alignments for this node, the following function call would be made:* *   $feature = chado_expand_var($feature,'table','featureloc');*   * However, this will return all records from the featureloc table without any context.* To help provide context, a special variable is provided to this template named* 'all_featurelocs'.   * *   $feature->all_featurelocs*   * The records in the 'all_featurelocs' array are all properly arranged for easy iteration.* * However, access to the original alignment records is possible through the * $feature->featureloc object.  In the following ways:  ** Alignment context #1:* --------------------* If the feature for this node is the parent in the alignment relationships,* then those alignments are available in this variable:* *    $feature->featureloc->srcfeature_id;*    ** Alignment context #2:* ---------------------* If the feature for this node is the child in the alignment relationsips,* then those alignments are available in this variable:* *   $feature->featureloc->feature_id;*   ** Alignment context #3:* --------------------* If the feature is aligned to another through an intermediary feature (e.g.* a feature of type 'match', 'EST_match', 'primer_match', etc) then those* alignments are stored in this variable:*   feature->matched_featurelocs** Below is an example of a feature that may be aligned to another through* an intermediary:**    Feature 1: Contig      ---------------   (left feature)*    Feature 2: EST_match           -------*    Feature 3: EST                 --------- (right feature)** The feature for this node is always "Feature 1".  The purpose of this type * alignment is to indicate cases where there is the potential for overhang* in the alignments, or, the ends of the features are not part of the alignment* prehaps due to poor quality of the ends.  Blast results and ESTs mapped to* contigs in Unigenes would fall under this category.**/$feature = $variables['node']->feature;$alignments = $feature->all_featurelocs;if (count($alignments) > 0) { ?>    <div class="tripal_feature-data-block-desc tripal-data-block-desc">The        following features are aligned    </div><?php  // the $headers array is an array of fields to use as the colum headers.  // additional documentation can be found here  // https://api.drupal.org/api/drupal/includes%21theme.inc/function/theme_table/7  $headers = ['Aligned Feature', 'Feature Type', 'Alignment Location'];  // the $rows array contains an array of rows where each row is an array  // of values for each column of the table in that row.  Additional documentation  // can be found here:  // https://api.drupal.org/api/drupal/includes%21theme.inc/function/theme_table/7  $rows = [];  foreach ($alignments as $alignment) {    $feature_name = $alignment->name;    if (property_exists($alignment, 'nid')) {      $feature_name = l($feature_name, "node/" . $alignment->nid);    }    $feature_loc = '';    $strand = '.';    if ($alignment->strand == -1) {      $strand = '-';    }    elseif ($alignment->strand == 1) {      $strand = '+';    }    // if this is a match then make the other location     if (property_exists($alignment, 'right_feature')) {      $rstrand = '.';      if ($alignment->right_strand == -1) {        $rstrand = '-';      }      elseif ($alignment->right_strand == 1) {        $rstrand = '+';      }      $feature_loc = $feature->name . ":" . ($alignment->fmin + 1) . ".." . $alignment->fmax . " " . $strand;      $feature_loc .= "<br>" . $alignment->name . ":" . ($alignment->right_fmin + 1) . ".." . $alignment->right_fmax . " " . $rstrand;    }    else {      $feature_loc = $alignment->name . ":" . ($alignment->fmin + 1) . ".." . $alignment->fmax . " " . $strand;    }    $rows[] = [      $feature_name,      $alignment->type,      $feature_loc,    ];  }  // the $table array contains the headers and rows array as well as other  // options for controlling the display of the table.  Additional  // documentation can be found here:  // https://api.drupal.org/api/drupal/includes%21theme.inc/function/theme_table/7  $table = [    'header' => $headers,    'rows' => $rows,    'attributes' => [      'id' => 'tripal_feature-table-alignments',      'class' => 'tripal-data-table',    ],    'sticky' => FALSE,    'caption' => '',    'colgroups' => [],    'empty' => '',  ];  // once we have our table array structure defined, we call Drupal's theme_table()  // function to generate the table.  print theme_table($table);}
 |