Перейти к содержимому


Партнерская программа Kredov

Шаблон в одном файле, а остальные подключать в зависимости от страницы

#1 Kolovrat

Kolovrat
  • Заблокированные
  • 61 сообщений
  • Репутация: 0
0

Отправлено 13 Апрель 2012 - 17:12

Ну по названию думаю суть понятна. Надо чтоб в одном файле определялось где находятся основные блоки, а остальное это сами страницы сайта в которых хранится информация о них (название страницы, содержимое и т.д.). через фреймы не пойдет, надо что бы адресс выглядел к примеру site-1488.ru/svastika(страница о свастике к примеру) site-1488.ru/glavnaya(главная к примеру), ну то есть что бы в адрессе страницы указывалось какой файл подключать, а с помощью фреймов на сколько я понял можно поключить определенную инфу к примеру по нажатию на ссылку.

почему я хочу так сделать? потому что когда я писал первый сайт мне пришлось делать по файлу для каждой страницы, и если я хотел изменить что то в расстановке мне приходилось это менять в каждом файле. надеюсь все понятно объяснил, если что переспрашивайте. заранее благодарен!

 

 

  • 0

#2 c0ns0l3

c0ns0l3
  • Пользователь
  • 264 сообщений
  • Репутация: 49

Отправлено 26 Апрель 2012 - 17:33

Используй РНР, который поддерживается на каждом хостинге.
Идеология будет примерно следующая.
у тебя есть index.php в котором описан весь "статический" HTML страницы, в котором так же указано в определенном месте include какого-то файла.
примерно так выглядит
<html>
  <head>
    <title>Title</title>
  </head>
  <body>
    <?php include("template/somefile.htm") ?>
  </body>
</html>

где template/somefile.html и есть тот файл, который "проинклудится" в твой код.

Далее, нужно привязаться к ссылке, что делается передачей методом GET какой-либо переменной, пусть допустим это будет page после чего у тебя будет такая ссылка:
http://site.com/?page=hello

в РНР у тебя появится переменная page, которую ты сможешь использовать. (если более одной переменной передавать по GET то прийдется писать ?page=1&argument=2&foo=3&name=Vasya

Применяем данную переменную в РНР коде
<?php include("template/".$_GET['page'].".htm") ?>
мы подставляем ее в наш инклуд, таким образом. в зависимости от ссылки, будет варироваться какой файл нам инклудить.
  • 0

#3 Kolovrat

Kolovrat
    Topic Starter
  • Заблокированные
  • 61 сообщений
  • Репутация: 0

Отправлено 02 Май 2012 - 22:50

Идея проста! Именно так я и хотел =) не понятно одно))) в конце вы поставили пример ссылки которую вставлять в инклуд. я ее совсем не понял. я сейчас попробую поискать уроки по этой теме, но хотелось бы чтоб вы кинули при возможности урок который на ваш взгляд максимально удобен и понятен

первые два предложения я с просонье не правильно написал :(

идея понятна! Именно это я и имел в виду!

P.S. простона юкозе давно еще спалил такие переменные в адресной строке, а как делать такое хз =)
  • 0

#4 Kolovrat

Kolovrat
    Topic Starter
  • Заблокированные
  • 61 сообщений
  • Репутация: 0

Отправлено 02 Май 2012 - 23:31

Большое спасибо =) со всем разобрался =) все реально удобно и просто в использовании =) всего одну строчку вставить в код и больше ни че извенять не надо просто создавать новые файлики и все =) вообще классно =)
  • 0

#5 c0ns0l3

c0ns0l3
  • Пользователь
  • 264 сообщений
  • Репутация: 49

Отправлено 03 Май 2012 - 21:10

Передавать переменные в РНР можно 2мя способами.
1) GET - ты его уже знаешь, это по факту открытые переменные которые идут в адрессной строке.
2) POST - это уже скрытые переменные, их небудет видно в адрессной строке, и по факту - можно простым способом передавать их только через форму

<form action="index.php" method="post">
<form action="index.php" method="get">


В зависимости от того, как настроен РНР, к ним обращаться можно или сразу же $foo, но правильней будет обращаться к ним через глобальный массив переменных РНР $_GET и $_POST соответветственно (т.к. на некоторых хостингах глобальное пространство переменных может быть отключено). Поэтому соответственно будет $_GET['foo'] или $_POST['foo']
  • 0

#6 Kolovrat

Kolovrat
    Topic Starter
  • Заблокированные
  • 61 сообщений
  • Репутация: 0

