home

Блок карусели популярных ресурсов

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

Данный код на больших экранах (на малых и средних скрывается) выводит самые популярные ресурсы по просмотрам в плеерах за последние 30 дней, 7 дней, 1 день, 1 час. При этом ресурсы не повторяются.

Код блока[править]

 <?php
 $base_url = $GLOBALS['base_url'];
 $limit = 15;
 $popular['month'] = array('time'=>'-30 day', 'title'=>'за месяц', 'nodes'=>[]);
 $popular['week'] = array('time'=>'-7 day', 'title'=>'за неделю', 'nodes'=>[]);
 $popular['day'] = array('time'=>'-1 day', 'title'=>'за сутки', 'nodes'=>[]);
 $popular['hour'] = array('time'=>'-1 hour', 'title'=>'за час', 'nodes'=>[]);
 $not_nid = array(); // for nids that can not visible
 
 foreach ($popular as $key=>$res) {
   $startDateTime = new DateTime();
   $startDateTime ->modify($res['time']);
   $query = db_select('elis_play_log', 'p')->fields('p', array('nid'));
   $query->condition("p.start_timestamp",$startDateTime ->getTimestamp(),">");
   $query->addExpression('count(nid)', 'nid_playlog_count');
   if (count($not_nid)) {
 	$query->condition("p.nid", $not_nid, "NOT IN");
   }
   $query->groupBy("p.nid");
   $query->orderBy('nid_playlog_count', 'DESC');
   $query->range(0,$limit);
   $results = $query->execute()->fetchAll();
   $popular[$key]['nodes'] = $results;
   foreach ($results as $r) {
 	$not_nid[] = $r->nid; // find same node only once
   }
 }
 print "<div style='display: flex; justify-content: center;' class='hidden-xs hidden-sm hidden-md' aria-hidden='true'>";
 foreach ($popular as $key=>$res) {
   if (count($res['nodes']) == 0) continue;
   $id = 'carousel-elis-popular-' . $key;
   print "<div id='$id' class='carousel slide' data-ride='carousel' style='width: 20%;'>";
   print "  <div style='background: #777; color: #fff; text-align: center;'>Популярное {$res['title']}</div>";
   print "  <div class='carousel-inner' role='listbox'>";
   foreach ($res['nodes'] as $i=>$node) {
 	$node_obj = node_load($node->nid);
 	if ($node_obj  !== false && node_access("view", $node_obj)) {
  	  $font_size = strlen($node_obj->title) > 20 ? 10 : 12;
 	  print "<div class='item" . ($i == 0? " active": "") . "' style='background: rgba(0,0,0,.2);'>";
 	  print "  <a  href='{$base_url}/node/{$node->nid}' style='text-align: center;'>";
 	  print "    <img src='{$base_url}/node/{$node->nid}/cover' style='height: 240px; object-fit: scale-down; width: 100%;'/>";
		  print "    <div class='carousel-caption' style='background: rgba(0,0,0,.6); border-radius: 2px; padding: 0.5em; word-break: break-word; overflow: hidden;  font-size: {$font_size}px; text-overflow: ellipsis;'>" . 
 check_plain($node_obj->title) . "</div>";
 	  print "  </a>";
 	  print "</div>";
 	}
   }
   print "  </div>";
   print "  <a class='left carousel-control' href='#$id' role='button' data-slide='prev'>";
   print "    <span class='glyphicon glyphicon-chevron-left' aria-hidden='true'></span>";
   print "    <span class='sr-only'>Previous</span>";
   print "  </a>";
   print "  <a class='right carousel-control' href='#$id' role='button' data-slide='next'>";
   print "    <span class='glyphicon glyphicon-chevron-right' aria-hidden='true'></span>";
   print "    <span class='sr-only'>Next</span>";
   print "  </a>";
   print "</div>";
 }
 print "</div>";
 ?>
 

Куда добавить[править]

По URL admin/structure/block/add добавьте блок, скопипастив в него описанный выше код. Формат текста должен быть PHP code. Настройте на каких страницах блок будет отображаться, область региона можно выбрать "содержимое" (content).