Перейти к содержанию
Официальный форум поддержки Simpla

Рекомендуемые сообщения

Здравствуйте. Может кому пригодится. 

 

Добавляем таблицу с категориями:

 

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

Ссылка на сообщение
Поделиться на другие сайты
  • 2 года спустя...

Как вывести что за категория на странице?

 

 

{foreach $blog_categories as $bc}
<li><a href="blog/{$bc->url}/">{$bc->name}</a></li>
{/foreach}

Выводит все категории

Изменено пользователем unrealock
Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...