Пример #1
0
 /**
  * @return HTML
  * @param int $obj_id - ID голосования.
  * @param string $templ_name - Шаблон оформления.
  * @desc МАКРОС: Выводит указанное голосование.
  */
 public function objView($obj_id, $templ_name = 'default')
 {
     $html = '';
     $id = is_array($obj_id) ? $obj_id['o_id'] : $obj_id;
     $ses = empty($_SESSION['voting_' . $id]) ? '1' : '0';
     $key = 'vote' . $id . $ses;
     $ckey = md5(serialize($templ_name));
     if (($data = cache::get($key)) && isset($data[$ckey])) {
         $html = $data[$ckey];
     } else {
         if (!is_array($templ_name)) {
             $templ_file = '/voting/' . $templ_name . '.tpl';
             $TEMPLATE = page::getTemplate($templ_file);
         } else {
             $TEMPLATE = $templ_name;
         }
         if (!is_array($TEMPLATE)) {
             return page::errorNotFound('voting.viewVote', $templ_file);
         }
         if (is_array($obj_id)) {
             $obj = ormPages::get($obj_id);
         } else {
             $obj = ormPages::get($obj_id, 'vote');
         }
         if ($obj instanceof ormPage) {
             $all_count = 0;
             $result = !empty($_SESSION['voting_' . $obj->id]) || $obj->close ? '_result' : '';
             $fields = page::getFields('obj', $TEMPLATE['vote']);
             // Выводим список вариантов ответов
             if (isset($fields['mono']) && in_array('answers', $fields['mono'])) {
                 $list = '';
                 $num = $max = 0;
                 $sel = new ormSelect('answer');
                 $sel->fields('name, count');
                 $sel->where('parents', '=', $obj->id);
                 // Находим самый популярный ответ
                 while ($answ = $sel->getObject()) {
                     if ($max < $answ->count) {
                         $max = $answ->count;
                     }
                     $all_count += $answ->count;
                 }
                 $pr = $all_count / 100;
                 if ($pr == 0) {
                     $pr = 1;
                 }
                 // Выводим список вариантов ответов
                 $sel->reset();
                 while ($answ = $sel->getObject()) {
                     $num++;
                     page::assign('obj.num', $num);
                     page::assign('class-first', $num == 1 ? 'first' : '');
                     page::assign('class-last', $num == $sel->getObjectCount() ? 'last' : '');
                     page::assign('class-odd', $num % 2 == 0 ? 'odd' : '');
                     page::assign('class-even', $num % 2 != 0 ? 'even' : '');
                     page::assign('class-third', $num % 3 == 0 ? 'third' : '');
                     page::assign('obj.id', $answ->id);
                     page::assign('obj.parent_id', $obj->id);
                     page::assign('obj.name', $answ->name);
                     page::assign('obj.count', $answ->count);
                     $procent = round($answ->count / $pr, 2);
                     page::assign('obj.percent', $procent);
                     page::assign('obj.per1', round($procent));
                     page::assign('obj.per2', 100 - round($procent));
                     $best = $answ->count == $max ? 'best' : '';
                     page::assign('class-best', $best);
                     $list .= page::parse($TEMPLATE['answer' . $result]);
                 }
                 page::assign('answers', $list);
                 page::assign('type', $obj->multiselect ? 'checkbox' : 'radio');
             }
             // Парсим поля страницы
             if (isset($fields['obj'])) {
                 while (list($num, $name) = each($fields['obj'])) {
                     page::assign('obj.' . $name, $obj->__get($name));
                 }
             }
             page::assign('obj.count', $all_count);
             $html = page::parse($TEMPLATE['vote' . $result]);
         }
         // Записываем в кэш
         $data[$ckey] = $html;
         cache::set($key, $data);
     }
     return $html;
 }