Jump to content

Recommended Posts

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

 

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

 

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

Link to post
Share on other sites
  • 2 years later...

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

 

 

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

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

Edited by unrealock
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...