Kors Опубликовано 18 января, 2016 Жалоба Поделиться Опубликовано 18 января, 2016 На форуме неоднократно возникал вопрос о том, как реализовать код шаблона 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. Цитата Ссылка на сообщение Поделиться на другие сайты
Asilis Опубликовано 25 июня, 2016 Жалоба Поделиться Опубликовано 25 июня, 2016 Какие-либо нюансы этого мероприятия имеются? К примеру для сео это плохо или безопасность храмать начинает? Или другие неприятные моменты? Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 27 июня, 2016 Жалоба Поделиться Опубликовано 27 июня, 2016 Какие-либо нюансы этого мероприятия имеются? К примеру для сео это плохо или безопасность храмать начинает? Или другие неприятные моменты? для поисковика это будет обычная страница. если пользователь решит вбить туда какой-то js без экранирования выдаст ошибку, если пользователь решит ввести туда {fwe} например, выдаст ошибку.херова туча шаблонов страниц в папке шаблонов, для каждой страницы свой файл для главной такая фигня работать не будет. и если вы туда добавите свои смарти-теги оно выведет их обычным текстом. Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 27 июня, 2016 Автор Жалоба Поделиться Опубликовано 27 июня, 2016 если пользователь решит вбить туда какой-то js без экранирования выдаст ошибку, если пользователь решит ввести туда {fwe} например, выдаст ошибку. Что хотите этим сказать? Если пользователь вставляет код Smarty с ошибкой, что ему должно, по-Вашему, выдавать, если не ошибку? для главной такая фигня работать не будет. и если вы туда добавите свои смарти-теги оно выведет их обычным текстом. Спасибо за замечание. Чтобы заработало на главной, надо еще 3. в view/MainView.php вставить$this->page->body = $this->design->fetch('page_'.$this->page->id.'.tpl'); Иногда бывают ошибки, если вводить код Smarty в редакторе TinyMice. Причина в том, что TinyMice иногда делает свои преобразования в тексте. Надо либо редактировать обычным текстовым полем, либо менять что-то в настройках TinyMice. Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 27 июня, 2016 Жалоба Поделиться Опубликовано 27 июня, 2016 Что хотите этим сказать? Если пользователь вставляет код Smarty с ошибкой, что ему должно, по-Вашему, выдавать, если не ошибку? хочу сказать что это может быть не обязательно смарти тег. человек может использовать {..} в оформлении в редакторе. просто текст. и будет чесать репу почему не работает. видимо тогда надо еще и View.php исправить, чтобы выводило в фидбеке и в других модулях где страница выбирается. Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 27 июня, 2016 Автор Жалоба Поделиться Опубликовано 27 июня, 2016 4. в view/View.phpпосле $this->page = $this->pages->get_page((string)$page_url);вставить $this->page->body = $this->design->fetch('page_'.$this->page->id.'.tpl'); Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 27 июня, 2016 Автор Жалоба Поделиться Опубликовано 27 июня, 2016 хочу сказать что это может быть не обязательно смарти тег. человек может использовать {..} в оформлении в редакторе. просто текст. и будет чесать репу почему не работает.Конечно, может. Так эта же проблема есть и при редактировании обычного Smarty-шаблона, как же без этого? Для решения этой неоднозначности и существует {literal}...{/literal}. Возник вопрос. Если хочется в шаблоне написать {tratata}, это можно сделать как {literal}{tratata}{/literal}. Тут все просто и понятно. А как быть, если захочется кому написать в шаблоне так '{literal}' ? Вот так {literal}{literal}{/literal} даст ошибку. Я знаю способ не очень красивый: {literal}{lite{/literal}{literal}ral}{/literal}. И если в тексте много подобных элементов, то вставлять таким образом тяжеловато. Знает кто способ поуниверсальнее? Цитата Ссылка на сообщение Поделиться на другие сайты
Viktt Опубликовано 19 июля, 2016 Жалоба Поделиться Опубликовано 19 июля, 2016 Есть одна проблема - если нет шаблона страницы, то возникает ошибка. И отсюда:- ранее созданные страницы нужно заново пере сохранить ( чтобы создался шаблон),- грузится дольше,и самое неприятное теперь нет страницы "404" ошибки, при любой несуществующей страницы - вылезает "500" Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 19 июля, 2016 Автор Жалоба Поделиться Опубликовано 19 июля, 2016 (изменено) - ранее созданные страницы нужно заново пере сохранить ( чтобы создался шаблон), Это вполне естественно...Если не нравится, то можно в 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" У меня эта страницы работает, как и должна, и при несуществующем адресе показывается именно она... Изменено 19 июля, 2016 пользователем Kors Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.