public function generate() { // Will we be able to write to the cache? if (!is_writable(DEPLOY_CACHE_DIR)) { $this->_set_error('Cache is not writeable.'); return FALSE; } // -------------------------------------------------------------------------- $_map = new stdClass(); $_map->meta = new stdClass(); $_map->meta->generated = date(DATE_ATOM); $_map->pages = array(); foreach ($this->_writers as $slug => $method) { if (is_callable(array($method[0], $method[1]))) { $_result = call_user_func(array($method[0], $method[1])); if (is_array($_result)) { $_map->pages = array_merge($_map->pages, $_result); } } } // -------------------------------------------------------------------------- // Sort the array into a vaguely sensible order $this->load->helper('array'); array_sort_multi($_map->pages, 'location'); // -------------------------------------------------------------------------- // Save this data as JSON and XML files $this->load->helper('file'); // JSON, easy if (!write_file(DEPLOY_CACHE_DIR . $this->_filename_json, json_encode($_map))) { $this->_set_error('Failed to write ' . $this->_filename_json . '.'); return FALSE; } // XML file is a little more complex $_fh = fopen(DEPLOY_CACHE_DIR . $this->_filename_xml, 'w'); if (!$_fh) { $this->_set_error('Failed to write ' . $this->_filename_xml . ': Could not open file for writing.'); return FALSE; } $_xml = '<?xml version="1.0" encoding="UTF-8"?>' . "\n"; $_xml .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . "\n"; if (fwrite($_fh, $_xml)) { for ($i = 0; $i < count($_map->pages); $i++) { $_xml = '<url>' . "\n"; $_xml .= '<loc>' . $_map->pages[$i]->location . '</loc>' . "\n"; $_xml .= !empty($_map->pages[$i]->lastmod) ? '<lastmod>' . $_map->pages[$i]->lastmod . '</lastmod>' . "\n" : ''; $_xml .= !empty($_map->pages[$i]->changefreq) ? '<changefreq>' . $_map->pages[$i]->changefreq . '</changefreq>' . "\n" : ''; $_xml .= !empty($_map->pages[$i]->priority) ? '<priority>' . $_map->pages[$i]->priority . '</priority>' . "\n" : ''; $_xml .= '</url>' . "\n"; if (!fwrite($_fh, $_xml)) { @unlink(DEPLOY_CACHE_DIR . $this->_filename_xml); $this->_set_error('Failed to write ' . $this->_filename_xml . ': Could write to file - #2.'); return FALSE; } } // finally, close <urlset> $_xml = '</urlset>' . "\n"; if (!fwrite($_fh, $_xml)) { @unlink(DEPLOY_CACHE_DIR . $this->_filename_xml); $this->_set_error('Failed to write ' . $this->_filename_xml . ': Could write to file - #3.'); return FALSE; } return TRUE; } else { @unlink(DEPLOY_CACHE_DIR . $this->_filename_xml); $this->_set_error('Failed to write ' . $this->_filename_xml . ': Could write to file - #1.'); return FALSE; } }
function tagForeach($Item = array()) { if (!$this->is("[data-template]")) { $this->addTemplate(); } $srcItem = $Item; $pagination = ""; $sort = $this->attr("sort"); $dsort = $this->attr("data-sort"); $pagination = "ajax"; if ($this->attr("data-pagination") > "") { $size = $this->attr("data-pagination"); $pagination = "js"; } if ($this->attr("data-size") > "") { $size = $this->attr("data-size"); $pagination = "ajax"; } else { $size = "false"; } $mode = $this->attr("mode"); $dmode = $this->attr("data-mode"); if ($dmode == "") { $dmode = "list"; } $desc = $this->attr("desc"); $ddesc = $this->attr("data-desc"); $rand = $this->attr("rand"); $step = $this->attr("step"); $page = $this->attr("data-page"); if ($page == "") { $page = 1; } $cache = $this->attr("data-cache"); $dList = $this->attr("data-list"); if ($dList == "") { $dList = false; } else { $dList = aikiReadList($dList); } $limit = $this->attr("limit"); $call = $this->attr("call"); $oconv = $this->attr("oconv"); $item = $this->attr("item"); $where = $this->attr("where"); if ($where == "") { $where = NULL; } $field = $this->attr("field"); $from = $this->attr("from"); $find = $this->attr("data-find"); // контекстный поиск $tplid = $this->attr("data-template"); $beforeShow = $this->attr("data-before-show"); if ($from > "" && !isset($Item[$from])) { $tmp = ""; eval('$tmp=$Item' . $from . ";"); if ($tmp > "") { $Item[$from] = $tmp; } } if ($from > "" && isset($Item[$from]) && $this->hasRole("foreach") && $cache == "") { if ($this->attr("form") == "" && isset($Item["form"])) { $form = $Item["form"]; } else { $form = ""; } if ($this->attr("item") == "" && isset($Item["id"])) { $item = $Item["id"]; } else { $item = ""; } $Item = $Item[$from]; if (!is_array($Item)) { $Item = json_decode($Item, true); } if ($field > "") { $Item = $Item[$field]; } if (!is_array($Item)) { $Item = json_decode($Item, true); } if ($where > "") { $Item = aikiWhere($Item); } } else { $Item = array(); } $vars = $this->attr("vars"); if ($vars > "") { $Item = attrAddData($vars, $Item); } $json = $this->attr("json"); if ($json > "") { $Item = json_decode($json, true); } $index = $this->attr("index"); if (($this->attr("form") > "" or $this->attr("data-form") > "") && $from == "" && $cache == "") { $form = $this->attr("form"); if ($form == "") { $form = $this->attr("data-form"); } $type = $this->attr("data-type"); if ($type > "") { $_SESSION[$form]["data-type-tmp"] = $type; } formCurrentInclude($form); $datatype = "file"; $func = $form . "DataType"; if (is_callable($func)) { $datatype = $func(); } if ($item > "") { $Item[0] = aikiReadItem($form, $item); if ($field > "") { $Item = $Item[0][$field]; if (is_string($Item)) { $Item = json_decode($Item, true); } if (isset($Item[0]["img"]) && isset($Item[0]["visible"])) { $Item = array_filter_value($Item, "visible", "1"); } } } else { $list = aikiListItems($form, $where); $Item = array(); $Item = $list["result"]; } } if (is_string($Item)) { $Item = json_decode($Item, true); } if (!is_array($Item)) { $Item = array($Item); } if ($cache > "" && isset($_SESSION["data"]["foreach"][$cache])) { $Item = $_SESSION["data"]["foreach"][$cache]; $first = array_shift($Item); array_unshift($Item, $first); if (isset($first["form"])) { $form = $first["form"]; formCurrentInclude($form); } } if ($sort > "") { // старый формат if ($desc == "true") { $stype = SORT_DESC; } else { $stype = SORT_ASC; } $Item = array_sort($Item, $sort, $stype); } if ($dsort > "") { $Item = array_sort_multi($Item, $dsort); if ($cache !== "") { $_SESSION["data"]["foreach"][$cache] = $Item; } } if ($ddesc == "true") { $Item = array_reverse($Item); } if ($rand == "true") { shuffle($Item); } if (is_callable($call)) { $Item = $call($Item); } $tpl = $this->innerHtml(); $inner = ""; $this->html(""); if ($step > 0) { $steptpl = $this->clone(); $stepcount = 0; } if ($tplid == "") { $tplid = "tpl" . newIdRnd(); } $ndx = 0; $fdx = 0; $n = 0; $count = count($Item); if ($size == "false") { $pagination = "js"; } if ($this->tag() !== "select" && $size == "" && $count > 200) { $pagination = "ajax"; $size = 10; $page = 1; $this->attr("data-size", $size); } if ($count && $Item !== array(0 => "")) { $cacheList = array(); $inner = ""; $srcVal = array(); foreach ($srcItem as $k => $v) { $srcVal["%{$k}"] = $v; } unset($v); $ndx = 0; $n = 0; $f = 0; $tmptpl = aikiFromString($tpl); foreach ($Item as $key => $val) { if (!isset($val["id"])) { $lid = $key; } else { $lid = $val["id"]; } if ($dList == false or in_array($lid, $dList)) { $n++; $cacheVal = $val; if ($limit == "" or $limit * 1 > $ndx * 1) { if (!is_array($val)) { $tmp = json_decode($val, true); if ($tmp) { $val = $tmp; } else { $val = array($val); } } // именно так и никак иначе if ($vars > "") { $val = attrAddData($vars, $val); } if ($val !== NULL && ($where == NULL or aikiWhereItem($val, $where))) { // если не обнулено в вызываемой ранее функцией (например, если стоит флаг скрытия в списке) if ($cache == "" && $size !== "false" && $size !== "") { $cacheList[$key] = $cacheVal; } if ($pagination == "ajax" && ($size == "false" or $size == "")) { $size = 999999999; } if ($pagination == "ajax" and ($size > "" && $cache > "" && ($n > $page * $size - $size && $n <= $page * $size) or $size > "" && $cache == "" && $ndx < $size or $find > "") or $size == "" or $pagination == "js") { $itemform = ""; if (isset($val["form"])) { $itemform = $val["form"]; } else { $itemform = $_GET["form"]; } $text = $tmptpl->clone(); $val = (array) $srcVal + (array) $val; // сливаем массивы if ($beforeShow !== "false") { $val = aikiBeforeShowItem($val, $dmode, $itemform); } if (is_callable($oconv)) { $val = $oconv($val); } $text->find(":first")->attr("idx", $key); $val["_idx"] = $_SESSION["foreach_idx"] = $key; $val["_ndx"] = $_SESSION["foreach_ndx"] = $ndx; $val["_num"] = $_SESSION["foreach_num"] = $ndx + 1; $text->contentSetData($val); if ($find == "") { $flag = true; } else { $flag = aikiInString(strip_tags($text->innerHtml()), $find); if ($flag) { $f++; } } if ($find == "" or $size == "false" or $size == "" or $find > "" && ($f > $page * $size - $size && $f <= $page * $size)) { $tmp; } else { $flag = false; } if ($flag == true) { $ndx++; if ($step > 0) { // если степ, то работаем с объектом if ($stepcount == 0) { $t_step = $steptpl->clone(); $t_step->addClass($tplid); $this->append($t_step); } $this->find(".{$tplid}:last")->append(clearValueTags($text->outerHtml())); $stepcount++; //$stepcount=$this->find(".{$tplid}:last")->children()->length; if ($stepcount == $step) { $stepcount = 0; } } else { // иначе строим строку $inner .= clearValueTags($text->outerHtml()); } } else { $n--; } $text->remove(); } } } } } if ($step > 0) { foreach ($this->find(".{$tplid}") as $tid) { $tid->removeClass($tplid); } unset($tid); } else { $this->html($inner); } unset($val, $ndx, $t_step, $string, $text, $func, $inner, $tmptpl); } if ($this->tag() == "select") { if (!is_array($result)) { $this->outerHtml(""); } $plhr = $this->attr("placeholder"); if ($plhr > "") { $this->prepend("<option value=''>{$plhr}</option>"); } } else { $data_group = $this->attr("data-group"); $data_total = $this->attr("data-total"); if ($data_total > "" or $data_group > "") { aikiTableProcessor($this); $size = ""; } if ($size > "" && $size !== "false" && $pagination == "js") { $this->tagDataPagination($size); } if ($size > "" && $size !== "false" && $pagination == "ajax") { if ($cache > "") { $cacheId = $cache; } else { $cacheId = md5($from . $form . $where . $tplid . $sort . $rand . $dsort . $limit . $item . $field . $call . $oconv . $vars . $json . implode("-", $_GET)); } if ($cache == "" && isset($cacheList)) { $_SESSION["data"]["foreach"][$cacheId] = $cacheList; } unset($cacheList); if ($find > "") { $count = $f; } else { $count = count($_SESSION["data"]["foreach"][$cacheId]); } $pages = ceil($count / $size); //if (round($pages)<$pages) {$pages=round($pages)+1;} $this->tagDataPagesAjax($size, $page, $pages, $cacheId, $count, $find); } } unset($Item, $tpl); gc_collect_cycles(); }