Drupal Association Individual MemberZend Certified Engineer Details

Sortieren nach Flexinode-Feldern

  • Die ID des Flexinode-Feldes ermitteln: http://server/admin/node/types
  • Dort mit der Maus über das entsprechende Feld hovern => Feld-ID
  • Das dazugehörige Flexinode-Feld heißt dann flexinode_ID
  • Funktion tablesort_sql() verwenden: $sql .= tablesort_sql($header, 'flexinode_13 DESC,');

Beispiel aus Uni Freiberg, Chemie:

<?php
// Sortieren der Eintraege nach Flexinode-Feld "veroeffentlicht"
// siehe tablesort_sql() weiter unten
global $user;
$userid=$user->uid; // gets the currently logged in user's id number
$ctype_id = 1; // change this to your flexinode id number
$output = '';
$ctype = flexinode_load_content_type($ctype_id);

// Build the query.
$fields_to_select = array();
$table_joins = array();
$where_clauses = array();

foreach ($ctype->fields as $field) {
  $fieldname = 'flexinode_'. $field->field_id;

  $fields_to_select[] = flexinode_invoke('db_select', $field);
  $table_joins[] = 'LEFT JOIN {flexinode_data} '. $fieldname .
                   ' ON n.nid = '. $fieldname .'.nid';
  $where_clauses[] = $fieldname .'.field_id = '. $field->field_id;
}

$type = 'flexinode-' . db_escape_string($ctype_id);
$extra_fields = count($fields_to_select) > 0 ? ', ' . 
                        implode(', ', $fields_to_select) : '';
$extra_where = count($where_clauses) > 0 ? ' AND ' . 
                        implode(' AND ', $where_clauses) : '';
// the 'AND uid = $userid' restricts results to the current user
$sql = 'SELECT n.nid, n.title '. $extra_fields .' FROM {node} n '. 
           implode(' ', $table_joins) .
          " WHERE n.status = 1 AND uid = $userid AND n.type = '$type'". 
          $extra_where; 
$sql = 'SELECT n.nid, n.title '. $extra_fields .' FROM {node} n '. 
           implode(' ', $table_joins) .
           " WHERE n.status = 1 AND n.type = '$type'". $extra_where;

// Build the columns.
$header[] = array('data' => t('title'), 'field' => 'n.title');
foreach ($ctype->fields as $field) {
  if ($field->show_table) {
    $fieldname = 'flexinode_'. $field->field_id;

    $sort_column = flexinode_invoke('db_sort_column', $field);
    if ($sort_column) {
      $header[] = array('data' => t($field->label), 'field' => $sort_column);
    }
    else {
      $header[] = array('data' => t($field->label));
    }
  }
}

// Sortieren nach Feld "veroeffentlicht", neuester Eintrag zuerst
// flexinode_13 ist das Feld "veroeffentlicht", 
// siehe http://www.chemie.tu-freiberg.de/org/neuorg/admin/node/types,
// dort mit der Maus ueber "veroeffentlicht (Feld bearbeiten)" => field 13
$sql .= tablesort_sql($header, 'flexinode_13 DESC,');

// Build the rows.
$rows = array();
$nodes = pager_query(db_rewrite_sql($sql), 5);

while ($node = db_fetch_object($nodes)) {
  $row = array();
  $row['link'] = l($node->title, 'node/' . $node->nid);
  $row['title'] = $node->title;
  $row['url'] = 'node/' . $node->nid;


  foreach ($ctype->fields as $field) {
    if ($field->show_table) {
      $data = flexinode_invoke('format', $field, $node, TRUE);
      $row[$field->label] = $data ? $data : '';
    }
  }

  // in $row stehen jetzt alle infos einer zeile (einer node)
  // diese zeile wird hier an die anderen angehängt
  $rows[] = $row;
  
   echo '

'.$row['veroeffentlicht'].'

'; echo '

'.$row['link'].'

'; echo '

'.substr(strip_tags($row['Summary']),0,79). ' mehr...


'; } ?>