0)) //поменять параметры при необходимости { $params['select'] = "children"; $params['factor'] = $pathtofactor[count($pathtofactor)-1]; } } //опеделяем какие пункты меню нужно вывести $c_count = okdb_Length($cbase); if ($params['select'] == "children") { //подкатегории указанной категории for ($i = 0; $i < $c_count; $i++) { $data = explode("|", okdb_ReadItem($cbase, $i)); if ($data[2] == $params['factor']) $list[] = $data[0]; } } elseif ($params['select'] == "brothers") { //подкатегории надкатегории указанной категории $data_ = explode("|", okdb_ReadItemByID($cbase, $params['factor'])); for ($i = 0; $i < $c_count; $i++) { $data = explode("|", okdb_ReadItem($cbase, $i)); if ($data[2] == $data_[2]) $list[] = $data[0]; } } elseif ($params['select'] == "path") { //путь к указанной записи $list = okts_IDsPath($params['factor'], $cbase); if (okdb_ItemExistsByID($cbase,$params['factor'])) $list[] = $params['factor']; } elseif ($params['select'] == "parents") { //надкатегории указанного уровня указанной подкатегории //вычислить массив пути к фактору $path = okts_IDsPath($params['factor'], $cbase); $path[] = $params['factor']; //если в массиве пути к фактору есть элемент искомого уровня, то продолжаем if (count($path) >= $params['level']) { //найти братьев элемента искомого уровня $data_ = explode("|", okdb_ReadItemByID($cbase, $path[$params['level']-1])); $parentmode_father = $data_[2];//пригодится ниже for ($i = 0; $i < $c_count; $i++) { $data = explode("|", okdb_ReadItem($cbase, $i)); if ($data[2] == $data_[2]) $list[] = $data[0]; } } } elseif ($params['select'] == 'only') { //категории, указанной статьи list(,,$cats) = explode('|',okdb_ReadItemByID($abase,$params['factor'])); if ($cats) { if (substr_count($cats,';')) { //несколько категорий $cats = explode(';',$cats); for ($i = 0; $i < count($cats); $i++) { //исключаем '', ' ' и '.' if ($cats[$i] && ($cats[$i] != ' ') && ($cats[$i] != '.')) $list[] = $cats[$i]; } } else $list[] = $cats; } } //пытаемся добавить дополнительные пункты if ($params['include']) { //разбить по запятой $includes = explode(",", $params['include']); for ($i = 0; $i < count($includes); $i++) { //проверить, не существует ли уже в списке и существует ли в базе if (((!$list) || ($list && (!array_search($includes[$i], $list)) && (array_search($includes[$i], $list) !== 0))) && okdb_ItemExistsByID($cbase, $includes[$i])) //дополнить список $list[] = $includes[$i]; } } //пытаемся удалить указанные пункты if ($params['exclude']) { unset($templist); //разбить по запятой $excludes = explode(",", $params['exclude']); for ($i = 0; $i < count($list); $i++) { //проверить, существует ли уже имеющийся пункт в списке тех пунктов, которые нужно удалить if (!array_search($list[$i], $excludes) && (array_search($list[$i], $excludes) !== 0)) //добавляем пункт во временный список, если его не надо удалять $templist[] = $list[$i]; } //заменяем старый список временным $list = $templist; } if ($list) { //проверяем, нужна ли случайная выборка $params['random'] = intval($params['random']); if ($params['random'] > 0) { if (count($list) <= $params['random']) $params['random'] = count($list); else { $temp_list = array_rand($list, $params['random']); if (!is_array($temp_list)) { //если у нас один случайный ключ $rand_list[] = $list[$temp_list]; $list = $rand_list; } else { //если у нас массив из ключей for ($i = 0; $i < count($temp_list); $i++) $rand_list[] = $list[$temp_list[$i]]; $list = $rand_list; shuffle($list); } } } //проверяем корректность указания количества блоков if (!intval($params['blocks']) || ($params['blocks'] < 1)) { if (($params['inblock'] == intval($params['inblock'])) && ($params['inblock'] > 0)) { $params['blocks'] = count($list) / $params['inblock']; if (intval($params['blocks']) != $params['blocks']) $params['blocks'] = intval($params['blocks'])+1; } else $params['blocks'] = 1; } //определяем количество элементов в блоках $middle = count($list) / $params['blocks']; if ($middle != intval($middle)) $middle = intval($middle)+1; while ($count < count($list)) { $count += $middle; if ($count > count($list)) //только для последнего блока (если деление на блоки не ровное) $in_block[] = $middle - ($count - count($list)); else //для всех блоков, кроме последнего (если деление на блоки не ровное) $in_block[] = $middle; } } } //ВЫПОЛНЕНИЕ ВЫВОДА if ($list) { //загружаем данные об оформлении меню list($id, $name, $before_menu, $after_menu, $before_block, $after_block, $block_spacer, $before_header, $after_header, $simple_item, $current_item, $item_spacer) = explode("|", okdb_ReadItemByID($base, $params['id'])); $name = okcn_FromBase($name); $before_menu = okcn_FromBase($before_menu); $after_menu = okcn_FromBase($after_menu); $before_block = okcn_FromBase($before_block); $after_block = okcn_FromBase($after_block); $block_spacer = okcn_FromBase($block_spacer); $before_header = okcn_FromBase($before_header); $after_header = okcn_FromBase($after_header); $simple_item = okcn_FromBase($simple_item); $current_item = okcn_FromBase($current_item); $item_spacer = okcn_FromBase($item_spacer); //выводим начало меню $echo .= $before_menu; //выводим заголовок if ($params['header'] == "name") //в качестве заголовка используется имя указанного шаблона меню $echo .= $before_header . $name . $after_header; elseif ($params['header'] == "articles") //в качестве заголовка используется имя страницы статей $echo .= $before_header . okdb_DetectName("pages", $articles_options["page"]) . $after_header; elseif ($params['header'] != "none") //в качестве заголовка используется указнный текст $echo .= $before_header . $params['header'] . $after_header; $echo = str_replace("{ARTICLES_CATEGORY_ID}", $params['factor'], $echo); //разбиваем элементы на блоки for ($i = 0; $i < ($params['blocks']); $i++) { $echo .= $before_block; for ($j = 0; $j < $in_block[$i]; $j++) { //загрузка значений для {стандартных переменных} list($cat_id, $cat_name, $cat_place, $cat_description, $cat_keys, $cat_img) = explode("|", okdb_ReadItemByID($cbase, $list[($j+$i*$middle)])); if (project::$friendly_url == 'on') $cat_url = "/{$articles_options["page"]}/?cat=$cat_id"; else $cat_url = "/?theme={$articles_options["page"]}&cat=$cat_id"; //активный или обычный пункт меню if ($params['select'] == "path") { //для select=path if ($cat_id == $params['factor']) { if ($params['html5'] == 'on') $echo .= "
$current_item
"; else $echo .= $current_item; } else { if ($params['html5'] == 'on') $echo .= "
$simple_item
"; else $echo .= $simple_item; } } else { //для других select-ов if ((($_GET['cat'] == $cat_id ) || okts_ChildOfParent($_GET['cat'], $cat_id, $cbase) || ($_GET['target'] && (okts_DetectPlace($_GET['target'],$abase) == $cat_id))) && ((($articles_options["page"] == $theme) && ($params['feelpage'] == "on")) || ($params['feelpage'] == "off"))) { if ($params['html5'] == 'on') $echo .= "
$current_item
"; else $echo .= $current_item; if (!$activeexists) $activeexists = 1;//сейчас выводится активный пункт } else { if ($activeexists == 2) $activeexists = 3;//активный пункт уже выводился if ($activeexists == 1) $activeexists = 2;//сейчас выводится пункт следующий за активным if ($params['html5'] == 'on') $echo .= "
$simple_item
"; else $echo .= $simple_item; } } //поиск условий //[IS_ACTIVE??истина::ложь] (активный именно этот пункт, а не кто-то из его подразделов) preg_match_all("/(?<=\[IS_ACTIVE\?\?)[^\[\]]*(?=\])/", $echo, $conditions_list); foreach($conditions_list[0] as $item) { list($true, $false) = explode("::", $item); if ((($_GET['cat'] == $cat_id ) || ($_GET['target'] && (okts_DetectPlace($_GET['target'],$abase) == $cat_id))) && ((($articles_options["page"] == $theme) && ($params['feelpage'] == "on")) || ($params['feelpage'] == "off"))) $sub_echo = $true; else $sub_echo = $false; $once = 1;//так надо (в следующей строке можно использовать только переменную) $echo = str_replace("[IS_ACTIVE??$item]", $sub_echo, $echo, $once); } //[IS_TREE??истина::ложь] preg_match_all("/(?<=\[IS_TREE\?\?)[^\[\]]*(?=\])/", $echo, $conditions_list); foreach($conditions_list[0] as $item) { list($true, $false) = explode("::", $item); if (okts_IsFather("articlescat", $cat_id)) $sub_echo = $true; else $sub_echo = $false; $once = 1;//так надо (в следующей строке можно использовать только переменную) $echo = str_replace("[IS_TREE??$item]", $sub_echo, $echo, $once); } //[IS_HAS_ID_идентификатор??истина::ложь] preg_match_all("/(?<=\[IS_HAS_ID_)[^\[\]]*(?=\])/", $echo, $conditions_list); foreach($conditions_list[0] as $item) { list($id, $temp) = explode("??", $item); list($true, $false) = explode("::", $temp); if ($cat_id == $id) $sub_echo = $true; else $sub_echo = $false; $once = 1;//так надо (в следующей строке можно использовать только переменную) $echo = str_replace("[IS_HAS_ID_$item]", $sub_echo, $echo, $once); } //[IS_HAS_NUMBER_порядковый_номер??истина::ложь] preg_match_all("/(?<=\[IS_HAS_NUMBER_)[^\[\]]*(?=\])/", $echo, $conditions_list); foreach($conditions_list[0] as $item) { list($number, $temp) = explode("??", $item); list($true, $false) = explode("::", $temp); if ($serialnumber == $number) $sub_echo = $true; else $sub_echo = $false; $once = 1;//так надо (в следующей строке можно использовать только переменную) $echo = str_replace("[IS_HAS_NUMBER_$item]", $sub_echo, $echo, $once); } //[IS_NEXT??истина::ложь] preg_match_all("/(?<=\[IS_NEXT\?\?)[^\[\]]*(?=\])/", $echo, $conditions_list); foreach($conditions_list[0] as $item) { list($true, $false) = explode("::", $item); if ($activeexists == 2) $sub_echo = $true; else $sub_echo = $false; $once = 1;//так надо (в следующей строке можно использовать только переменную) $echo = str_replace("[IS_NEXT??$item]", $sub_echo, $echo, $once); } //[IS_VOID_CAT??истина::ложь] preg_match_all("/(?<=\[IS_VOID_CAT\?\?)[^\[\]]*(?=\])/", $echo, $conditions_list); foreach($conditions_list[0] as $item) { list($true, $false) = explode("::", $item); for ($k = 0; $k < $acount; $k++) { $tempdata = explode("|", okdb_ReadItem($abase, $k)); if ($tempdata[2] == $cat_id) $notvoid++; } if (!$notvoid) $sub_echo = $true; else $sub_echo = $false; $once = 1;//так надо (в следующей строке можно использовать только переменную) $echo = str_replace("[IS_VOID_CAT??$item]", $sub_echo, $echo, $once); } if ($j != $in_block[$i]-1) $echo .= $item_spacer; //обработка изображения if (substr_count($echo, "{ARTICLES_CATEGORY_IMAGE_URL}")) { if ((!file_exists($catalog_options["image_libpath"] . $cat_img)) && (!substr_count($cat_img, "http://"))) unset($cat_img); elseif (file_exists($catalog_options["image_libpath"] . $cat_img)) $cat_img = $catalog_options["image_libpath"] . $cat_img; } if ($cat_img) $echo = str_replace("{ARTICLES_CATEGORY_IMAGE_URL}", '/' . $cat_img, $echo); //обработка эскиза if (substr_count($echo, "{ARTICLES_CATEGORY_ICON_URL}")) { $cat_icon = okim_AutoIcon ($catalog_options["icon_libpath"], 'cat-'.$cat_id, $catalog_options['icon_extention']); if (!$cat_icon && ($params['defaulticon'] == "show")) $cat_icon = okim_AutoIcon ($catalog_options["icon_libpath"], "", $catalog_options['icon_extention']); } if ($cat_icon) $echo = str_replace("{ARTICLES_CATEGORY_ICON_URL}", '/' . $cat_icon, $echo); $echo = str_replace("{ARTICLES_CATEGORY_ID}", $cat_id, $echo); if ($cat_id) $echo = str_replace("{ARTICLES_CATEGORY_NAME}", $cat_name, $echo); $echo = str_replace("{ARTICLES_CATEGORY_DESCRIPTION}", $cat_description, $echo); $echo = str_replace("{ARTICLES_CATEGORY_KEYS}", $cat_keys, $echo); $echo = str_replace("{ARTICLES_CATEGORY_URL}", $cat_url, $echo); //Контент if (substr_count($echo, "{ARTICLES_CATEGORY_CONTENT}")) { $contentId = okcn_CorrectContentID('articlescat',$cat_id); if ($contentId) { $cat_content = file_get_contents("content/articlescat-$contentId.inc"); $echo = str_replace("{ARTICLES_CATEGORY_CONTENT}", $cat_content, $echo); } else $echo = str_replace("{ARTICLES_CATEGORY_CONTENT}", "", $echo); } //вызов под{плагинов} if (substr_count($echo, "{ARTICLES_IN_CATEGORY}")) { unset($incount); for ($k = 0; $k < $acount; $k++) { list(,,$in_category) = explode("|", okdb_ReadItem($abase, $k)); if ($in_category == $cat_id) $incount++; } $echo = str_replace("{ARTICLES_IN_CATEGORY}", intval($incount), $echo); } if (substr_count($echo, "{ARTICLES_IN_CATEGORY_WITH_TREE}")) { unset($incount); for ($k = 0; $k < $acount; $k++) { list(,,$in_category) = explode("|", okdb_ReadItem($abase, $k)); if ($in_category == $cat_id) $incount++; } $tree = okts_Map($cat_id, $cbase); for ($l = 0; $l < count($tree); $l++) for ($k = 0; $k < $acount; $k++) { list(,,$in_category) = explode("|", okdb_ReadItem($abase, $k)); if ($in_category == $tree[$l]['id']) $incount++; } $echo = str_replace("{ARTICLES_IN_CATEGORY_WITH_TREE}", intval($incount), $echo); } if (project::$friendly_url == 'on') $echo = str_replace("{ARTICLES_PAGE}", "/{$articles_options["page"]}/", $echo); else $echo = str_replace("{ARTICLES_PAGE}", "/?theme={$articles_options["page"]}", $echo); //вызов под{плагинов} $echo = okwp_PluginDetect($echo); //увеличение порядкового номера $serialnumber++; } $echo .= $after_block; if ($i != $params['blocks']-1) $echo .= $block_spacer; } //выводим конец меню $echo .= $after_menu; } $echo = str_replace("{project_design_path}", "/upload/image/design/" . project::$design, $echo); $echo = okcn_RestoreQuotes($echo); //включение семантических тегов из HTML5 if ($echo && ($params['html5'] == 'on')) $echo = ""; ?>= 0; $i--) if ((count($list) < $params['itemsinlist']) && okdb_ItemExistsByID('catalog',$_COOKIE['articleslast'][$i])) $list[]=$_COOKIE['articleslast'][$i]; unset($count);//используется дальше } elseif ($params['select'] == "linked") { $count = okdb_Length('links'); for ($i = 0; $i < $count; $i++) { list($hash) = explode('|',okdb_ReadItem('links',$i)); if (substr_count($hash,"{$params['linkedbase']}!{$params['linkedid']}!{$abase}!")) { list(,$id) = explode("{$params['linkedbase']}!{$params['linkedid']}!{$abase}!",$hash); $list[] = $id; } } unset($count);//используется дальше } else { $acount = okdb_Length($abase); for ($i = 0; $i < $acount; $i++) { $adata = explode("|", okdb_ReadItem($abase, $i)); //если ищем похожие статьия, то исключаем шаблон для сортировки if ((($params['sort'] == 'categories') || ($params['sort'] == '-categories')) && ($adata[0] == $_GET['target'])) {/*ничего не делаем*/} else //если все статьи, то - все статьи if (($params['select'] == "all") && (!$params["datefrom"] || (($params["datefrom"] <= $adata[3]) && ($adata[3] <= $params["dateto"])))) $list[] = $adata[0]; //если только видимые, то - только видимые elseif (($params['select'] == "visible") && (!$params["datefrom"] || (($params["datefrom"] <= $adata[3]) && ($adata[3] <= $params["dateto"])))) { if ($adata[2] && ($adata[2] != ' ')) //если категория не скрытая $list[] = $adata[0]; } //если только скрытые, то - только срытые elseif (($params['select'] == "hidden") && (!$params["datefrom"] || (($params["datefrom"] <= $adata[3]) && ($adata[3] <= $params["dateto"])))) { if (!$adata[2] || ($adata[2] == ' ')) //если нет категории или скрытая категория верхнего уровня //статья выводится, если она скрыта (её категория - вне структуры) $list[] = $adata[0]; elseif (substr_count($adata[2],';')) { //если несколько категорий $articles_category = explode(';',$adata[2]); unset($found); for ($j = 0; $j < count($articles_category); $j++) if (!$articles_category[$j] || ($articles_category[$j] == ' ') || (okts_ChildOfParent($articles_category[$j], "", "articlescat"))) //статья выводится, если она скрыта (её категория - скрыта или вне структуры) $found++; if ($found) $list[] = $adata[0]; } else //если одна категория if (okts_ChildOfParent($adata[2], "", "articlescat")) //статья выводится, если она скрыта (её категория - подкатегория скрытой) $list[] = $adata[0]; } //если только из указанной (и найденной) категории, то... elseif (($params['select'] == "only") && (!$params["datefrom"] || (($params["datefrom"] <= $adata[3]) && ($adata[3] <= $params["dateto"])))) { if (substr_count($adata[2],';')) { //если несколько категорий $articles_category = explode(';',$adata[2]); unset($found); for ($j = 0; $j < count($articles_category); $j++) if (($articles_category[$j] == $params['factor']) || ((okts_ChildOfParent($articles_category[$j], $params['factor'], "articlescat")) && ($params['sub'] == "show")) || ((okts_ChildOfParent($params['factor'], $articles_category[$j], "articlescat")) && ($params['sup'] == "show"))) //статья выводится, если она скрыта (её категория - скрыта или вне структуры) $found++; if ($found) $list[] = $adata[0]; } elseif (($adata[2] == $params['factor']) || (okts_ChildOfParent($adata[2], $params['factor'], "articlescat")) && ($params['sub'] == "show") || (okts_ChildOfParent($params['factor'], $adata[2], "articlescat")) && ($params['sup'] == "show")) //если нет категория соответствует указанной или является её под/надкатегорией $list[] = $adata[0]; } //если кроме указанной категории, то elseif (($params['select'] == "but") && (!$params["datefrom"] || (($params["datefrom"] <= $adata[3]) && ($adata[3] <= $params["dateto"])))) { if (substr_count($adata[2],';')) { //если несколько категорий $articles_category = explode(';',$adata[2]); unset($found); for ($j = 0; $j < count($articles_category); $j++) if ($articles_category[$j] != $params['factor']) //статья выводится, если она не соответсвует запрещённой категории $found++; if ($found) $list[] = $adata[0]; } elseif (($adata[2] != $params['factor']) || ((okts_ChildOfParent($adata[2], $params['factor'], "articlescat")) && ($params['sub'] == "show")) || ((okts_ChildOfParent($params['factor'], $adata[2], "articlescat")) && ($params['sup'] == "show"))) //статья выводится, если она не соответсвует запрещённой категории $list[] = $adata[0]; } } } //определение того, стоит ли показывать эскиз по умолчанию if ($params['defaulticon'] != "hide") $params['defaulticon'] = "show"; //пытаемся добавить дополнительные пункты if ($params['include']) { //разбить по запятой $includes = explode(",", $params['include']); for ($i = 0; $i < count($includes); $i++) { //проверить, не существует ли уже в списке и существует ли в базе if (((!$list) || ($list && (!array_search($includes[$i], $list)) && (array_search($includes[$i], $list) !== 0))) && okdb_ItemExistsByID($abase, $includes[$i])) //дополнить список $list[] = $includes[$i]; } } //пытаемся удалить указанные пункты if ($params['exclude']) { unset($templist); //разбить по запятой $excludes = explode(",", $params['exclude']); for ($i = 0; $i < count($list); $i++) { //проверить, существует ли уже имеющийся пункт в списке тех пунктов, которые нужно удалить if (!array_search($list[$i], $excludes) && (array_search($list[$i], $excludes) !== 0)) //добавляем пункт во временный список, если его не надо удалять $templist[] = $list[$i]; } //заменяем старый список временным $list = $templist; } if ($list) { //запоминаем количество статей (понадобиться для {ARTICLES_COUNT}) $articles_count = count($list); //сортируем список if ($params['sort'] == "id") //сортируем по ID $list = sort($list); elseif ($params['sort'] == "-id") //сортируем по ID в обратном порядке $list = rsort($list); elseif ( ($params['sort'] == "date") || ($params['sort'] == "-date") ) { for ($i = 0; $i < $articles_count; $i++) for ($j = 0; $j < $articles_count-1; $j++) { list(,,,$date1) = explode('|', okdb_ReadItemByID('articles', $list[$j])); list(,,,$date2) = explode('|', okdb_ReadItemByID('articles', $list[$j+1])); if ( ($date1 > $date2) && ($params['sort'] == "date") || ($date1 < $date2) && ($params['sort'] == "-date") ) { $temp = $list[$j]; $list[$j] = $list[$j+1]; $list[$j+1] = $temp; } } } elseif ( ($params['sort'] == "categories") || ($params['sort'] == "-categories") ) { list(,,$categories) = explode ('|', okdb_ReadItemByID($abase,$_GET['target'])); if (substr_count($categories,';')) { //если в шаблоне несколько категорий $categories = explode(';',$categories); } else { //если в шаблоне одна в том числе скрытая категория $categories[0] == $categories; } //приводим пустые категории к единому стандарту: " ", а не "" for ($i = 0; $i < count($categories); $i++) if (!$categories[$i]) !$categories[$i] = " "; for ($i = 0; $i < $articles_count; $i++) for ($j = 0; $j < $articles_count-1; $j++) { list(,,$cats1) = explode('|', okdb_ReadItemByID('articles', $list[$j])); list(,,$cats2) = explode('|', okdb_ReadItemByID('articles', $list[$j+1])); $cats1 = ";$cats1;"; $cats2 = ";$cats2;"; $cats1 = str_replace(';;', '; ;', $cats1); $cats2 = str_replace(';;', '; ;', $cats2); unset($count1,$count2); for ($k = 0; $k < count($categories); $k++) { if (substr_count($cats1,$categories[$k])) $count1++; if (substr_count($cats2,$categories[$k])) $count2++; } if ( ($count1 > $count2) && ($params['sort'] == "categories") || ($count1 < $count2) && ($params['sort'] == "-categories") ) { $temp = $list[$j]; $list[$j] = $list[$j+1]; $list[$j+1] = $temp; } } } elseif ($params['sort'] == "-none") //разворачиваем массив без сортировки (по умолчанию) $list = array_reverse($list); //подрезаем список или лимит if (!$params['itemsinlist']) $params['itemsinlist'] = count($list); if (count($list) > $params['itemsinlist']) { //обрезаем массив for ($i = 0; $i < $params['itemsinlist']; $i++) $templist[] = $list[$i]; $list = $templist; } elseif (count($list) < $params['itemsinlist']) //уменьшаем лимит $params['itemsinlist'] = count($list); //проверяем, нужна ли случайная выборка $params['random'] = intval($params['random']); if ($params['random'] > 0) { if (count($list) <= $params['random']) $params['random'] = count($list); else { $temp_list = array_rand($list, $params['random']); if (!is_array($temp_list)) { //если у нас один случайный ключ $rand_list[] = $list[$temp_list]; $list = $rand_list; } else { //если у нас массив из ключей for ($i = 0; $i < count($temp_list); $i++) $rand_list[] = $list[$temp_list[$i]]; $list = $rand_list; shuffle($list); } } } //проверяем корректность указания количества блоков if (!intval($params['blocks']) || ($params['blocks'] < 1)) { if (($params['inblock'] == intval($params['inblock'])) && ($params['inblock'] > 0)) { $params['blocks'] = count($list) / $params['inblock']; if (intval($params['blocks']) != $params['blocks']) $params['blocks'] = intval($params['blocks'])+1; } else $params['blocks'] = 1; } //определяем количество элементов в блоках $middle = count($list) / $params['blocks']; if ($middle != intval($middle)) $middle = intval($middle)+1; while ($count < count($list)) { $count += $middle; if ($count > count($list)) //только для последнего блока (если деление на блоки не ровное) $in_block[] = $middle - ($count - count($list)); else //для всех блоков, кроме последнего (если деление на блоки не ровное) $in_block[] = $middle; } } } //ВЫПОЛНЕНИЕ ВЫВОДА if ($list) { //загружаем данные об оформлении меню list($id, $name, $before_menu, $after_menu, $before_block, $after_block, $block_spacer, $before_header, $after_header, $simple_item, $current_item, $item_spacer) = explode("|", okdb_ReadItemByID($base, $params['id'])); $name = okcn_FromBase($name); $before_menu = okcn_FromBase($before_menu); $after_menu = okcn_FromBase($after_menu); $before_block = okcn_FromBase($before_block); $after_block = okcn_FromBase($after_block); $block_spacer = okcn_FromBase($block_spacer); $before_header = okcn_FromBase($before_header); $after_header = okcn_FromBase($after_header); $simple_item = okcn_FromBase($simple_item); $current_item = okcn_FromBase($current_item); $item_spacer = okcn_FromBase($item_spacer); //выводим начало меню $echo .= $before_menu; //выводим заголовок if ($params['header'] == "name") //в качестве заголовка используется имя указанного шаблона меню $echo .= $before_header . $name . $after_header; elseif ($params['header'] == "articles") //в качестве заголовка используется имя страницы статей $echo .= $before_header . okdb_DetectName("pages", $articles_options["page"]) . $after_header; elseif ($params['header'] != "none") //в качестве заголовка используется указнный текст $echo .= $before_header . $params['header'] . $after_header; //разбиваем элементы на блоки for ($i = 0; $i < ($params['blocks']); $i++) { $echo .= $before_block; for ($j = 0; $j < $in_block[$i]; $j++) { list($articles_id, $articles_name, $articles_category, $articles_date, $articles_keys, $articles_img, $articles_short) = explode("|", okdb_ReadItemByID($abase, $list[($j+$i*$middle)])); if (substr_count($articles_category, "\n") || substr_count($articles_category, "\r")) unset($articles_category); if (project::$friendly_url == 'on') $articles_url = "/{$articles_options["page"]}/?target=$articles_id"; else $articles_url = "/?theme={$articles_options["page"]}&target=$articles_id"; unset($articles_category);//здесь не обрабатывается //активный или обычный пункт меню if (($_GET['target'] == $articles_id) && ($theme == $articles_options["page"]) && ((($articles_options["page"] == $theme) && ($params['feelpage'] == "on")) || ($params['feelpage'] == "off"))) { if ($params['html5'] == 'on') $echo .= "
$current_item
"; else $echo .= $current_item; if (!$activeexists) $activeexists = 1;//сейчас выводится активный пункт } else { if ($activeexists == 2) $activeexists = 3;//активный пункт уже выводился if ($activeexists == 1) $activeexists = 2;//сейчас выводится пункт следующий за активным if ($params['html5'] == 'on') $echo .= "
$simple_item
"; else $echo .= $simple_item; } //поиск условий //[IS_HAS_ID_идентификатор??истина::ложь] preg_match_all("/(?<=\[IS_HAS_ID_)[^\[\]]*(?=\])/", $echo, $conditions_list); foreach($conditions_list[0] as $item) { list($id, $temp) = explode("??", $item); list($true, $false) = explode("::", $temp); if ($articles_id == $id) $sub_echo = $true; else $sub_echo = $false; $once = 1;//так надо (в следующей строке можно использовать только переменную) $echo = str_replace("[IS_HAS_ID_$item]", $sub_echo, $echo, $once); } //[IS_HAS_NUMBER_порядковый_номер??истина::ложь] preg_match_all("/(?<=\[IS_HAS_NUMBER_)[^\[\]]*(?=\])/", $echo, $conditions_list); foreach($conditions_list[0] as $item) { list($number, $temp) = explode("??", $item); list($true, $false) = explode("::", $temp); if ($serialnumber == $number) $sub_echo = $true; else $sub_echo = $false; $once = 1;//так надо (в следующей строке можно использовать только переменную) $echo = str_replace("[IS_HAS_NUMBER_$item]", $sub_echo, $echo, $once); } //[IS_NEXT??истина::ложь] preg_match_all("/(?<=\[IS_NEXT\?\?)[^\[\]]*(?=\])/", $echo, $conditions_list); foreach($conditions_list[0] as $item) { list($true, $false) = explode("::", $item); if ($activeexists == 2) $sub_echo = $true; else $sub_echo = $false; $once = 1;//так надо (в следующей строке можно использовать только переменную) $echo = str_replace("[IS_NEXT??$item]", $sub_echo, $echo, $once); } //если указанный файл картинки отсутствует, то картинки не существует - логично :) if ((!file_exists($articles_options["image_libpath"] . $articles_img)) && (!substr_count($articles_img, "http://"))) unset($articles_img); //обработка эскиза if (substr_count($echo, "{ARTICLES_ICON_URL}")) { $articles_icon = okim_AutoIcon ($articles_options["icon_libpath"], $articles_id, $articles_options['icon_extention']); if (!$articles_icon && ($params['defaulticon'] == "show")) $articles_icon = okim_AutoIcon ($articles_options["icon_libpath"], "", $articles_options['icon_extention']); } if ($articles_icon) $echo = str_replace("{ARTICLES_ICON_URL}", '/' . $articles_icon, $echo); $echo = str_replace("{ARTICLES_ID}", $articles_id, $echo); $echo = str_replace("{ARTICLES_NAME}", $articles_name, $echo); if ($articles_category) { $echo = str_replace("{ARTICLES_CATEGORY_ID}", str_replace(';',',',$articles_category), $echo); //ID или список ID (через запятую) //если несколько категорий if (substr_count($articles_category,';')) { $echo = str_replace("{ARTICLES_CATEGORY_NAME}", '', $echo); $echo = str_replace("{ARTICLES_CATEGORY_DESCRIPTION}", '', $echo); $echo = str_replace("{ARTICLES_CATEGORY_KEYS}", '', $echo); $echo = str_replace("{ARTICLES_CATEGORY_URL}", '', $echo); } else { list($cat_id,$cat_name,,$cat_description,$cat_keys) = explode('|', okdb_ReadItemByID('articlescat', $articles_category)); $echo = str_replace("{ARTICLES_CATEGORY_NAME}", $cat_name, $echo); $echo = str_replace("{ARTICLES_CATEGORY_DESCRIPTION}", $cat_description, $echo); $echo = str_replace("{ARTICLES_CATEGORY_KEYS}", $cat_keys, $echo); if (project::$friendly_url == 'on') $cat_url = "/{$articles_options['page']}/?cat=$cat_id"; else $cat_url = "/?theme={$articles_options['page']}&cat=$cat_id"; $echo = str_replace("{ARTICLES_CATEGORY_URL}", $cat_url, $echo); } } else $echo = str_replace("{ARTICLES_CATEGORY_ID}", '', $echo); //отображаем временную метку даты/времени статьи $echo = str_replace("{ARTICLES_DATE}", $articles_date, $echo); $echo = str_replace("{ARTICLES_TIME}", $articles_date, $echo); //отображаем ключевые слова $echo = str_replace("{ARTICLES_KEYS}", $articles_keys, $echo); $echo = str_replace("{ARTICLES_SHORT}", $articles_short, $echo); $echo = str_replace("{ARTICLES_URL}", $articles_url, $echo); if (project::$friendly_url == 'on') $echo = str_replace("{ARTICLES_PAGE}", "/{$articles_options["page"]}/", $echo); else $echo = str_replace("{ARTICLES_PAGE}", "/?theme={$articles_options["page"]}", $echo); //Контент if (substr_count($echo, "{ARTICLES_CONTENT}")) { $contentId = okcn_CorrectContentID('articles',$articles_id); if ($contentId) { $articles_content = file_get_contents("content/articles-$contentId.inc"); $echo = str_replace("{ARTICLES_CONTENT}", $articles_content, $echo); } else $echo = str_replace("{ARTICLES_CONTENT}", "", $echo); } //вызов под{плагинов} $echo = okwp_PluginDetect($echo); if ($j != $in_block[$i]-1) $echo .= $item_spacer; //увеличение порядкового номера $serialnumber++; } $echo .= $after_block; if ($i != $params['blocks']-1) $echo .= $block_spacer; } //выводим конец меню $echo .= $after_menu; } $echo = str_replace("{project_design_path}", "/upload/image/design/" . project::$design, $echo); $echo = okcn_RestoreQuotes($echo); //включение семантических тегов из HTML5 if ($echo && ($params['html5'] == 'on')) $echo = ""; ?> Мастерская уюта - проекты