/** * @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; }