0 / 0 / 0
Регистрация: 18.01.2016
Сообщений: 20
1

PHP с ajax, или PHP и замена кода

05.03.2016, 15:21. Показов 892. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет, делаю себе не большой движок, для удобства редактирования своего лендинга.
Я использую шаблонизатор smarty, и решил сделать одну страницу, - это index.php, к которому подведён сам скрипт smarty, и в нём написано, где хранятся файлы шаблонов .tpl.

PHP
1
2
3
4
5
6
7
8
9
10
require_once 'engine/smarty/libs/Smarty.class.php';
 
$smarty = new Smarty;
 
$smarty->template_dir = 'template';
$smarty->compile_dir  = 'logs';
$smarty->config_dir   = 'configs';
$smarty->cache_dir    = 'cache';
 
$smarty->display('main.tpl');
Я хочу сделать так, чтобы при заходе на страницу отображался
PHP
1
$smarty->display('main.tpl');
Но допустим, есть у меня навигация, и что бы при нажатии допустим на кнопку портфолио, код
PHP
1
$smarty->display('main.tpl');
заменялся на
PHP
1
$smarty->display('portfolio.tpl');
.
Как это реализовать? (Что-то типо ajax)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.03.2016, 15:21
Ответы с готовыми решениями:

Замена запятой на точку PHP AJAX JS
Помогите поставить замену запятой на точку вот здесь, при вводе количества. С точкой всё ок. С...

Замена програмно куска кода в файле .php другим куском кода
Мне необходимо програмно заменить кусок кода в файле .php Есть файл .php, в котором надо заменить...

Ajax обновление маленького php кода
Здравствуйте. Есть страница сайта, на ней парсятся 2 таблички с другого сайта таким кодом: ...

PHP замена кода
Всем привет, создавал уже подобную тему, но ответа не получил. Можно ли в PHP Либо другим...

12
Заблокирован
05.03.2016, 17:05 2
Так все же у вас одна страница или несколько?

Сделайте трансляцию входного адреса в имя шаблона:
/ -> main
/portfolio -> portfolio
и т.п.

Добавлено через 2 минуты
Можно main.tpl переименовать в .tpl для простоты.
0
0 / 0 / 0
Регистрация: 18.01.2016
Сообщений: 20
05.03.2016, 17:07  [ТС] 3
Одна страница, index.php. Но к ней подключены шаблоны. Тип: main.tpl, info.tpl, portfolio.tpl.
Когда допустим нажимаю на кнопку в навигации: ПОРТФОЛИО, чтобы код
PHP
1
$smarty->display('main.tpl');
вызывающий шаблон main.tpl (то есть главная страница) заменялся на
PHP
1
$smarty->display('portfolio.tpl');
.
Читайте внимательно

Добавлено через 22 секунды
вы не по теме пишите. Прочитайте внимательно
0
Заблокирован
05.03.2016, 17:28 4
Цитата Сообщение от dimitrydn Посмотреть сообщение
Одна страница, index.php. Но к ней подключены шаблоны. Тип: main.tpl, info.tpl, portfolio.tpl.
Вы хотите, чтобы подключались разные шаблоны. Но пока-что можно подключить только один. Самый простой и правильный способ – использовать несколько страниц, работающих на базе одной точки входа, вашего index.php.

Цитата Сообщение от dimitrydn Посмотреть сообщение
Читайте внимательно
Добавлено через 22 секунды
вы не по теме пишите. Прочитайте внимательно
Ели вы не в состоянии вникнуть в то, что я пишу, это не означает, что я пишу не по теме.
0
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
05.03.2016, 17:29 5
Цитата Сообщение от dimitrydn Посмотреть сообщение
вы не по теме пишите. Прочитайте внимательно
Правильно вам пишут, только формулировка немного не та. Прямая связь между url и именем шаблона не удобна.

Реализуйте обычный mvc с роутером и будет счастье.
По поводу роутера:
Через htaccess перенаправляете все запросы в index.php. В нем считываете url и передаете управление соответствующему классу. А в классе уже указывается какой шаблон нужно показать.

А вообще используйте фреймворк, там уже все готово.
0
Заблокирован
05.03.2016, 17:35 6
tarasalk, здесь весь роутер – прогнать входной адрес по заранее подготовленному массиву для проверки адреса.
0
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
05.03.2016, 17:37 7
miketomlin, это вы к чему? Можно и так, я не спорю.
0
Заблокирован
05.03.2016, 17:42 8
Я это к вашим словам, подталкивающим ТСа к усложнению решения.
0
669 / 640 / 335
Регистрация: 26.04.2014
Сообщений: 2,122
05.03.2016, 19:00 9
dimitrydn, В конец вашего PHP файла добавляем это:
PHP
1
2
3
4
5
6
7
8
9
10
// получаем или отфильтровываем имя файла, иначе будет использоваться имя файла поумолчанию main.tpl
$tplfilename = strtolower(isset($_GET['tpl']) ? @preg_replace('/[^a-z0-9._-]/si', '', $_GET['tpl']) . '.tpl' : 'main.tpl');
if (file_exists($tplfilename)) {
    // запрошенный файл есть, всё нормально, загружаем
    $smarty->display($tplfilename);
} else {
    // запрошенный файл не найден, 404 not found
    header('HTTP/1.1 404 Not Found');
    $smarty->display('error404.tpl');
}
Вот практически и всё. Осталось только в .htaccess файл добавить строки
Код
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z0-9._-]+)([/]?)$ index.php$2?%{QUERY_STRING}&tpl=$1 [NC,L]
Добавлено через 52 секунды
Вот я придумал такое решение...
Проверьте, будет ли это работать, по идее должно...
0
Заблокирован
05.03.2016, 20:03 10
alexsamos33, код php не комментирую. Только по рерайту:
- почитайте про флаг QSA;
- нет необходимости транслировать слеш в подстановку;
- когда у вас множество состоит из одного символа, нет необходимости заключать его в кв. скобки.