Отправлено 06 Май 2012 - 14:36

я не могу найти нормальные понятные уроки по PHP. подскажите пожалуйста как задавать значение переменной не через адрессную строку, а в коде. мне не понятен именно синтаксис, покажите пожалуйста на примере. ну и желательно если вам не сложно дайте ссылку на хорошую по вашему мнению серию уроков PHP, ну или учебник какой то.

это у меня вставлено в контент:
<?
require("texts/".$_GET['page'].".html");
?>

когда я вписываю просто адресс сайта (без переменной) на странице выводится ошибка. функция require сообщает что файл не найден. самый простой и оптимальный вариант мне кажется это просто задать переменной page значение главной страницы перед функцией require
  • 0

#7 c0ns0l3

c0ns0l3
  • Пользователь
  • 264 сообщений
  • Репутация: 49

Отправлено 06 Май 2012 - 18:36

Можно воспользоваться условием простым...

Ладно, пойдем с самого начала.
Переменные в РНР обозначаются через знак $
$someString = "some text";
$someInteget = 5;
$someBoolean = true;
и т.д.

в твоем случаи... нужно сделать следующее.
1) проверить, есть ли переменная $_GET['page']
2) если есть - то загрузить файл
3) если нету - загрузить какой-то файл который отвечает за главную страницу.
4) так же тебе нужно было бы сделать проверку на существование файла перед его загрузкой... чтобы не было ошибки
5) но можно и вызвать ф-цию require (та и любую) с ключем @ которая проигнорирует ошибку (но это не есть на самом деле хорошо)

Итак пример...

<?php
/**
* Имя файла, которое будет загружатсья, если нет переменной $_GET['page']
**/
	$template_default = "home";
/**
* Каталог темплейтов для инклуда
**/
	$template_dir = "templates/";
/**
* Массив из разрешений файлов, которые будут искаться и загружаться
**/
	$template_extension = array(".htm",".html");
if(isset($_GET['page'])) {
	//если есть переменная
	foreach ($template_extension as $extension){
		//перебираем массив расширений
		$file_include_path = $template_dir.$_GET['page'].$extension; //генерируем варианты файла с расширением
		if(file_exists($file_include_path) && !$included) { //если ФАЙЛ существует и НЕ$included
			$included = true; //задаем переменную $included как ДА
			require_once($file_include_path); //инклудим файло
		}
	}
	if(!$included) {
		//если после перебора и т.д. мы всетаки не проинклудили
		echo "404"; //кидаем 404 ошибку...
	}
}else{
	//если НЕ задана переменная
	$default_include_file = $template_dir.$template_default.".html"; //генерируем путь к стандартному файлу
	if(file_exists($default_include_file)){
		//проверяем наличие файла
		require_once($default_include_file);//инклудим файл
	}else{
		//если файла нету... опять кидаем 404
		echo "404";
	}
}
?>


По поводу уроков...
Я несмотрел если честно.. _http://rutracker.org/forum/viewtopic.php?t=4013980 от Евгения Попова. Смотрел в свое время по JS и CSS.. неплохо объясняет...
А вообще Google :D я на нем учился в свое время...
  • 0

#8 Kolovrat

Kolovrat
    Topic Starter
  • Заблокированные
  • 61 сообщений
  • Репутация: 0

Отправлено 11 Май 2012 - 18:56

большое спасибо =) понял не все, пока что сделаю коротко (без страницы 404 и т.д.). потом когда времени будет больше поизучаю все более внимательно и разбирусь во всех функциях

P.S. я тоже всему по нэту учусь =) но пользуюсь яндексом :D но к сожалению не все ресурсы нахожу....

Сделал пока что так:
<?
if(isset($_GET['page']))
{
require("texts/".$_GET['page'].".html");
}
else
{
require("texts/glavnaya.html");
}
?>

я толком не понял для чего вы делали проверки на формат и остальное. На первый взгляд по крайней мере мне это не надо. потому что все файлы создаются с одним и тем же форматом и редактируются мной, ну хотя в дальнейшем это не помешает. А страница 404 на мой взгляд не так важна по этому хочу сначала доделать то с чем запар =) а ее потом сделаю красиво и технично ;)
  • 0

#9 c0ns0l3

c0ns0l3
  • Пользователь
  • 264 сообщений
  • Репутация: 49

Отправлено 12 Май 2012 - 07:39

Kolovrat, я расписал большую часть синтаксиса для Вас которая может быть связано с подгрузкой файлов что бы Вы как-то могли ориентиорваться.
  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru