| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Libraries > Smarty исходный код шаблона |
| Автор: StachelDraht 28.9.2009, 00:50 |
| Привет! Подсткажите пожалуйста, как получить исходный код (source) шаблона? В smarty есть какая-нибудь функция или надо пользоваться file_get_contents()? Спасибо! |
| Автор: Ипатьев 28.9.2009, 08:22 |
| Для чего это нужно? |
| Автор: StachelDraht 28.9.2009, 11:47 | ||
| Хочу более менее понять этот smarty На данный момент хочу сделать систему словаря на сайте. Т.е. в шаблоне пишем {$dog} а во время компиляции слово переменная должна быть замена на слово на языке который выбран на сайте. но тогда по идее надо было бы делать что то типа {$word_dog} что бы можно было искать в шаблоне все переменные начинающие на word а дальше уже регулярными выражениями... Потом поиск в таблице и вывод.
Вот наверно для этого Или я опять не в ту степь думаю? |
| Автор: capitan 28.9.2009, 15:10 |
| если я правильно понял, то http://www.smarty.net/manual/ru/api.fetch.php |
| Автор: Ипатьев 28.9.2009, 15:21 |
| Разумеется, не в ту. Это, вообще, редкое извращение. Испечь булочки с изюмом, выковырять изюм и напихать кураги. Почему нельзя нужное слово присвоить переменной заранее, еще до того, как она будет выведена в шаблон? |
| Автор: StachelDraht 28.9.2009, 15:44 |
| нет, не много не так если брать не конкретный сайт, а делать универсальную cms с многоязычной поддержкой есть таблица в базе с полями id, eng, ger, rus, fin... и смысл то заключается в том, что бы не присваивать в каком нибудь там index.php нужное слово переменной, а просто в шаблоне писать к примеру {$word_dog} из чего было бы понятно что перменную которая начинается на word обробатывать как слово которое должно выводится из словаря (словарь - эта самая таблица в базе) |
| Автор: capitan 28.9.2009, 15:50 | ||
| StachelDraht, а не проще кидать в сессию версию сайта и делать выборку из нужного поля в базе, а не извращаться со Smarty? Тем более структура базы это позволяет сделать. Чтобы {$word_dog} вывести, эту переменную все равно придется создать
|
| Автор: Ипатьев 28.9.2009, 16:03 |
| Автор, судя по всему, изобретает gettext. Речь о языковых константах, которые, обычно, прописаны в теле шаблона. Кстати, как дружить смарти с геттекстом, я не знаю. Надо подумать capitan, в сессию язык писать нельзя. идентификатор языка должен присутствовать в адресной строке, в любой ее части |
| Автор: capitan 28.9.2009, 16:17 |
| Ипатьев, Чтобы сдружить Gettext и Smarty как вариант использовать фильтр. http://www.phpinsider.com/smarty-forum/viewtopic.php?p=42156&sid=c92c6f30428ac4b64714d64b51f0bc11#42156 По поводу "идентификатор языка должен присутствовать в адресной строке, в любой ее части" не согласен. Может потеряться, например при посте или юзер уберет все из адресной строки, оставив только домен. Обычно для локализации используют иконки,- нажал и получил нужную локализацию. Или использовать под каждую локализацию поддомен. Тогда точно не потеряется. Хотя встречал сайты, где индефикатор есть в строке. Как пример все тот же http://php.net/ P.S. вроде похожая тема http://forum.vingrad.ru/forum/topic-233263.html |
| Автор: Ипатьев 28.9.2009, 16:26 |
| Домен - это тоже часть адресной строки. Доводы про "юзер сотрет" всегда очень смешные. точно так же он может вообще браузер закрыть. Или другой домен набрать. Передача языка в адресе - это аксиома. Меня удивляет, что по таким очевидным вещам постоянно возникают вопросы. Одному надо 2 дня рассказывать, как SQL запросы составлять. Другому - как к файлам обращаться. Третьему на существование поисковиков глаза открывать. И ведь, что самое странное - не тем, кто вопросы задает, а тем, кто отвечает. register_prefilter - это, видимо, то, что автор искал. |
| Автор: sTa1kEr 28.9.2009, 16:28 | ||
Только тут есть одна проблема, xgettext не знает этого синтаксиса, по этому нужно еще и парсер писать. |
| Автор: capitan 28.9.2009, 16:31 | ||
| обычно я отвечаю так http://lmgtfy.com/?q=smarty+gettext Ипатьев, оказывается со Smarty идет block-плагин (block.t.php) для работы с gettext. В шаблоне текст под локализацию выглядит так:
|
| Автор: bars80080 28.9.2009, 17:29 |
почему? мне вот совершенно не очевидно. если знаете секрет, поделитесь пожалуйста |
| Автор: capitan 28.9.2009, 17:38 |
| bars80080, У каждого своя позиция. Я например в сессии локализацию держу. И буду держать. |
| Автор: bars80080 28.9.2009, 17:49 |
| нет, ну зачем так резко. если человек говорит что-то, то под его мнением есть какое-то основание. у Ипатьева вроде основания весомые, но я ещё стал адептом его секты и на веру воспринимать не намерян. вот и хочется узнать во всяком случае я не знаю, где как не в куках или данных в БД (если уже зарегестрированный) хранить язык, выбранный пользователем, если он заходит на сайт. адрес входа ведь в большинстве случаев свободен от всяких переменных |
| Автор: solenko 28.9.2009, 17:58 | ||||
ответ:
Да, храниту в куках нужно, но дополнять все ссылки на сайте идеттификатором языка тоже нужно, чтобы поисковики, которые не будут вам передавать куки могли проиндексировать сайт на всех языках, а не только на дефолтном |
| Автор: StachelDraht 28.9.2009, 18:27 | ||||
| странно, что не вопрос то горячая тема) может я опять неверно изъяснился и меня не поняли вот готовый вариант того что я хочу но без использования smarty
единственное в запросе может быть ошибка
|
| Автор: Ипатьев 28.9.2009, 18:58 |
| И сколько таких запросов на странице будет? |
| Автор: bars80080 28.9.2009, 19:01 | ||
ну вот, по-русски, вменяемо и для детей |
| Автор: StachelDraht 28.9.2009, 19:01 |
| ну скажем 20 плохо? |
| Автор: Ипатьев 28.9.2009, 19:18 |
| всего 20 слов на странице? Что ж это за сайт такой, немногословный? |
| Автор: StachelDraht 28.9.2009, 19:43 |
| не все же будет выводиться через так называемый словарь, только какие то определенные слова которые будут вписываться в сам шаблон, остальные вещи модулями, к примеру модуль текстовой части который тоже будет на всех языках |
| Автор: Ипатьев 28.9.2009, 21:25 |
| ну, этот модуль ведь тоже будет выполнять запросы? |
| Автор: StachelDraht 29.9.2009, 10:53 | ||
будет но я все таки хотел бы найти какое то решение |
| Автор: Ипатьев 29.9.2009, 13:42 |
| Решение написано выше. 1. Переводить не отдельные слова, а фразы 2. Использовать готовое решение - gettext, а не изобретать свое. |
| Автор: StachelDraht 29.9.2009, 14:21 |
| Ипатьев, понял, спасибо! |