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実施例
<?php print dad_prev_next($node,'p') . "/" . dad_prev_next($node,'n'); ?>
それは
に設計されたようにこの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); ?>
ありがとうございます、それは神経保護です。私の兄弟からの助けを借りずに、私はスクリプトを修正することができたので、前の/次の2枚の写真を表示するように私のデザインに従いました。それが他の人にも役立つことを願っています。 –
コードを修正しました。ノードごとに2回呼び出す必要はなく、ノードの制限を増やすだけです。あなたが持っていた 'start'と' node.tpl.php'の代わりに '$ qty'変数に注意してください。あなたにはうまくいくと思っています;] –
うーん...私は変更が表示されません。 –