2012-01-17 11 views
1

これを理解して動作させようとしてきましたが、私はプログラマーではないので、コーディングに関する知識が限られているデザイナーだけですこの壁の壁。前ノード/全ノードのサムネイルをフルノードで表示

私は自分のフォトギャラリーを作っています。リンクされたサムネイルとして2つ前または次の画像を表示したいと思います。私は、このスクリプトが動作し、テキストのリンクを表示するが、私のニーズにそれを適応させる方法を知らない。

template.php

<?php 
function dad_prev_next($current_node = NULL, $op = 'p') { 
    if ($op == 'p') { 
     $sql_op = '<'; 
     $order = 'DESC'; 
    } elseif ($op == 'n') { 
     $sql_op = '>'; 
     $order = 'ASC'; 
    } else { 
     return NULL; 
    } 

    $output = NULL; 

    $sql = "SELECT n.nid, n.title 
      FROM {node} n 
      WHERE n.nid $sql_op :nid 
      AND type IN ('photos') 
      AND status = 1 
      ORDER BY nid $order 
      LIMIT 1"; 
    $result = db_query($sql, array(':nid' => $current_node -> nid)); 
    foreach ($result as $data) { 
    } 
    if (isset($data)) {    


     if ($op == 'n')    
      return l("Next", "node/$data->nid", array('html' => TRUE)); 
     else if ($op == 'p') 
      return l("Previous", "node/$data->nid", array('html' => TRUE)); 
    } 
} 
?> 

<?php print dad_prev_next($node,'p') . "/" . dad_prev_next($node,'n'); ?> 
node.tpl.php実施例

それは

に設計されたようにこの1つは2次/前の画像を示します

template.php

function dad_prev_next($nid = NULL, $op = 'p', $start = 0) { 
    if ($op == 'p') { 
     $sql_op = '>'; 
     $order = 'ASC'; 
    } 
    elseif ($op == 'n') { 
     $sql_op = '<'; 
     $order = 'DESC'; 
    } 
    else { 
     return NULL; 
    } 

    $output = ''; 

    // your node must have an image type field 
    // let's say it's name is IMAGEFIELD 
    // select from node table 
    $query = db_select('node', 'n'); 
    // join node table with image field table 
    $query->leftJoin('field_data_field_photo', 'i', 'i.entity_id = n.nid'); 
    // join file managed table where all data about managed files stored 
    $query->leftJoin('file_managed', 'f', 'f.fid = i.field_photo_fid'); 
    $query 
     // select nid and title from node 
     ->fields('n', array('nid', 'title')) 
     // select uri from file_managed (image path) 
     ->fields('f', array('uri')) 
     // select image alt and title 
     ->fields('i', array('field_photo_alt', 'field_photo_title')) 
     // where nid "greater than"/"lower than" our current node nid 
     ->condition('n.nid', $nid, $sql_op) 
     // where node type in array('your content types') 
     ->condition('n.type', array('photos'), 'IN') 
     // where node is published 
     ->condition('n.status', 1) 
     // where requested node has image to display (if you want thumbnail) 
     ->condition('f.uri', '', '!=') 
     // order by nid 
     ->orderBy('n.nid', $order) 
     // limit result to 1 
     ->range($start, 1);  

    // make query 
    $result = $query->execute()->fetchAll(); 

    foreach ($result as $node) { 
     // theme your thumbnail image 
     $variables = array(
      // default image style name `thumbnail` 
      // you can use your own by following 
      // admin/config/media/image-styles on your site 
      'style_name' => 'square_small', 
      'path' => $node->uri, 
      'alt' => $node->field_photo_alt, 
      'title' => $node->field_photo_title 
     ); 
     $image = theme('image_style', $variables); 

     $options = array(
      'html' => TRUE, 
      'attributes' => array(
       'title' => $node->title 
      ) 
     ); 
     $output = l($image, "node/{$node->nid}", $options); 
    } 

    return $output; 
} 

node.tpl.php

<?php print dad_prev_next($node->nid, 'p', 1); ?> 
<?php print dad_prev_next($node->nid, 'p', 0); ?> 
<?php print dad_prev_next($node->nid, 'n', 0); ?> 
<?php print dad_prev_next($node->nid, 'n', 1); ?> 

答えて

1

template.php

function dad_prev_next($nid = NULL, $op = 'p', $qty = 1) { 
    if ($op == 'p') { 
     $sql_op = '<'; 
     $order = 'DESC'; 
    } 
    elseif ($op == 'n') { 
     $sql_op = '>'; 
     $order = 'ASC'; 
    } 
    else { 
     return NULL; 
    } 

    $output = ''; 

    // your node must have an image type field 
    // let's say it's name is IMAGEFIELD 
    // select from node table 
    $query = db_select('node', 'n'); 
    // join node table with image field table 
    $query->leftJoin('field_data_field_IMAGEFIELD', 'i', 'i.entity_id = n.nid'); 
    // join file managed table where all data about managed files stored 
    $query->leftJoin('file_managed', 'f', 'f.fid = i.field_IMAGEFIELD_fid'); 
    $query 
     // select nid and title from node 
     ->fields('n', array('nid', 'title')) 
     // select uri from file_managed (image path) 
     ->fields('f', array('uri')) 
     // select image alt and title 
     ->fields('i', array('field_IMAGEFIELD_alt', 'field_IMAGEFIELD_title')) 
     // where nid "greater than"/"lower than" our current node nid 
     ->condition('n.nid', $nid, $sql_op) 
     // where node type in array('your content types') 
     ->condition('n.type', array('photos'), 'IN') 
     // where node is published 
     ->condition('n.status', 1) 
     // where requested node has image to display (if you want thumbnail) 
     ->condition('f.uri', '', '!=') 
     // order by nid 
     ->orderBy('n.nid', $order) 
     // limit result to $qty 
     ->range(0, $qty); 

    // make query 
    $result = $query->execute()->fetchAll(); 

    foreach ($result as $node) { 
     // theme your thumbnail image 
     $variables = array(
      // default image style name `thumbnail` 
      // you can use your own by following 
      // admin/config/media/image-styles on your site 
      'style_name' => 'thumbnail', 
      'path' => $node->uri, 
      'alt' => $node->field_IMAGEFIELD_alt, 
      'title' => $node->field_IMAGEFIELD_title 
     ); 
     $image = theme('image_style', $variables); 

     $options = array(
      'html' => TRUE, 
      'attributes' => array(
       'title' => $node->title 
      ) 
     ); 
     $output = l($image, "node/{$node->nid}", $options); 
    } 

    return $output; 
} 

node.tpl.php
<?php print dad_prev_next($node->nid, 'p', 2); ?> 
<?php print dad_prev_next($node->nid, 'n', 2); ?> 
+0

ありがとうございます、それは神経保護です。私の兄弟からの助けを借りずに、私はスクリプトを修正することができたので、前の/次の2枚の写真を表示するように私のデザインに従いました。それが他の人にも役立つことを願っています。 –

+0

コードを修正しました。ノードごとに2回呼び出す必要はなく、ノードの制限を増やすだけです。あなたが持っていた 'start'と' node.tpl.php'の代わりに '$ qty'変数に注意してください。あなたにはうまくいくと思っています;] –

+0

うーん...私は変更が表示されません。 –

関連する問題