Можно обойтись без трансляции в GET-параметр.
1
669 / 640 / 335
Регистрация: 26.04.2014
Сообщений: 2,122
06.03.2016, 08:35 11

Не по теме:

Цитата Сообщение от miketomlin Посмотреть сообщение
alexsamos33, код php не комментирую. Только по рерайту:
- почитайте про флаг QSA;
- нет необходимости транслировать слеш в подстановку;
- когда у вас множество состоит из одного символа, нет необходимости заключать его в кв. скобки.

Можно обойтись без трансляции в GET-параметр.
Да, спасибо за информацию.



Добавлено через 10 часов 26 минут
miketomlin, А подскажите ещё, как тогда при использовании флага QSA избежать перекрытия одного GET параметра другим? Мне такое не очень нравится...
Сейчас у меня правило такое:
Код
RewriteRule ^([a-z0-9._-]+)$ index.php?tpl=$1 [QSA,NC,L]
и получаем:
Код
http://example.com/one
	$_GET['tpl'] = "one" // всё нормально, так и должно быть.


http://example.com/one?tpl=two
	$_GET['tpl'] = "two" // 'two' перекрывает 'one', как можно бы избавиться от этого?
Мне кажется, что во втором случае влияет порядок GET параметров
Код
QUERY_STRING:	tpl=one&tpl=two
REQUEST_URI:	/one?tpl=two
	# потому что здесь влияет порядок передачи GET параметров,
	#  принимается в переменную только последний переданный параметр, предыдущие игнорируются, а точнее перезаписываются самым последним...
Если же я сделаю без флага, своим способом, вот так примерно:
Код
RewriteRule ^([a-z0-9._-]+)$ index.php?%{QUERY_STRING}&tpl=$1 [NC,L]
	## обратите внимание на порядок передаваемых GET параметров
и вот тогда будет всё нормально, так, как мне бы хотелось
Код
http://example.com/one?tpl=two
	$_GET['tpl'] = "one" // всё нормально, 'two' на 'one' не влияет.
Код
QUERY_STRING:	tpl=two&tpl=one
REQUEST_URI:	/one?tpl=two
	# здесь влияет порядок передачи GET параметров,
	#  принимается в переменную только последний переданный параметр, предыдущие игнорируются, а точнее перезаписываются самым последним...
в данном случае я сам могу управлять порядком параметров...

Ну так вот, можно ли добиться что-нибудь такого с использованием флага QSA ? Или можно может быть каким-то образом изменить правило?

Добавлено через 17 минут
Цитата Сообщение от miketomlin Посмотреть сообщение
Можно обойтись без трансляции в GET-параметр.
А это как?

А если надо будет сделать и так, и так? Например
https://ru.wikipedia.org/wiki/Программирование
https://ru.wikipedia.org/w/index.php?title=Программирование&noredirect=1
0
Заблокирован
06.03.2016, 12:43 12
ТСу ничего этого не требуется.

С перекрытием параметра вы загнули: /one?tpl=two – нафига, когда можно написать /two всего навсего? Накопление одноименных параметров тут явно без надобности.
С дублированием ссылок тоже: и так, и так делают только из-за ограничений ПО, хотя второй вариант при этом стараются закрыть для прямых обращений из-вне. Мы тут ведем речь непосредственно об усовершенствовании «ПО», поэтому можем сделать так, как лучше.
0
0 / 0 / 0
Регистрация: 18.01.2016
Сообщений: 20
06.03.2016, 19:27  [ТС] 13
Спасибо)
0
06.03.2016, 19:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.03.2016, 19:27
Помогаю со студенческими работами здесь

Правка кода php загрузки на сервер ajax
Умные люди помогите, есть форма отправки изображений но не работает, что нужно изменить или...

Динамическая замена php кода
Можно ли так сделать что бы при нажатие на определенную ссылку на страницу подгружался необходимый...

PHP - Замена долгого кода
Всем привет, хочу узнать, можнo ли в php заменять долгие строки <?php echo $welcomemessage; ?> на...

Замена кода в файле средствами PHP
Здравствуйте. Имеется php-файл. В нём необходимо найти кусок кода и заменить его другим куском...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru