Jump to content

Recommended Posts

Есть блог, на него выводится та информация, которая указывается в blog.tpl.
Как реализовать такую же штуку, только например с названием gallery, что бы можно было вывести страницу через код? В общем подобие страницы блога.

Link to post
Share on other sites

дублировать таблицу s_blog

файлы:

api/Blog.php

view/BlogView.php

design/theme/blog.tpl

design/theme/post.tpl

simpla/BlogAdmin.php

simpla/PostAdmin.php

simpla/design/html/blog.tpl

simpla/design/html/post.tpl

 

дублировать

в api/Simpla.php клас блога

в api/Managers.php права блога

в .htacces запись для копии блога.

Link to post
Share on other sites

Kosjak76 и mishanya! 

Ребята, и не стыдно Вам такие советы давать?

 

Дублировать кучу кода на каждый чих - это же и нерационально и  непрофессионально...

 

Куда проще так:

1. В админ на странице поста блога завести новое поле - Группа блога.

2. А дальше как обычно по адресу /blog выводить одну группу, по адресу /gallery - вторую. Потребуются маленькие изменения в .htaccess, view/BlogView.php, api/Blog.php.

Причем так легко можно и третью группу завести, и четвертую...

 

А у Вас - на третью группу опять дублировать горы кода?

Link to post
Share on other sites

Да, согласен, так действительно рациональнее.

Но в качестве обучения и для лучшего понимания структуры движка - такой опыт совсем не повредит.

Link to post
Share on other sites

Спасибо друзья))) Получилось) 

Создал новую страницу в админке с адресом gallery

В .htaccess прописал 
 

# Галерея
RewriteRule ^gallery/([^/]+)/?$	index.php?module=GalleryView&url=$1 [L,QSA]
RewriteRule ^gallery/?$	index.php?module=GalleryView [L,QSA]

 

Создал новый документ GalleryView
И в нём написал
 

<?PHP

require_once('View.php');

class GalleryView extends View
{
	
	public function fetch()
	{
		// Иначе выводим ленту блога
		return $this->fetch_gallery();
	}

	// Отображение списка постов
	private function fetch_gallery()
	{
		$folder_gallery = "design/sushishop/images/menu/";
		$gallery = $this->check_type_img(array_diff(scandir($folder_gallery), array('..', '.')), $folder_gallery); // считывание всех файлов из директории
		
		$this->design->assign('list', $gallery);

		// Метатеги
		if($this->page)
		{
			$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);
		}
		
		$body = $this->design->fetch('gallery.tpl');
		
		return $body;
	}
	
	private function check_type_img($array, $path) {
		$allowed_extentions = array('png', 'jpg', 'jpeg');
		$i = 0;
		
		foreach ($array AS $val) {
			if(in_array(strtolower(pathinfo($val, PATHINFO_EXTENSION)), $allowed_extentions)) {
				$clear_array[$i] = iconv('cp1251', 'UTF-8', $path.$val);
				$i++;
			}
		}
		return $clear_array;
	}
}

Эта строка отвечает за название шаблона в design и конечная папка откуда выводятся картинки:
 

$folder_gallery = "design/sushishop/images/menu/";


И создал gallery.tpl с кодом 
 


{foreach $list as $pic}
<img src="{$pic}">
{/foreach}


Получилась такая своеобразная галерея с выводом картинок =)
Может кому нибудь пригодится.

Ну и буду рад услышать комментарии и отзывы о данном примере)

Edited by RomanMedvedev
Link to post
Share on other sites

А если в GalleryView вместо 

                $folder_gallery = "design/sushishop/images/menu/";
		$gallery = $this->check_type_img(array_diff(scandir($folder_gallery), array('..', '.')), $folder_gallery); // считывание всех файлов из директории
		
		$this->design->assign('list', $gallery);
		

написать так

                $folder_gallery = "design/sushishop/images/menu/";
		$gallery = $this->check_type_img(array_diff(scandir($folder_gallery), array('..', '.')), $folder_gallery); // считывание всех файлов из директории
		
		$this->design->assign('list', $gallery);
		
		$folder_gallery = "design/sushishop/images/menu2/";
		$gallery = $this->check_type_img(array_diff(scandir($folder_gallery), array('..', '.')), $folder_gallery); // считывание всех файлов из директории
		
		$this->design->assign('list2', $gallery);

и в gallery.tpl написать например 
 

{foreach $list as $pic}
<img src="{$pic}">
{/foreach}
<hr>
{foreach $list2 as $pic}
<img src="{$pic}">
{/foreach}

то будет выводится 2 галереи) Останется дело только за дизайном)

Edited by RomanMedvedev
Link to post
Share on other sites
  • 3 months later...

дублировать таблицу s_blog

файлы:

api/Blog.php

view/BlogView.php

design/theme/blog.tpl

design/theme/post.tpl

simpla/BlogAdmin.php

simpla/PostAdmin.php

simpla/design/html/blog.tpl

simpla/design/html/post.tpl

 

дублировать

в api/Simpla.php клас блога

в api/Managers.php права блога

