jonny008 Опубликовано 9 октября, 2017 Жалоба Поделиться Опубликовано 9 октября, 2017 Здравствуйте. Может кому пригодится. Добавляем таблицу с категориями: CREATE TABLE s_blog_categories ( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(255) NOT NULL, url VARCHAR(255) NOT NULL, meta_title VARCHAR(500) NOT NULL, meta_keywords VARCHAR(500) NOT NULL, meta_description VARCHAR(500) NOT NULL, annotation TEXT NOT NULL, PRIMARY KEY (id) ); Добавляем колонку в таблицу блога с категорией: ALTER TABLE s_blog ADD COLUMN `category` INT(11) NOT NULL AFTER `id` В файле api/Simpla.php в массив $classes добавим:'blog_categories' => 'BlogCategories'Добавим сам класс api/BlogCategories.php (во вложении)Теперь добавим фильтры в api/Blog.phpПосле: public function get_posts($filter = array()) { // По умолчанию $limit = 1000; $page = 1; $post_id_filter = ''; Вставить: $post_category_filter = ''; Тоже самое делаем в функции public function count_posts В функциях get_posts и count_posts if(!empty($filter['category'])) $post_category_filter = $this->db->placehold('INNER JOIN __blog_categories bc ON bc.id = b.category AND bc.url = ?', (string)$filter['category']); Далее запрос: $query = $this->db->placehold("SELECT b.id, b.url, b.name, b.annotation, b.text, b.meta_title, b.meta_keywords, b.meta_description, b.visible, b.date FROM __blog b WHERE 1 $post_id_filter $visible_filter $keyword_filter ORDER BY date DESC, id DESC $sql_limit"); Меняем на: $query = $this->db->placehold("SELECT b.id, b.url, b.name, b.annotation, b.text, b.meta_title, b.meta_keywords, b.meta_description, b.visible, b.date FROM __blog AS b $post_category_filter WHERE 1 $post_id_filter $visible_filter $keyword_filter ORDER BY date DESC, id DESC $sql_limit"); Так же, не забываем добавить поле b.category в выборку. Добавим фильтр в контроллер, а так же вывод категорий view/BlogView.php В функцию fetch_blog после: // Выбираем только видимые посты $filter['visible'] = 1; $category = $this->request->get('category', 'string'); if($category){ $filter['category'] = $category; $cat = $this->blog_categories->get_category($category); $this->design->assign('cat', $cat); } $blog_categories = $this->blog_categories->get_categories(); $this->design->assign('blog_categories', $blog_categories); $cat = $this->blog_categories->get_category($category); $this->design->assign('category', $cat); В функцию fetch_post $blog_categories = $this->blog_categories->get_categories(); $this->design->assign('blog_categories', $blog_categories); Удаляем строчки: if(empty($posts)) return false; Внизу меняем метатеги на: if($this->page) { $this->design->assign('pagetitle', $this->page->name); $this->design->assign('meta_title', $this->page->meta_title); $this->design->assign('meta_keywords', $this->page->meta_keywords); $this->design->assign('meta_description', $this->page->meta_description); $this->design->assign('canonical', '/blog'); } if($category){ $this->design->assign('pagetitle', $cat->name); $this->design->assign('meta_title', $cat->meta_title); $this->design->assign('meta_keywords', $cat->meta_keywords); $this->design->assign('meta_description', $cat->meta_description); $this->design->assign('canonical', '/blog-categories/'.$cat->url.'/'); } Дополняем simpla/BlogAdmin.php После: // Показать все страницы сразу if($this->request->get('page') == 'all') $filter['limit'] = $posts_count; Вставить: $category = $this->request->get('category', 'string'); $filter['category'] = $category; $blog_categories = $this->blog_categories->get_categories(); $this->design->assign('blog_categories', $blog_categories); $cat = $this->blog_categories->get_category($category); $this->design->assign('category', $cat); В шаблоне simpla/design/html/blog.tpl вставить: <div id="right_menu" > <ul> <li {if !$cat}class="active"{/if}><a href="index.php?module=BlogAdmin"><i class="fa fa-angle-right"></i>Все новости</a></li> {foreach $blog_categories as $bc} <li {if $bc->id == $cat->id}class="selected"{/if}><a href="index.php?module=BlogAdmin&category={$bc->url}"><i class="fa fa-angle-right"></i>{$bc->name}</a></li> {/foreach} </ul> </div> Добавляем новые классы: simpla/BlogCategoriesAdmin.php и simpla/BlogCategoryAdmin.php (во вложении)Дописываем список прав в simpla/IndexAdmin.php $modules_permissions = array( ... 'BlogCategoriesAdmin' => 'blog', 'BlogCategoryAdmin' => 'blog', ... ); Создаем файлы шаблона blog_categories.tpl и blog_category.tpl (во вложении)Добавляем селект категории на страницу поста simpla/design/html/post.tpl <li> <label class=property>Категория</label> <select name="category"> <option value="">Не выбрана</option> {foreach $categories as $category} <option value="{$category->id}" {if $post->category == $category->id}selected{/if}>{$category->name}</option> {/foreach} </select> </li> Теперь добавим список категорий в контроллере simpla/PostAdmin.php, а так же дополним обработку пост-запроса. После: $post->date = date('Y-m-d', strtotime($this->request->post('date'))); Добавим: $post->category = $this->request->post('category', 'integer'); Далее, перед: return $this->design->fetch('post.tpl'); Вставить: $categories = $this->blog_categories->get_categories(); $this->design->assign('categories', $categories); В вашем шаблоне (blog.tpl) Вставляем: {foreach $blog_categories as $bc} <li><a href="blog/{$bc->url}/">{$bc->name}</a></li> {/foreach} В htaccess добавляем: RewriteRule ^blog-categories/([^/]+)/?/$ index.php?module=BlogView&category=$1 [L,QSA] blog-categories.zip Цитата Ссылка на сообщение Поделиться на другие сайты
shooroop Опубликовано 9 октября, 2017 Жалоба Поделиться Опубликовано 9 октября, 2017 Как вывести категории на главной страницы? Цитата Ссылка на сообщение Поделиться на другие сайты
jonny008 Опубликовано 10 октября, 2017 Автор Жалоба Поделиться Опубликовано 10 октября, 2017 Как вывести категории на главной страницы?Добавить функцию get_blog_categories в view/View.php Цитата Ссылка на сообщение Поделиться на другие сайты
unrealock Опубликовано 28 августа, 2020 Жалоба Поделиться Опубликовано 28 августа, 2020 (изменено) Как вывести что за категория на странице? {foreach $blog_categories as $bc}<li><a href="blog/{$bc->url}/">{$bc->name}</a></li>{/foreach}Выводит все категории Изменено 28 августа, 2020 пользователем unrealock Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.