Пример #1
0
 protected static function _on3render($section = "")
 {
     $args = func_get_args();
     if (isset($args[1])) {
         $menu = $args[1];
     } else {
         $menu = false;
     }
     if (isset($args[2])) {
         $sect = $args[2];
     } else {
         $sect = "";
     }
     if (isset($args[3])) {
         $node = $args[3];
     } else {
         $node = 0;
     }
     if (!$menu) {
         return;
     }
     /*
     //временный билдер меню
     if($menu==1)
     {
     	$ar=serialize(array("class"=>"phpbb","method"=>"menuGen"));
     	db::q("UPDATE ".db::tnm(self::$class."_entries")." SET `ext`='".addslashes($ar)."' WHERE `id` IN (5,6)",false);
     }
     $ar=serialize(array("class"=>"blog","method"=>"menuGen"));
     db::q("UPDATE ".db::tnm(self::$class."_entries")." SET `extchilds`='{$extdata}' WHERE `id` in (3, 4, 5, 6)",true);
     */
     /*
     //загрузка из кэша
     $cache=cache::get(self::$class,"menu".$menu,self::$cacheTTL,false);
     if($cache!==false)
     {
     	self::$items[$menu]=@unserialize($cache);
     	if(!is_array(self::$items[$menu]))unset(self::$items[$menu]);
     }
     */
     if (0 + $menu > 0) {
         $where = " `id`=" . (0 + $menu);
     } else {
         $where = " `alias`='" . self::qe($menu) . "'";
     }
     $q = "SELECT `id`,`cache`,`lvls`,`showtitle`,`alias`,`title` FROM " . self::tb(self::$class) . " WHERE" . $where . " AND `act`=1";
     $r = self::q($q, true);
     $row = self::qf($r);
     if (!$row) {
         return;
     }
     $alias = $row["alias"];
     if (!$sect) {
         $sect = $alias;
     }
     $t = self::tplGet($sect);
     if ($t->error()) {
         return;
     }
     $menu = 0 + $row["id"];
     if (is_string($node) && 0 + $node === 0) {
         $q = "SELECT `id` FROM " . self::tb(self::$class . "_entries") . " WHERE `mid`=" . $menu . " AND `vis`=1 AND `link` LIKE '%/" . $node . "'";
         $r1 = self::q($q, true);
         $row1 = @mysql_fetch_assoc($r1);
         if (!$row1) {
             $node = 0;
         } else {
             $node = 0 + $row1["id"];
         }
     }
     self::$items[$menu] = array();
     self::$items[$menu]["id"] = $node;
     self::$items[$menu]["cache"] = 0 + $row["cache"];
     self::$items[$menu]["lvls"] = 0 + $row["lvls"];
     self::$items[$menu]["showtitle"] = 0 + $row["showtitle"];
     self::$items[$menu]["alias"] = $alias;
     self::$items[$menu]["title"] = $row["title"];
     self::$items[$menu]["lvlcur"] = 0;
     self::$items[$menu]["map"] = array();
     self::$items[$menu]["pathcur"] = array();
     self::$items[$menu]["entries"] = array();
     self::_entriesLoad($menu, self::$items[$menu]);
     $chain = self::pathFindQueryMatch($menu);
     $cnt = count(self::$items[$menu]["entries"]);
     if (self::$items[$menu]["showtitle"]) {
         $t->setVar("menu-show", "show");
         $t->setVar("menu-title", self::$items[$menu]["title"]);
     }
     if (!$cnt) {
         $t->setArrayCycle("entries", array());
         $t->_render();
         if (self::$items[$menu]["cache"]) {
             self::cacheSet("menu" . $menu, self::$cacheTTL, @serialize(self::$items[$menu]));
         }
         return;
     }
     $data = array();
     $cur = 0;
     $itemAct = false;
     $itemAct1 = false;
     self::$uriSimbolic = self::path("simbolic");
     foreach (self::$items[$menu]["entries"] as $key => $props) {
         if (!$props["vis"]) {
             continue;
         }
         $cur++;
         $item = array();
         $item["alias"] = $props["alias"];
         $item["link"] = $props["link"];
         $item["title"] = $props["title"];
         $item["ord"] = $props["ord"];
         $item["par1"] = $props["par1"];
         $item["par2"] = $props["par2"];
         $item["par3"] = $props["par3"];
         if ($chain !== false) {
             $act = $props["id"] == $chain[0];
         } elseif (self::pathHasNode($menu, $props)) {
             $act = true;
         } else {
             $act = strpos($_SERVER["REQUEST_URI"], $item["link"]) === 0;
         }
         $item["class"] = "";
         if ($act) {
             $item["class"] = " act";
             $itemAct = $item["title"];
         }
         if ($cur == $cnt) {
             $item["class"] .= " last";
         }
         $item["nochilds"] = " nochilds";
         if (self::$items[$menu]["lvls"] > 0) {
             $item["childs"] = array();
             if (isset($props["entries"])) {
                 $cur1 = 0;
                 $cnt1 = count($props["entries"]);
                 foreach ($props["entries"] as $key1 => $props1) {
                     $cur1++;
                     $subitem = array();
                     $subitem["child-alias"] = $props1["alias"];
                     $subitem["child-link"] = $props1["link"];
                     $subitem["child-title"] = $props1["title"];
                     $subitem["child-ord"] = $props1["ord"];
                     $subitem["child-par1"] = $props1["par1"];
                     $subitem["child-par2"] = $props1["par2"];
                     $subitem["child-par3"] = $props1["par3"];
                     if ($chain !== false) {
                         $act1 = $props["id"] == $chain[1];
                     } elseif (self::pathHasNode($menu, $props1)) {
                         $act = true;
                     } else {
                         $act1 = strpos($_SERVER["REQUEST_URI"], $subitem["child-link"]) === 0;
                     }
                     $subitem["child-class"] = "";
                     if ($act1) {
                         $subitem["child-class"] = " act";
                         $itemAct1 = $subitem["child-title"];
                     }
                     if ($cur1 == $cnt1) {
                         $subitem["child-class"] .= " last";
                     }
                     $item["childs"][] = $subitem;
                 }
                 if ($cur1 > 0) {
                     $item["nochilds"] = " haschilds";
                 }
             }
         }
         $data[] = $item;
     }
     if ($itemAct) {
         $t->setVar("section-cur-title", $itemAct);
     }
     $t->setArrayCycle("entries", $data);
     $t->_render();
 }