в .htacces запись для копии блога.

Ну что то еще вы пропустили:

 

simpla/design/html/manager.tpl

и даже после этого "Permission denied"... Подскажите где капать?

Link to post
Share on other sites

simpla/IndexAdmin.php

точно, спасибо! Но, еще один косяк выплыл, я изменил в api/Blog.php класс с b. на e.

.........................
if(is_int($id))
			$where = $this->db->placehold(' WHERE e.id=? ', intval($id));
		else
			$where = $this->db->placehold(' WHERE e.url=? ', $id);
		
		$query = $this->db->placehold("SELECT e.id, e.url, e.name, e.annotation, e.annotation_tiny, e.text, e.meta_title,
		                               e.meta_keywords, e.meta_description, e.visible, e.date, e.thumb, e.image
		                               FROM __estate b $where LIMIT 1");
		if($this->db->query($query))
			return $this->db->result();
		else
			return false; ......................

и теперь, при клике на кнопку "Добавить запись" меня перебрасывает на товары((( а может дело и не в классах? 

Link to post
Share on other sites

точно, спасибо! Но, еще один косяк выплыл, я изменил в api/Blog.php класс с b. на e.

.........................
if(is_int($id))
			$where = $this->db->placehold(' WHERE e.id=? ', intval($id));
		else
			$where = $this->db->placehold(' WHERE e.url=? ', $id);
		
		$query = $this->db->placehold("SELECT e.id, e.url, e.name, e.annotation, e.annotation_tiny, e.text, e.meta_title,
		                               e.meta_keywords, e.meta_description, e.visible, e.date, e.thumb, e.image
		                               FROM __estate b $where LIMIT 1");
		if($this->db->query($query))
			return $this->db->result();
		else
			return false; ......................

и теперь, при клике на кнопку "Добавить запись" меня перебрасывает на товары((( а может дело и не в классах? 

 

тут забыли

__estate b

 

еще проверьте првильно ли классы названы (редактирование/добавления ). перебрасывает на страницу товаров как раз из-за этого. 

Edited by mishanya
Link to post
Share on other sites

тут забыли

__estate b

 

еще проверьте првильно ли классы названы (редактирование/добавления ). перебрасывает на страницу товаров как раз из-за этого. 

ох, вернул классы на исходные, изменил только Blog/blog на Estate/estate и Post/post на Estatepost/estatepost во всех файлах. Вроде бы уже перебрал все, но действительно, редактирование/добавление не работает, переброс на товары. И на "сайте страница не найдена". Не хочу ставить "Группу блогов"... клон блога, меня устраивает на все 100%, но что то я делаю не так(

Link to post
Share on other sites

ох, вернул классы на исходные, изменил только Blog/blog на Estate/estate и Post/post на Estatepost/estatepost во всех файлах. Вроде бы уже перебрал все, но действительно, редактирование/добавление не работает, переброс на товары. И на "сайте страница не найдена". Не хочу ставить "Группу блогов"... клон блога, меня устраивает на все 100%, но что то я делаю не так(

 

напишите в личку доступы, посмотрю 

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

Спасибо друзья))) Получилось) 

 

Создал новую страницу в админке с адресом gallery

 

В .htaccess прописал 

 

# Галерея
RewriteRule ^gallery/([^/]+)/?$	index.php?module=GalleryView&url=$1 [L,QSA]
RewriteRule ^gallery/?$	index.php?module=GalleryView [L,QSA]

 

Создал новый документ GalleryView

И в нём написал

 

<?PHP

require_once('View.php');

class GalleryView extends View
{
	
	public function fetch()
	{
		// Иначе выводим ленту блога
		return $this->fetch_gallery();
	}

	// Отображение списка постов
	private function fetch_gallery()
	{
		$folder_gallery = "design/sushishop/images/menu/";
		$gallery = $this->check_type_img(array_diff(scandir($folder_gallery), array('..', '.')), $folder_gallery); // считывание всех файлов из директории
		
		$this->design->assign('list', $gallery);

		// Метатеги
		if($this->page)
		{
			$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);
		}
		
		$body = $this->design->fetch('gallery.tpl');
		
		return $body;
	}
	
	private function check_type_img($array, $path) {
		$allowed_extentions = array('png', 'jpg', 'jpeg');
		$i = 0;
		
		foreach ($array AS $val) {
			if(in_array(strtolower(pathinfo($val, PATHINFO_EXTENSION)), $allowed_extentions)) {
				$clear_array[$i] = iconv('cp1251', 'UTF-8', $path.$val);
				$i++;
			}
		}
		return $clear_array;
	}
}

Эта строка отвечает за название шаблона в design и конечная папка откуда выводятся картинки:

 

$folder_gallery = "design/sushishop/images/menu/";

 

И создал gallery.tpl с кодом 

 


{foreach $list as $pic}
<img src="{$pic}">
{/foreach}

 

Получилась такая своеобразная галерея с выводом картинок =)

Может кому нибудь пригодится.

 

Ну и буду рад услышать комментарии и отзывы о данном примере)

У меня не работает

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...