как сделать условный оператор (если "1" из "7", то) на node.tpl.php? Drupal 6.2 или как эффективно переместить это в page.tpl.php? - PullRequest
0 голосов
/ 06 февраля 2011

Я пытаюсь создать условный оператор, который перебирает массив узлов в файле node.tpl.php для Drupal 6.2.

то, что я хочу, это утверждение, которое допускает что-то вроде:
Если этот пункт "1" из "7", сделайте это: "";
Если этот пункт "2" из "7", сделайте это: "";
Если этот пункт "3" из "7", сделайте это: "";
Если этот пункт "4" из "7", сделайте это: "";
Если этот пункт "5" из "7", сделайте это: "";
Если этот пункт "6" из "7", сделайте это: "";
Если этот пункт "7" из "7", сделайте это: "";
и повторите эту последовательность.

Мне нужен этот тип разделения, чтобы отобразить сетку прямоугольников уникального размера, которые повторяются в серии из 7 элементов, снова и снова. это моя справочная страница, встроенная в HTML, которую я пытаюсь превратить в динамическую домашнюю страницу: http://sidecha.in/fluidgrid1.html

Я использую разные пресеты для imagecache, которые необходимо загрузить в каждый элемент массива. поэтому конечный результат должен создать массив из 7 элементов с уникальными настройками imagecache для каждого элемента. это то, что мне нужно, превратившись в массив, чтобы я мог назначать разные пресеты для imagecache:

<div class="a3 <?php print $node->nid; ?>" id="e"><div class="maphomeimage">
<div class="maphomeoverlay" style="background-image:url(<?php print $url = imagecache_create_path('primary-thumb', $node->field_featured_image[0]['filepath']); ?>);">

"title =" ">

Ответы [ 2 ]

0 голосов
/ 06 февраля 2011

Что-то близкое к Dan :

$index = 0;
foreach ($items as $key => $item) {
    $index = ($index + 1) % 7; 

    // print your item here using $index however you want
}

или

$index = 0;
foreach ($items as $key => $item) {
    switch ($index++ % 7) {
         case 0: 
            // TODO item 1 of 7
            break;
         case 1: 
            // TODO item 2 of 7
            break;
         // ...
         case 6: 
            // TODO item 7 of 7
            break;
    }
}

** ОБНОВЛЕНИЕ **

Итак ... Я не слишком уверен, сработает ли это для вас или нет, но вот что вам нужно сделать:

<?php
$count = /* TODO: INSERT CODE THAT RETURN THE NUMBER OF NODES HERE */;
for ($i=0; $i<$count; $i++) {
   $column = $i % 7;    // column will be 0,1,2,3,4,5, or 6 only (see modulus math operator)

   $id = /* TODO: INSERT CODE THAT RETURN THE NODE ID HERE */;
   $bg_url = /* TODO: INSERT CODE THAT RETURN THE BACKGROUND IMAGE URL HERE */;
   $node_url = /* TODO: INSERT CODE THAT RETURN THE NODE IMAGE URL HERE */;
   $title = /* TODO: INSERT CODE THAT RETURN THE NODE TITLE HERE */;
?>
<div class="a3 <?php print $id; ?>" id="e-<?php print $id; ?>">
  <div class="maphomeimage">
    <div class="maphomeoverlay" style="background-image:url(<?php print $bg_url; ?>);">
      <p><a href="<?php print $node_url ?>" title="<?php print $title ?>"><?php print $title ?></a></p>
    </div>
  </div>
</div>
<?php
}  // end for $i
?>

По сути, заменить что-либо между /* ... */ с необходимым кодом.Где

  • $i - индекс узла от 0 до $count
  • $column - индекс столбца от 0 до 6. Замените код на $column = ($i % 7) + 1;, чтобы получитьзначения от 1 до 7.
  • Вы можете получить строку с помощью $row = floor($i / 7);

Также обратите внимание, что этот код не будет отображаться в столбцах, вам необходимо применить отдельный CSSкласс для каждого контейнера.

Поскольку каждый элемент HTML должен иметь свой собственный идентификатор, я изменил ваш HTML и заменил id="e" на id="e<?php print $id; ?>".Просто убедитесь, что $id всегда является допустимым значением HTML-идентификатора, или вообще удалите атрибут id.

0 голосов
/ 06 февраля 2011

Учитывая массив $things, который вы хотите отобразить в группах по 7:

$j = 1;
for ($i = 0; $i < count($things); $i++) {

    if ($i > 0 && $i % 7 == 0) 
        $j = 1;

    $item = $things[$i];

    if ($j == 1) {
        //1 of 7
    } else if ($j == 2) {
        //2 of 7
    } else if ($j == 3) {
        //3 of 7
    ...
}
...