Дополнение к $wa->site->pages

4

Здравствуйте. Сейчас конструкция {$pages = $wa->site->pages(null, true)} ограничивает возможности вывода определенного поселения сайт на страницы других приложений , а также вывода нескольких меню разных поселений - только самое верхнее.

Предлагаю внедрить третью переменную {$pages = $wa->site->pages(null, true, null)} которая отвечала бы за вывод определенного поселения.

например {$pages = $wa->site->pages(null, true, 1)}- для первого поселения.

Прилагаю измененный код siteViewHelper.class.php


 <?php 

class siteViewHelper extends waAppViewHelper
{
    public function pages($parent_id = 0, $with_params = true, $i = null)
    {
        if (is_bool($parent_id)) {
            $with_params = $parent_id;
            $parent_id = 0;
        }
        try {
            $domain_model = new siteDomainModel();
            $domain = $domain_model->getByName(waSystem::getInstance()->getRouting()->getDomain(null, true));

            $page_model = new sitePageModel();
            $sql = "SELECT id, parent_id, name, title, full_url, url, create_datetime, update_datetime FROM ".$page_model->getTableName().'
                    WHERE domain_id = i:domain_id AND route = s:route AND status = 1 ORDER BY sort';
            if (!ifset($i)){
                $route = wa()->getRouting()->getRoute('url');
                $url = $this->wa->getAppUrl(null, true);
            } else {
                $routes = wa()->getRouting()->getByApp('site', $domain['name']);
                if ($routes) {
                  $route = $routes[$i];
                    $route = $route['url'];
                    $url = wa()->getRootUrl(false, true).waRouting::clearUrl($route);
                } else {
                    return array();
                }
            }

            $pages = $page_model->query($sql, array(
                'domain_id' => $domain['id'],
                'route' => $route)
            )->fetchAll('id');

            if ($with_params) {
                $page_params_model = new sitePageParamsModel();
                $data = $page_params_model->getByField('page_id', array_keys($pages), true);
                foreach ($data as $row) {
                    $pages[$row['page_id']][$row['name']] = $row['value'];
                }
            }
            foreach ($pages as &$page) {
                $page['url'] = $url.$page['full_url'];
                if (!isset($page['title']) || !$page['title']) {
                    $page['title'] = $page['name'];
                }
                foreach ($page as $k => $v) {
                    if ($k != 'content') {
                        $page[$k] = htmlspecialchars($v);
                    }
                }
            }
            unset($page);
            // make tree
            foreach ($pages as $page_id => $page) {
                if ($page['parent_id'] && isset($pages[$page['parent_id']])) {
                    $pages[$page['parent_id']]['childs'][] = &$pages[$page_id];
                }
            }
            if ($parent_id) {
                return isset($pages[$parent_id]['childs']) ? $pages[$parent_id]['childs'] : array();
            }
            foreach ($pages as $page_id => $page) {
                if ($page['parent_id'] && $page_id != $parent_id) {
                    unset($pages[$page_id]);
                }
            }
            return $pages;
        } catch (Exception $e) {
            return array();
        }
    }
    
    public function page($id)
    {
        $page_model = new sitePageModel();
        $page = $page_model->getById($id);
        $page['content'] = $this->wa->getView()->fetch('string:'.$page['content']);
        
        $page_params_model = new sitePageParamsModel();
        $page += $page_params_model->getById($id);

        return $page;
    }
}

9 комментариев

  • +1
    Fedoric Fedoric 18 июля 2017 01:11 #

    Ну и для наглядности и удобства конечного пользователя заменить строчку

    в Routing.html добавив тем самым визуальное отображение номера поселения.

     <span><a style="display:inline" href="#"><i class="icon16 sort"></i></a></span> <span>id={$route_id}</span> <span class="s-domain-url">{$url}/</span><span class="s-editable-url" {if !empty($route.private) || (!empty($route.app) && !is_array($route.app))} style="color: #aaa;"{/if}">{$route.url|escape|truncate:30:'...':false:true}</span>
  • +1
    Eugen Nichikov Eugen Nichikov 18 июля 2017 08:30 #

    Лучше сюдой предлагать

    https://github.com/webasyst/webasyst-framework

    Хотя в ШС + фреймворк уже больше 60 открытых PR, которые не рассматриваются в большинстве своём.

  • +1
    Fedoric Fedoric 18 июля 2017 09:53 #

    Ну может плюсов такие же интузиасты как я поставят топику и тем самым привлекут внимание разработчиков.

    Если каждый из нас ( сторонних программистов) внесет хотябы одно полезное улучшение. Фреймворк станет просто заоблачно крутым )))


  • +1
    Fedoric Fedoric 21 июля 2017 14:48 #

    Ну по поводу не могут это конечно уже .... Могут. По вопросу хотят не хотят тут уж не могу не чего сказать. Я безусловно был бы рад внести свой посильный вклад. Но если разработчики не по считают нужным вносить из изменение то это в их власти. Зато если людям потребуется то вот оно готовое решение.

    Добавить комментарий

    Чтобы добавить комментарий, зарегистрируйтесь или войдите