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

Код шаблона tpl в тексте страницы


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

На форуме неоднократно возникал вопрос о том, как реализовать код шаблона tpl в тексте страницы.

И вот недавно при обсуждении темы
http://forum.simplacms.ru/topic/10939-виджеты-для-simpla/
пришла идея легкого простого решения:

1. В simpla/PageAdmin.php сохранять текст страницы в файл шаблона строкой, для чего
после

				if(empty($page->id))
				{
	  				$page->id = $this->pages->add_page($page);
	  				$page = $this->pages->get_page($page->id);
	  				$this->design->assign('message_success', 'added');
  	    		}
  	    		else
  	    		{
  	    			$this->pages->update_page($page->id, $page);
	  				$page = $this->pages->get_page($page->id);
	  				$this->design->assign('message_success', 'updated');
   	    		}
			}

вставить

file_put_contents('design/'.$this->settings->theme.'/html/page_'.$page->id.'.tpl', $page->body);

 

2. В view/PageView.php обрабатывать текст как шаблон:

после

         $page = $this->pages->get_page($url);

вставить

        $page->body = $this->design->fetch('page_'.$page->id.'.tpl');

 

После этого тексты страниц работают как шаблоны и в них обрабатываются теги Smarty.

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

Какие-либо нюансы этого мероприятия имеются? К примеру для сео это плохо или безопасность храмать начинает? Или другие неприятные моменты?

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

Какие-либо нюансы этого мероприятия имеются? К примеру для сео это плохо или безопасность храмать начинает? Или другие неприятные моменты?

 

для поисковика это будет обычная страница.

 

если пользователь решит вбить туда какой-то js без экранирования выдаст ошибку, если пользователь решит ввести туда {fwe} например, выдаст ошибку.

херова туча шаблонов страниц в папке шаблонов, для каждой страницы свой файл

 

для главной такая фигня работать не будет. и если вы туда добавите свои смарти-теги оно выведет их обычным текстом.

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

если пользователь решит вбить туда какой-то js без экранирования выдаст ошибку, если пользователь решит ввести туда {fwe} например, выдаст ошибку.

 

Что хотите этим сказать? Если пользователь вставляет код Smarty с ошибкой, что ему должно, по-Вашему, выдавать, если не ошибку?

 

для главной такая фигня работать не будет. и если вы туда добавите свои смарти-теги оно выведет их обычным текстом.

 

Спасибо за замечание.  Чтобы заработало на главной, надо еще

 

3. в  view/MainView.php вставить

$this->page->body = $this->design->fetch('page_'.$this->page->id.'.tpl');

 

 

Иногда бывают ошибки, если вводить код Smarty в редакторе TinyMice. Причина в том, что TinyMice иногда  делает свои преобразования в тексте. Надо либо редактировать обычным текстовым полем, либо менять что-то в настройках TinyMice.

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

Что хотите этим сказать? Если пользователь вставляет код Smarty с ошибкой, что ему должно, по-Вашему, выдавать, если не ошибку?

 

хочу сказать что это может быть не обязательно смарти тег. человек может использовать {..} в оформлении в редакторе. просто текст. и будет чесать репу почему не работает.

 

 

видимо тогда надо еще и View.php исправить, чтобы выводило в фидбеке и в других модулях где страница выбирается.

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

4. в  view/View.php

после

            $this->page = $this->pages->get_page((string)$page_url);

вставить

            $this->page->body = $this->design->fetch('page_'.$this->page->id.'.tpl');
 

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

хочу сказать что это может быть не обязательно смарти тег. человек может использовать {..} в оформлении в редакторе. просто текст. и будет чесать репу почему не работает.

Конечно, может. Так эта же проблема есть и при редактировании обычного Smarty-шаблона, как же без этого?

Для решения этой неоднозначности и существует {literal}...{/literal}.

 

Возник вопрос.

 

Если хочется в шаблоне написать {tratata}, это можно сделать как {literal}{tratata}{/literal}. Тут все просто и понятно.

А как быть, если захочется кому написать в шаблоне так '{literal}' ?

Вот так {literal}{literal}{/literal} даст ошибку.

 

Я знаю способ не очень красивый: {literal}{lite{/literal}{literal}ral}{/literal}.

И если в тексте много подобных элементов, то вставлять таким образом тяжеловато.

Знает кто способ поуниверсальнее?

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

Есть одна проблема - если нет шаблона страницы, то возникает ошибка. И отсюда:

- ранее созданные страницы нужно заново пере сохранить ( чтобы создался шаблон),

- грузится дольше,

и самое неприятное теперь нет страницы "404" ошибки, при любой несуществующей страницы - вылезает "500"

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

- ранее созданные страницы нужно заново пере сохранить ( чтобы создался шаблон),

 

Это вполне естественно...

Если не нравится, то можно в view/PageView.php  действовать так:

        if($page->id && file_exists('design/'.$this->settings->theme.'/html/'.'page_'.$page->id.'.tpl'))

        $page->body = $this->design->fetch('page_'.$page->id.'.tpl');

 

 

- грузится дольше,

 

Это тоже вполне естественно, поскольку добавились некоторые действия...

Если у Вас грузится ЗАМЕТНО дольше, то, скорее всего, это проблемы быстродействия хостинга или объемного контента, который вставляете...

 

и самое неприятное теперь нет страницы "404" ошибки, при любой несуществующей страницы - вылезает "500"

 

У меня эта страницы работает, как и должна,  и при несуществующем адресе показывается именно она...

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

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

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

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

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

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

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

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

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

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