= 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 = ""; ?> Мастерская уюта - дизайнеры