mmkulikov

Участники
  • Публикации

    61
  • Зарегистрирован

  • Посещение

  • Days Won

    7

Изменения репутации

  1. Like
    mmkulikov получил репутацию от metrpro в Переменные в main.php   
    Если администрация не против - предлагаю здесь собирать информацию о доступных переменных для шаблона.
     
    Переменные:
    Просмотреть содержимое любого массива, например, {$special_items2|@print_r}
     
    $estate_folder - корневая папка сайта
    $current_theme_name - имя используемой темы
    $smarty.session.user_id - если пусто, значит пользователь не залогинен.
    Лучше проверять как {if intval($smarty.session.user_id)!=0}Значит авторизирован{/if}
    $main_file_tpl - имя подгружаемого файла шаблона для отображения, например, realty_grid.tpl - шаблон вывода списка категории недвижимости
    $main - в отличии от предыдущего - это готовый контент для вывода (готовится в контроллере или приложении)
    $special_items2 - массив, содержащий список спецпредложений(VIP)
    $grid_items - массив обычных объявлений
    $news_list_column - массив списка новостей
    $apps_page_view - если переменная определена, значит идет просмотр статической страницы
    $meta_keywords - keywords
    $meta_description - description
    $breadcrumbs - "хлебные крошки"
    $map_type - google, yandex
    $is_account - указывает на то, что мы сейчас в личном кабинете (1/0)
    $_layout - текущий макет, по умолчанию (как правило) layout_basic.tpl (используется, например, в main.tpl для подгрузки основного файла шаблона)
  2. Like
    mmkulikov получил репутацию от DoobBY в Убираем page=1   
    Для устранения дублей страниц, т.к. страница пагинации page=1 является дублем страницы без пагинации
    Добавляем в main.php шаблона в самом начале функции main следующий код:
    $r_uri = $_SERVER['REQUEST_URI']; // Полная строка с GET параметрамиif (preg_match("#([\?\&]+page=1)\D*$#",$r_uri,$matches)) {$new_location=SITEBILL_MAIN_URL.str_replace($matches[1],"",$r_uri);header('HTTP/1.1 301 Moved Permanently');header('Location: '.$new_location);exit();} // Убираем page=1 из урл
  3. Like
    mmkulikov получил репутацию от Chernetskiy в Убираем page=1   
    Для устранения дублей страниц, т.к. страница пагинации page=1 является дублем страницы без пагинации
    Добавляем в main.php шаблона в самом начале функции main следующий код:
    $r_uri = $_SERVER['REQUEST_URI']; // Полная строка с GET параметрамиif (preg_match("#([\?\&]+page=1)\D*$#",$r_uri,$matches)) {$new_location=SITEBILL_MAIN_URL.str_replace($matches[1],"",$r_uri);header('HTTP/1.1 301 Moved Permanently');header('Location: '.$new_location);exit();} // Убираем page=1 из урл
  4. Like
    mmkulikov получил репутацию от XTRO в Предложения для будущих версий.   
    Очень хочется иметь возможность перекрывать у class SiteBill
    метод get_breadcrumbs не всем нравятся(подходят и т.п.) "крошки" в том виде как они есть.
     
    А по большому счету хочется из шаблона иметь возможность управлять всеми доступными
    методами этого базового класса.
  5. Like
    mmkulikov получил репутацию от Дмитрий Кондин в Убираем page=1   
    Для устранения дублей страниц, т.к. страница пагинации page=1 является дублем страницы без пагинации
    Добавляем в main.php шаблона в самом начале функции main следующий код:
    $r_uri = $_SERVER['REQUEST_URI']; // Полная строка с GET параметрамиif (preg_match("#([\?\&]+page=1)\D*$#",$r_uri,$matches)) {$new_location=SITEBILL_MAIN_URL.str_replace($matches[1],"",$r_uri);header('HTTP/1.1 301 Moved Permanently');header('Location: '.$new_location);exit();} // Убираем page=1 из урл
  6. Like
    mmkulikov получил репутацию от anderson в Переменные в main.php   
    Если администрация не против - предлагаю здесь собирать информацию о доступных переменных для шаблона.
     
    Переменные:
    Просмотреть содержимое любого массива, например, {$special_items2|@print_r}
     
    $estate_folder - корневая папка сайта
    $current_theme_name - имя используемой темы
    $smarty.session.user_id - если пусто, значит пользователь не залогинен.
    Лучше проверять как {if intval($smarty.session.user_id)!=0}Значит авторизирован{/if}
    $main_file_tpl - имя подгружаемого файла шаблона для отображения, например, realty_grid.tpl - шаблон вывода списка категории недвижимости
    $main - в отличии от предыдущего - это готовый контент для вывода (готовится в контроллере или приложении)
    $special_items2 - массив, содержащий список спецпредложений(VIP)
    $grid_items - массив обычных объявлений
    $news_list_column - массив списка новостей
    $apps_page_view - если переменная определена, значит идет просмотр статической страницы
    $meta_keywords - keywords
    $meta_description - description
    $breadcrumbs - "хлебные крошки"
    $map_type - google, yandex
    $is_account - указывает на то, что мы сейчас в личном кабинете (1/0)
    $_layout - текущий макет, по умолчанию (как правило) layout_basic.tpl (используется, например, в main.tpl для подгрузки основного файла шаблона)
  7. Like
    mmkulikov получил репутацию от Дмитрий Кондин в Breadcrumbs   
    <?php/*** Created by PhpStorm.* User: Mikhail* Date: 04.09.2015* Time: 12:19*/class Local_Grid_Constructor extends Grid_Constructor {/*** Формируем "хлебные крошки", оборачиваем стандартные* по формату RDF* Дополняем если нашли доп.парметры, например ?u_lesa=1** @param $params* @param string $url* @return array|string*/protected function prepareBreadcrumbs($params, $url = ''){$breadcrumbs = parent::prepareBreadcrumbs($params,$url);if (empty($breadcrumbs)) return $breadcrumbs;$columns = $this->_getColumnsNameIds();$REQUESTURIPATH=Sitebill::getClearRequestURI(); // Строка без GET параметров с '?u_lesa=1'/* echo "<pre>";global $smarty;var_dump($this->getRequestValue("seo-router"));echo "</pre>";die('');*/$breadcrumbs = explode(" / ",$breadcrumbs); // Строку назад в массивfor($i=0; $i < sizeof($breadcrumbs)-1; $i++){$breadcrumbs[$i] = $this->_makeRDF($breadcrumbs[$i]);}$r_uri = $_SERVER['REQUEST_URI']; // Полная строка с GET параметрамиif($REQUESTURIPATH != "index.php" && preg_match("#\?(\w+)=#",$r_uri,$matches)){if(isset($columns[$matches[1]])) {$breadcrumbs[sizeof($breadcrumbs)-1] = $this->_makeRDF($breadcrumbs[sizeof($breadcrumbs)-1]);$breadcrumbs[] = "".$columns[$matches[1]]["title"]."";}} else {};$breadcrumbs = implode(" / ", $breadcrumbs); // Обработанный массив назад в строку "крошек"//$this->template->assert('meta_title', $_SERVER['REQUEST_URI']);return $breadcrumbs;}/*** Возвращает массив со всеми колонками модели data** @return array**/private function _getColumnsNameIds(){$DBC=DBC::getInstance();$columns_ids=array();$query='SELECT columns_id, name, title FROM '.DB_PREFIX.'_columns WHERE table_id=(SELECT table_id FROM '.DB_PREFIX.'_table WHERE `name`=\'data\' LIMIT 1)';$stmt=$DBC->query($query);if($stmt){while($ar=$DBC->fetch($stmt)){$columns_ids[$ar['name']]["id"]=$ar['columns_id'];$columns_ids[$ar['name']]["title"]=$ar['title'];}}return $columns_ids;}private function _makeRDF($breadcrumb) {$breadcrumb = "<span typeof=\"v:Breadcrumb\">".str_replace("<a ","<a property=\"v:title\" rel=\"v:url\"",$breadcrumb)."</span>";return $breadcrumb;}} Вот еще "сырой" код.
    Фишка в том, что добавляются seo теги в "крошки". Урл обрабатываются приложением (уже написал).
    Т.е. под любой параметр фильтра, например, checkbox u_lesa, можно описать для пары категория+параметр фильтра
    - свой ЧПУ
    - свои мета сео плюшки
    Хотелось-бы ограничиться приложением, но сейчас та часть, которая обрабатывает ЧПУ в приложении, а прописание всяких
    meta_xxxx в гриде
    Вот скрины приложения
    https://yadi.sk/i/w6p67-eiiu7Eb
    https://yadi.sk/i/Fd5HlI-piu7Gc
  8. Like
    mmkulikov получил репутацию от h-i в Breadcrumbs   
    <?php/*** Created by PhpStorm.* User: Mikhail* Date: 04.09.2015* Time: 12:19*/class Local_Grid_Constructor extends Grid_Constructor {/*** Формируем "хлебные крошки", оборачиваем стандартные* по формату RDF* Дополняем если нашли доп.парметры, например ?u_lesa=1** @param $params* @param string $url* @return array|string*/protected function prepareBreadcrumbs($params, $url = ''){$breadcrumbs = parent::prepareBreadcrumbs($params,$url);if (empty($breadcrumbs)) return $breadcrumbs;$columns = $this->_getColumnsNameIds();$REQUESTURIPATH=Sitebill::getClearRequestURI(); // Строка без GET параметров с '?u_lesa=1'/* echo "<pre>";global $smarty;var_dump($this->getRequestValue("seo-router"));echo "</pre>";die('');*/$breadcrumbs = explode(" / ",$breadcrumbs); // Строку назад в массивfor($i=0; $i < sizeof($breadcrumbs)-1; $i++){$breadcrumbs[$i] = $this->_makeRDF($breadcrumbs[$i]);}$r_uri = $_SERVER['REQUEST_URI']; // Полная строка с GET параметрамиif($REQUESTURIPATH != "index.php" && preg_match("#\?(\w+)=#",$r_uri,$matches)){if(isset($columns[$matches[1]])) {$breadcrumbs[sizeof($breadcrumbs)-1] = $this->_makeRDF($breadcrumbs[sizeof($breadcrumbs)-1]);$breadcrumbs[] = "".$columns[$matches[1]]["title"]."";}} else {};$breadcrumbs = implode(" / ", $breadcrumbs); // Обработанный массив назад в строку "крошек"//$this->template->assert('meta_title', $_SERVER['REQUEST_URI']);return $breadcrumbs;}/*** Возвращает массив со всеми колонками модели data** @return array**/private function _getColumnsNameIds(){$DBC=DBC::getInstance();$columns_ids=array();$query='SELECT columns_id, name, title FROM '.DB_PREFIX.'_columns WHERE table_id=(SELECT table_id FROM '.DB_PREFIX.'_table WHERE `name`=\'data\' LIMIT 1)';$stmt=$DBC->query($query);if($stmt){while($ar=$DBC->fetch($stmt)){$columns_ids[$ar['name']]["id"]=$ar['columns_id'];$columns_ids[$ar['name']]["title"]=$ar['title'];}}return $columns_ids;}private function _makeRDF($breadcrumb) {$breadcrumb = "<span typeof=\"v:Breadcrumb\">".str_replace("<a ","<a property=\"v:title\" rel=\"v:url\"",$breadcrumb)."</span>";return $breadcrumb;}} Вот еще "сырой" код.
    Фишка в том, что добавляются seo теги в "крошки". Урл обрабатываются приложением (уже написал).
    Т.е. под любой параметр фильтра, например, checkbox u_lesa, можно описать для пары категория+параметр фильтра
    - свой ЧПУ
    - свои мета сео плюшки
    Хотелось-бы ограничиться приложением, но сейчас та часть, которая обрабатывает ЧПУ в приложении, а прописание всяких
    meta_xxxx в гриде
    Вот скрины приложения
    https://yadi.sk/i/w6p67-eiiu7Eb
    https://yadi.sk/i/Fd5HlI-piu7Gc
  9. Like
    mmkulikov получил репутацию от XTRO в Иерархия   
    Обращаюсь к разработчикам.
    Не могли бы вы "набросать" иерархию объектов(классов) в цмс и глобальных переменных?
    Чтобы не гадать как "это" или "то" работает при разработке.
    В какой последовательности идет запуск? Не все, но самое важное, что за чем запустится...
  10. Like
    mmkulikov изменил репутацию abushyk в Переменные в main.php   
    Препарируем, значит?)))

     

    $special_items2 - практически всегда дублирует $special_items2

    $meta_title - мета заголовок. Для многих приложений, в том числе и карточек объектов, на не самых древних шаблонах уходит в хидере в тайтл браузера и, только при его отсутствии, его место занимает $title

    $title - любым образом сформированный заголовок страницы

    $smarty.session.current_user_name - фамилиё или другой текст из поля fio профиля авторизированного юзера

    $smarty.session.current_user_group_name - системное имя группы авторизированного юзера (не Риелтор, а realtor)

    $smarty.session.current_user_group_id - ID группы авторизированного юзера

  11. Like
    mmkulikov получил репутацию от abushyk в Количество объявлений в категории   
    Нашел решение. Может кому еще сгодится
    /*** Получение количества объявлений* @param int $catID - ID категории (необ.)* @param date $start - Дата начала публикаций (необ.)* @param date $end - Дата конца публикаций (необ.)** @return array $ret****/ private static function getAdvtCount($catID=false,$start=false,$end=false) { $ret = array(); $where = ""; $table = "`".DB_PREFIX."_data`";$DBC=DBC::getInstance(); if (false !== $catID) $where = " AND $table.`topic_id` = $catID"; if (false !== $start && false === $end ) $where .= " AND $table.`date_added` <= '$start'"; if (false === $start && false !== $end ) $where .= " AND $table.`date_added` >= '$end'"; if (false !== $start && false !== $end ) $where .= " AND ($table.`date_added` <= '$start' AND $table.`date_added` >= '$end')"; $query = "SELECT count(*) AS total FROM $table WHERE $table.`active`=1".$where; $result = $DBC->query($query); if ($result) {while($r = $DBC->fetch($result)){$ret[] = $r; } } return $ret; }
  12. Like
    mmkulikov изменил репутацию abushyk в Сортировка по новым полям   
    В этом то и сложность, что по сложности не отличается))
     
    В гридменеджере есть функция определяющая алгоритм сортировки prepareSortOrder
     
    Суть добавления собственных сортировок состоит в том, что бы локализовать в шаблон построитель сеток, сделать его наследником базового и в своем локальном переопределить функционал упомянутой функции.
     
    По пунктам:
    1. Берем /apps/system/lib/frontend/grid/grid_constructor.php (файл А)
    2. Копируем его в /template/frontend/agency/main/grid/local_grid_constructor.php (файл Б)
    3. Внутри него удаляем все и заполняем
    class Local_Grid_Constructor extends Grid_Constructor {} Если аналогичный файл уже есть, то пункты 1-3 не нужно делать.
     
    4. Из файла А копируем функцию 
    protected function prepareSortOrder($params, $random = false, $premium=false){...} полностью как есть внутрь файла Б между class Local_Grid_Constructor extends Grid_Constructor { и }
    5. По аналогии вводим свою обработку параметра $params['order']
     
    Обработчик готов. Осталось сообщить нашему движку, что мы работаем с новым гриддером.
     
    Есть два пути:
    1. Через файл настроек /settings.ini.php куда следует добавить три строки (троеточие добавлять не нужно)
    ...[GridConstructor]path='/main/grid/local_grid_constructor.php'name='Local_Grid_Constructor' ПС. Этот метод не будет работать на версиях ниже 3.0.24
      2. Через файл шаблона. Для чего в /template/frontend/realia_complex/main/main.php внутри main() после global $__site_title, $folder, $smarty; указывается локальный обработчик require SITEBILL_DOCUMENT_ROOT.'/template/frontend/'.$this->getConfigValue('theme').'/main/grid/local_grid_constructor.php';$this->_setGridConstructor(new Local_Grid_Constructor()); или, можно разместить их в конструкторе контроллера шаблона.
  13. Like
    mmkulikov получил репутацию от Дмитрий Кондин в Количество объявлений в категории   
    Нашел решение. Может кому еще сгодится
    /*** Получение количества объявлений* @param int $catID - ID категории (необ.)* @param date $start - Дата начала публикаций (необ.)* @param date $end - Дата конца публикаций (необ.)** @return array $ret****/ private static function getAdvtCount($catID=false,$start=false,$end=false) { $ret = array(); $where = ""; $table = "`".DB_PREFIX."_data`";$DBC=DBC::getInstance(); if (false !== $catID) $where = " AND $table.`topic_id` = $catID"; if (false !== $start && false === $end ) $where .= " AND $table.`date_added` <= '$start'"; if (false === $start && false !== $end ) $where .= " AND $table.`date_added` >= '$end'"; if (false !== $start && false !== $end ) $where .= " AND ($table.`date_added` <= '$start' AND $table.`date_added` >= '$end')"; $query = "SELECT count(*) AS total FROM $table WHERE $table.`active`=1".$where; $result = $DBC->query($query); if ($result) {while($r = $DBC->fetch($result)){$ret[] = $r; } } return $ret; }
  14. Like
    mmkulikov получил репутацию от h-i в Количество объявлений в категории   
    Нашел решение. Может кому еще сгодится
    /*** Получение количества объявлений* @param int $catID - ID категории (необ.)* @param date $start - Дата начала публикаций (необ.)* @param date $end - Дата конца публикаций (необ.)** @return array $ret****/ private static function getAdvtCount($catID=false,$start=false,$end=false) { $ret = array(); $where = ""; $table = "`".DB_PREFIX."_data`";$DBC=DBC::getInstance(); if (false !== $catID) $where = " AND $table.`topic_id` = $catID"; if (false !== $start && false === $end ) $where .= " AND $table.`date_added` <= '$start'"; if (false === $start && false !== $end ) $where .= " AND $table.`date_added` >= '$end'"; if (false !== $start && false !== $end ) $where .= " AND ($table.`date_added` <= '$start' AND $table.`date_added` >= '$end')"; $query = "SELECT count(*) AS total FROM $table WHERE $table.`active`=1".$where; $result = $DBC->query($query); if ($result) {while($r = $DBC->fetch($result)){$ret[] = $r; } } return $ret; }
  15. Like
    mmkulikov получил репутацию от Дмитрий Кондин в Переменные в main.php   
    Если администрация не против - предлагаю здесь собирать информацию о доступных переменных для шаблона.
     
    Переменные:
    Просмотреть содержимое любого массива, например, {$special_items2|@print_r}
     
    $estate_folder - корневая папка сайта
    $current_theme_name - имя используемой темы
    $smarty.session.user_id - если пусто, значит пользователь не залогинен.
    Лучше проверять как {if intval($smarty.session.user_id)!=0}Значит авторизирован{/if}
    $main_file_tpl - имя подгружаемого файла шаблона для отображения, например, realty_grid.tpl - шаблон вывода списка категории недвижимости
    $main - в отличии от предыдущего - это готовый контент для вывода (готовится в контроллере или приложении)
    $special_items2 - массив, содержащий список спецпредложений(VIP)
    $grid_items - массив обычных объявлений
    $news_list_column - массив списка новостей
    $apps_page_view - если переменная определена, значит идет просмотр статической страницы
    $meta_keywords - keywords
    $meta_description - description
    $breadcrumbs - "хлебные крошки"
    $map_type - google, yandex
    $is_account - указывает на то, что мы сейчас в личном кабинете (1/0)
    $_layout - текущий макет, по умолчанию (как правило) layout_basic.tpl (используется, например, в main.tpl для подгрузки основного файла шаблона)
  16. Like
    mmkulikov получил репутацию от h-i в Переменные в main.php   
    Если администрация не против - предлагаю здесь собирать информацию о доступных переменных для шаблона.
     
    Переменные:
    Просмотреть содержимое любого массива, например, {$special_items2|@print_r}
     
    $estate_folder - корневая папка сайта
    $current_theme_name - имя используемой темы
    $smarty.session.user_id - если пусто, значит пользователь не залогинен.
    Лучше проверять как {if intval($smarty.session.user_id)!=0}Значит авторизирован{/if}
    $main_file_tpl - имя подгружаемого файла шаблона для отображения, например, realty_grid.tpl - шаблон вывода списка категории недвижимости
    $main - в отличии от предыдущего - это готовый контент для вывода (готовится в контроллере или приложении)
    $special_items2 - массив, содержащий список спецпредложений(VIP)
    $grid_items - массив обычных объявлений
    $news_list_column - массив списка новостей
    $apps_page_view - если переменная определена, значит идет просмотр статической страницы
    $meta_keywords - keywords
    $meta_description - description
    $breadcrumbs - "хлебные крошки"
    $map_type - google, yandex
    $is_account - указывает на то, что мы сейчас в личном кабинете (1/0)
    $_layout - текущий макет, по умолчанию (как правило) layout_basic.tpl (используется, например, в main.tpl для подгрузки основного файла шаблона)