2015-01-09 2 views
1

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

Я использую следующий код для последних видео:

$this->element('itemList', array('type' => "video", 'items' => $latestVideos)); 

echo $this->fetch('itemList'); 

И следующий код для популярных видео:

$this->element('itemList', array('type' => "video", 'items' => $popularVideos)); 

echo $this->fetch('itemList'); 

Последние видео которые будут отображаться именно так, как они должны, но популярные видео сначала показывают последние видео (во второй раз) и популярные видеоролики.

Кто-нибудь знает, как я могу «очистить» или «отменить» первый элемент itemList, чтобы начать с пустого при его использовании во второй раз?

<?php 
/* The following parameters are set when this element is called upon: 
* $type: article, video 
* $items: the list with items to be displayed 
*/ 
$this->start('itemList'); 
echo $this->Html->script('equalColumns'); 
$itemCount = 0; 
$mainType = $type; 
$listType = null; 

// If the article list is called, use wider columns css (.articleList) 
if ($type == "article") { 
    $listType = " articleList"; 
} 
?> 
<ul class="otherArticles<?php print($listType); ?>"> 
    <?php 
    foreach ($items as $item) { 
     $duration = null; 
     $coverImage = null; 
     $coverImageOffset = array("x" => 0, "y" => 0); 

     /* If a list of tags is submitted, check for every item if the item is an article or a 
     * video 
     */ 
     if ($mainType == "tag") { 
      if ($item["TagRelationship"]["article_id"] != null) { 
       $newItem["Article"]["id"] = $item["TagRelationship"]["article_id"]; 
       $newItem["Article"]["slug"] = $item["Article"]["slug"]; 
       $newItem["Article"]["title"] = $item["Article"]["title"]; 
       $newItem["Article"]["created"] = $item["Article"]["created"]; 
       $newItem["User"] = $item["Article"]["User"]; 
       $newItem["Album"]["Photo"] = $item["Article"]["Album"]["Photo"]; 
       $item = $newItem; 

       $type = "article"; 
      } elseif ($item["TagRelationship"]["video_id"] != null) { 
       $type = "video"; 
      } 
     } 

     // If a list with videos is supplied, format the duration 
     if ($type == "video") { 
      // Set the coverImage 
      $coverImage = $this->CoverImage->getYouTubeCover($item["Video"]["youtubeId"]); 

      // If a video lasts shorter than an hour, only show minutes/seconds 
      if ($item[ucfirst($type)]["duration"] < 3600) { 
       $duration = gmdate("i:s", $item[ucfirst($type)]["duration"]); 
      } 

      // Otherwise show hours as well 
      else { 
       $duration = gmdate("H:i:s", $item[ucfirst($type)]["duration"]); 
      } 
     } elseif ($type == "article") { 
      $coverImage = $this->CoverImage->getArticleCover($item["Article"]["id"], $item["Album"]["Photo"]); 
      $coverImageOffset = $this->CoverImage->getArticleCoverOffset($item["Article"]["id"], $item["Album"]["Photo"]); 
     } 
     ?> 
     <li> 
      <a href="/<?php print($type); ?>s/<?php print($item[ucfirst($type)]["id"]); ?>/<?php print($item[ucfirst($type)]["slug"]); ?>"> 
       <p class="addedDate">Added: 
        <?php 
        print($this->Time->timeAgoInWords($item[ucfirst($type)]["created"], array(
           'accuracy' => array('minute' => 'minute', 'hour' => 'hour', 'week' => 'week', 'day' => 'day', 'month' => 'month', 'year' => 'year'), 
           'end' => 'never'))); 

        if ($type == "article") { 
         ?> 
         by <?php print($item["User"]["username"]); ?> 
         <?php 
        } 
        ?> 
       </p> 
       <ul class="itemDetails"> 
        <li class="thumb" style="background-image: url(<?php print($coverImage); ?>); background-position: <?php print($coverImageOffset["x"]); ?>% <?php print($coverImageOffset["y"]); ?>%"> 
         <?php 
         if ($mainType == "tag") { 
          ?> 
          <p class="label"><?php print(ucfirst($type)); ?></p> 
          <?php 
         } 

         if ($type == "video") { 
          ?> 
          <p class="duration"><?php print($duration); ?></p> 
          <?php 
         } 
         ?> 
        </li> 
        <li> 
         <p><?php print($item[ucfirst($type)]["title"]); ?></p> 
        </li> 
       </ul> 
      </a> 
     </li> 
     <?php 
    } 
    ?> 
</ul> 
<?php 
$this->end(); 
?> 
+0

Это может быть проблемой в самом элементе. Можете ли вы опубликовать код элемента? Звонок здесь выглядит отлично. Насколько я знаю, элемент элемента сброса не существует, все вызовы элементов должны действовать отдельно. – usumoio

ответ

0

После еще некоторых исследований я наткнулся на следующее в CakePHP Cookbook:

// Clear the previous content from the sidebar block. 
$this->assign('sidebar', ''); 

Конечно это сделал трюк.

Спасибо за помощь, хотя ребята!

+0

ах рад, что это сработало для вас! – Royalty

1

Скорее всего вы не отменяете переменные, заданные в последнем элементе, они запоминаются во всем представлении. Попробуйте незаходимые пункты после первого звонка -

$this->element('itemList', array('type' => "video", 'items' => $latestVideos)); 

echo $this->fetch('itemList'); 

unset($items); 

Как комментарий говорит, хотя, если это не работает, мы должны были бы увидеть сам ваш элемент, чтобы диагностировать проблему. Если вы перейдете к самому элементу в конце всего обрабатываемого, отключите массив, содержащий все элементы, которые вы показываете. Это должно сделать трюк.

+0

Это ничего не делало ... – user1796440

+0

Да, я просто догадывался, что ваша переменная предметов добавляется снова и снова, можете ли вы опубликовать код элемента? Я отредактировал свой ответ, надеюсь, это помогает. – Royalty

+0

Все еще не работает ... Я только что добавил print_r для массива элементов внутри элемента, и я узнал, что элемент фактически отображается три раза. Сначала для последних видео, второй раз для последних видео и в третий раз для популярных видео. – user1796440

Смежные вопросы