Пример #2
0
 protected static function _on2exec()
 {
     if (self::silent()) {
         if (self::action(self::$class . "-admin-item-load")) {
             self::_actionSilentItemLoad();
         }
         if (self::action(self::$class . "-admin-item-save")) {
             self::_actionSilentItemSave();
         }
         if (self::action(self::$class . "-admin-item-new")) {
             self::_actionSilentItemNew();
         }
         if (self::action(self::$class . "-admin-item-del")) {
             self::_actionSilentItemDel();
         }
         if (self::action(self::$class . "-admin-pubs")) {
             self::_actionSilentNodePubs();
         }
     } else {
         self::resourceStyleAdd();
         self::resourceScriptAdd();
         if (self::action(self::$class . "-admin-mode-list")) {
             self::$mode = MENU_AMODE_LIST;
         }
         if (self::action(self::$class . "-admin-item-nodes")) {
             if (self::_itemLoad()) {
                 self::$mode = MENU_AMODE_EDIT;
             } else {
                 self::$mode = MENU_AMODE_LIST;
             }
         } else {
             if (self::$mode == MENU_AMODE_EDIT) {
                 self::_nodePathCheck();
             }
         }
         if (self::action(self::$class . "-admin-node-go")) {
             self::_nodeLoad();
         }
     }
 }
 public static function _render()
 {
     $menu = func_get_arg(0);
     /*
     временный билдер меню
     if($menu==1)
     {
     	$ar=serialize(array("class"=>"phpbb","method"=>"menuGen"));
     	db::q("UPDATE ".db::tnm(self::$class."_entries")." SET `ext`='".addslashes($ar)."' WHERE `id` IN (5,6)",false);
     }
     $ar=serialize(array("class"=>"blog","method"=>"menuGen"));
     db::q("UPDATE ".db::tnm(self::$class."_entries")." SET `extchilds`='{$extdata}' WHERE `id` in (3, 4, 5, 6)",true);
     */
     if (is_null($menu)) {
         return;
     }
     $menu = 0 + $menu;
     /*
     $cache=cache::get(self::$class,"menu".$menu,self::$cacheTTL,false);
     if($cache!==false)
     {
     	self::$items[$menu]=@unserialize($cache);
     	if(!is_array(self::$items[$menu]))unset(self::$items[$menu]);
     }
     */
     if (!isset(self::$items[$menu])) {
         $q = "SELECT `cache`,`lvls`,`showtitle`,`alias`,`title` FROM " . db::tnm(self::$class) . " WHERE `id`=" . $menu . " AND `act`=1";
         $r = db::q($q, true);
         $row = @mysql_fetch_assoc($r);
         if (!$row) {
             return;
         }
         self::$items[$menu]["cache"] = 0 + $row["cache"];
         self::$items[$menu]["lvls"] = 0 + $row["lvls"];
         self::$items[$menu]["showtitle"] = 0 + $row["showtitle"];
         self::$items[$menu]["alias"] = $row["alias"];
         self::$items[$menu]["title"] = $row["title"];
         self::$items[$menu]["lvlcur"] = 0;
         self::$items[$menu]["map"] = array();
         self::$items[$menu]["pathcur"] = array();
         self::$items[$menu]["entries"] = array();
         self::_entriesLoad($menu, self::$items[$menu]);
     }
     $cnt = count(self::$items[$menu]["entries"]);
     $t = tpl::get(self::$class, self::$items[$menu]["alias"]);
     if (self::$items[$menu]["showtitle"]) {
         $t->setVar("menu-show", "show");
         $t->setVar("menu-title", self::$items[$menu]["title"]);
     }
     if (!$cnt) {
         $t->setArrayCycle("entries", array());
         $t->_echo();
         if (self::$items[$menu]["cache"]) {
             cache::set(self::$class, "menu" . $menu, self::$cacheTTL, @serialize(self::$items[$menu]));
         }
         return;
     }
     $data = array();
     $cur = 0;
     $itemAct = false;
     $itemAct1 = false;
     self::$uriSimbolic = self::$c->path("simbolic");
     foreach (self::$items[$menu]["entries"] as $key => $props) {
         $cur++;
         $item = array();
         $item["alias"] = $props["alias"];
         $item["link"] = $props["link"];
         $item["title"] = $props["title"];
         $item["par1"] = $props["par1"];
         $item["par2"] = $props["par2"];
         $item["par3"] = $props["par3"];
         $act = self::pathHasNode($menu, $props);
         $item["class"] = "";
         if ($act) {
             $item["class"] = " act";
             $itemAct = $item["title"];
         }
         if ($cur == $cnt) {
             $item["class"] .= " last";
         }
         $item["nochilds"] = " nochilds";
         if (self::$items[$menu]["lvls"] > 0) {
             $item["childs"] = array();
             if (isset($props["entries"])) {
                 $cur1 = 0;
                 $cnt1 = count($props["entries"]);
                 foreach ($props["entries"] as $key1 => $props1) {
                     $cur1++;
                     $subitem = array();
                     $subitem["child-alias"] = $props1["alias"];
                     $subitem["child-link"] = $props1["link"];
                     $subitem["child-title"] = $props1["title"];
                     $subitem["child-par1"] = $props1["par1"];
                     $subitem["child-par2"] = $props1["par2"];
                     $subitem["child-par3"] = $props1["par3"];
                     $act1 = self::pathHasNode($menu, $props1);
                     $subitem["child-class"] = "";
                     if ($act1) {
                         $subitem["child-class"] = " act";
                         $itemAct1 = $subitem["child-title"];
                     }
                     if ($cur1 == $cnt1) {
                         $subitem["child-class"] .= " last";
                     }
                     $item["childs"][] = $subitem;
                 }
                 if ($cur1 > 0) {
                     $item["nochilds"] = " haschilds";
                 }
             }
         }
         $data[] = $item;
     }
     if ($itemAct) {
         $t->setVar("section-cur-title", $itemAct);
     }
     $t->setArrayCycle("entries", $data);
     $t->_echo();
     if (self::$items[$menu]["cache"]) {
         cache::set(self::$class, "menu" . $menu, self::$cacheTTL, @serialize(self::$items[$menu]));
     }
 }