Visualizzare articoli correlati

2 contenuti / 0 new
Ultimo contenuto
Visualizzare articoli correlati

Ciao a tutti,

ho definito un nuovo tipo di content (es. "nuovo_content") al quale devo associare degli "article" esistenti per mezzo dei tag.

In pratica gli article hanno un campo "field_tag" in cui inserire quanti termini vogliono, prendendoli da un vocabolario di riferimento.
Il mio nuovo content ha lo stesso campo (field_tag) che però dovrà essere utilizzato per visualizzare gli article correlati.

Quindi se un contenuto di tipo "nuovo_content" ha i tag "ciccio" e "pippo" vorrei che nella sua pagina venissero visualizzati tutti i contenuti di tipo "article" che hanno almeno un tag tra "ciccio" e "pippo".

So di poter agire via codice e creare un template "node--" in cui faccio le query con "taxonomy_select_nodes" e poi ciclando su tutti i nids ricevuti.

Però quello che mi domando è:
1. è possibile automatizzare questo processo con delle "views" ad hoc? Se sì avete il link a qualche tutorial?
2. se non si può c'è qualcosa di importante che dovrei sapere prima di procedere con il codice nel file .tpl?
3. in genere la "best prectice" qual'è?

PS: non so se può essere utile per le views, ma i "nuovo_content" hanno una regola sull'aliasing che li mappa con una URL del tipo "/prefisso_costante/category_name/node_name"

Uso l'ultima versione di Drupal 7, oltre che di CCK, VIEWS ecc...
Grazie

Drupal Version:

Ciao, ci sono soluzioni sul web che consigliano, per ovvi motivi, l'utilizzo di view, altri tutorial che mostrano il codice. Questo è un caso - mostra 3 articoli relazionati in blocco - (assolutamente da personalizzare in quanto ogni drupalsite ha i suoi cck):
!importante CUSTOM_MODULE è da sostituire con il nome del modulo che farai, se lo farai...

/*
* esempio di costruzione blocco in modulo custom per relazionare articoli in base ald un termine della tassonomia.
*/
function CUSTOM_MODULE_block_info() {
  $blocks['relatedarticles']['info'] = 'Related ARTICLES';
  $blocks['relatedarticles']['cache'] = DRUPAL_NO_CACHE;
  return $blocks;
}
function CUSTOM_MODULE_block_configure($delta = '') {
  if ($delta == 'relatedarticles') {
    // some code
    return $form;
  }
}
function CUSTOM_MODULE_block_save($delta = '', $edit = array()) {
  if ($delta == 'relatedarticles')
    variable_set('CUSTOM_MODULE_block_count', $edit['CUSTOM_MODULE_block_count']);
}
function CUSTOM_MODULE_block_view($delta = '') {
  global $user;
  $block = array();
  switch ($delta) {
    case 'relatedarticles':
      if (arg(0) != 'related-articles') {
        $block['subject'] = 'Related ARTICLES';
        $block['content'] = _CUSTOM_MODULE_related_articles_block();
        return $block;
      }
  }
}
function _CUSTOM_MODULE_related_articles_block() {
  $output = '';
  $node_nid = arg(1);
  if (isset($node_nid)) {
    $node = node_load($node_nid);
    // debug if necessary
    // drupal_set_message('<pre> ' . print_r($node->field_article_tags, TRUE) . '</pre>');
    if (isset($node->field_article_tags['und'][0]['tid'])) {
      $tid = $node->field_article_tags['und'][0]['tid'];
      $path = variable_get('file_public_path', conf_path().'/files').'';
      $results = db_query_range("SELECT node.created AS created, node.title AS title, node.nid AS nid, node.language AS node_language, node_counter.totalcount AS totalcount, 'node' AS field_data_field_sofa_vote_node_entity_type, 'node' AS field_data_field_image_node_entity_type, 'node' AS field_data_body_node_entity_type, f.body_summary FROM {node} node LEFT JOIN {field_data_body} f ON node.nid = f.entity_id
INNER JOIN {field_data_field_article_tags} t ON node.nid = t.entity_id AND (t.entity_type = 'node' AND t.deleted = '0')
LEFT JOIN {node_counter} node_counter ON node.nid = node_counter.nid WHERE node.type = :type AND node.status = :status AND t.field_article_tags_tid = :field_article_tags_tid ORDER BY node.nid DESC", 0, 3, array(
        ':type' => 'article',
        ':status' => 1,
        ':field_article_tags_tid' => $tid,
        ));
      $output = '<div class="sofa-postcontent sofa-postcontent-0 clearfix">
<div class="sofa-content-layout">
    <div class="sofa-content-layout-row">';
      foreach ($results as $record) {
        $summary = substr(strip_tags($record->body_summary), 0, 64);
        $link = l($record->title, 'node/'.$record->nid, array('attributes' => array('class' => 'sofa-article', 'title' => $record->title)));
        if (isset($record->uri) && file_exists($path.'/'.str_replace('public://', '', $record->uri)))
          $fileimage = base_path().$path.'/'.str_replace('public://', '', $record->uri);
        else
          $fileimage = $node->field_data_field_image_node_entity_type;
        $output .= '<div class="sofa-layout-cell" style="width: 33%" >
        <p><img width="40%" align="left" alt="" title="" class="sofa-lightbox" src="'.$fileimage.'" ><span style="text-align:right;font-size:11px;">'.date('d-m-Y H:i', $record->created).' </span><span style="font-weight:bold;font-size:18px;">'.$link.'</span>&nbsp;<span style="font-size:17px;">'.$summary.'...</span></p>
    </div>';
      }
      $output .= '</div>
</div>
</div>';
    }
  }
  return $output;
}

Ciao ;)