Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Смена скина (темы)
 
 автор: Санька   (31.10.2007 в 22:15)   письмо автору
 
 

Нуждаюсь в вашей помощи помочь мне со сменой скина. Есть 4 файла со скинами (2 скина) (в каждом скине как всегда по 2 файла: начало и конец для вставки файл)
Допустим есть файл index.php и 4 файла со скинами:
<?php
include "../../tems/1/start.php";
echo 'Сменить скин<br />
<select size="1" name="tems">
<option value="t1">Тема 1</option>
<option value="t2">Тема 2</option>
</select>';
include "../../tems/1/end.php";
?>
Не могу понять как темы менять, я так понимаю в include надо 2 переменные вписывать, а что бы переменные сделать надо еще и условия сделать на переменные (типа если первую тему выбрали значит переменные работают как start и end, а если вторую значит типа как start2 и end2 и надо еще чтоб select работал. Вобщем мне очень тяжело разобраться. Очень нуждаюсь в вашей помощи.

   
 
 автор: EXP   (31.10.2007 в 22:57)   письмо автору
 
   для: Санька   (31.10.2007 в 22:15)
 

обычно так наверное
<?
include '../../tems/' $skin '/start.php';
// ...............
include '../../tems/' $skin '/end.php';

только перед этим надо проверку $skin получше сделать , сначала его intval()
а потом ещё проверить что-бы не больше не меньше было разрешённого

   
 
 автор: Санька   (31.10.2007 в 23:30)   письмо автору
 
   для: EXP   (31.10.2007 в 22:57)
 

Простую переменную то я и сам могу поставить, только что от нее толку. Нужно условие проверки на переменную (какая папка выберается) и select заставить работать.

   
 
 автор: EXP   (01.11.2007 в 00:05)   письмо автору
 
   для: Санька   (31.10.2007 в 22:15)
 

простейшее если на сессиях

<?php
session_start
() ;
if (isset(
$_POST['tems'])) {
$tems =  (int) $_POST['tems'] ; 
$tems = ($tems || $tems 2) ? $tems // если неправильный
$_SESSION['tems'] = $tems ;
} else {
$tems = (isset($_SESSION['tems'])) ? (int) $_SESSION['tems'] : // по умолчанию 1
}

include 
"../../tems/$tems/start.php";
echo 
'Сменить скин<br />
<select size="1" name="tems">
<option value="1">Тема 1</option>
<option value="2">Тема 2</option>
</select>'
;
include 
"../../tems/$tems/end.php";
?>
на куках придётся делать переадресацию при смене

   
 
 автор: Санька   (01.11.2007 в 01:02)   письмо автору
 
   для: EXP   (01.11.2007 в 00:05)
 

Что то не работает, куча ошибок только вылазиет. Я так понимаю вместо всех цифр (1,2) нужно название папок со скинами вписывать, это так? Мне этот код в каждую страницу что ли вписывать? У меня их оеей. Так как быть со:
<select size="" name="">
<option value="">1</option>
... и так далее, этот код ведь не щелкается, ссылок то нет (что еще в нем надо дописать и куда ссылки вставлять?) Вот эти вопросы у меня единственные болезненные :) до последнего момента пытался врубится в это, но не как не получается.

   
 
 автор: EXP   (01.11.2007 в 02:12)   письмо автору
 
   для: Санька   (01.11.2007 в 01:02)
 

:)
я так предположил что у вас уже есть ../../tems/1/end.php и ../../tems/1/start.php и папка /2/ тоже ,
потому так и спрашивалось .
чесно сказать я незнаю где вам сделать форму и добавить в неё
<form method=post> и </form> ))
что преполагается разместить в start.php из всех папок со скинами(темами) ?
// у меня всего четыре ошибки и все Warning: include(.*):

   
 
 автор: Санька   (01.11.2007 в 06:12)   письмо автору
 
   для: EXP   (01.11.2007 в 02:12)
 

Чесно говоря не хрена не понял, что написали. :(

   
 
 автор: EXP   (01.11.2007 в 13:01)   письмо автору
 
   для: Санька   (01.11.2007 в 06:12)
 

я спросить просто хотел чем будет отличаться сгенерированная страница в зависимости от выбранного того или другого скина .
вариантов того что может меняться при включении разных файлов start.php масса.
от простого изменения например <link type="text/css" rel="stylesheet" href="..." />,
всмысле стиля страницы(), до полностью другого способа её генерации.

а изменять все файлы в которых предпологается возможность смены скинов придётся наверное при таком включении сразу двух файлов с меняющимися адресами.
или хотябы скриптом надставить в каждый по несколько строк ,если только в них уже не находится в самом начале например include("../header.php");
в последнем случае даже можно попробовать обойтись только изменением этого header.php, но тогда куда вставить форму для выбора тоже зависит от того что в таком файле.
такие вот например несколько способов , если не вдаваться в разные способы возможности передачи переменной содержащей выбор какие из файлов надо включать

   
 
 автор: Санька   (01.11.2007 в 15:06)   письмо автору
 
   для: EXP   (01.11.2007 в 13:01)
 

В скине допустим, начало start.php в нем <? <html>и т.д и css в нем же <stile> и т.д ?>, а в коцовке end.php закрывающиеся все теги <? </div></html> ?>
Это готовый скин вставляется во все страницы сайта допустим index.php
<?
include "tems/'.$skin.'/start.php";
echo 'hello';
include "tems/'.$skin.'/end.php";
?>

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

   
 
 автор: sim5   (01.11.2007 в 18:40)   письмо автору
 
   для: Санька   (01.11.2007 в 15:06)
 

А чем должен отличаться друг от друга тот или иной скин, только стилем? Ну меняйте тогда CSS, зачем остальное трогать. Если разговор о нечто большем идет, то это уже шаблоны, значит надо просто менять путь к ним, так как выше у вас прописано. Но в чем проблема при этом?

   
 
 автор: EXP   (01.11.2007 в 18:45)   письмо автору
 
   для: Санька   (01.11.2007 в 15:06)
 

тогда такая ещё неувязка получается:
у вас как вы говорите уже есть ойойой какая куча файлов ,
в них если уже есть в каждом <html><head>........ , то в любом случае придётся всё перелопатить.

тот способ на сессиях который я предлагал запоминает выбранный скин на время жизни сессии
, что может постоянно сбрасывать выбранные настройки при неделании переходов в течении этого времени если оно минут 15 , как бывает.
на softtime название выбранного скина записывается в cookie и браузер каждый раз его посылает, но зато запоминается на то время которое поставить .

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

я-бы сделал в начале всех файлов include($_SERVER['DOCUMENT_ROOT'] . '/header.php'); например , а уже в header.php все настройки , получение , отсылку заголовков, и включение start.php.


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

   
 
 автор: Санька   (01.11.2007 в 21:19)   письмо автору
 
   для: EXP   (01.11.2007 в 18:45)
 

Да я пробывал, не пашет, еще и одна ошибка вылазиет. Пробую разные варианты.

   
 
 автор: EXP   (02.11.2007 в 00:06)   письмо автору
 
   для: Санька   (01.11.2007 в 21:19)
 

вот рабочий пример с использованием сессий
<?php
 
session_start
() ; 
if (isset(
$_POST['tems'])) { 
$tems =  (int) $_POST['tems'] ;  
if (
$tems || $tems 2$tems =  // если неправильный   
$_SESSION['tems'] = $tems 
} else { 
$tems = (isset($_SESSION['tems'])) ? (int) $_SESSION['tems'] : // по умолчанию 1 


?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>test</title>
<style>
.d { width: 90%; }
<?php

if ($tems == 1) echo '.d { background: #888888; font-size: 28px; }' "\n" ;
if (
$tems ==) echo '.d { background: #ffff55; font-size: 56px; color: red; }' "\n" ;

?>
</style>
<script type="text/javascript">
function dataSelect(f) {
n = f.hero.selectedIndex
if(n) alert("Выбран герой: " + f.hero.options[n].value + " ???")
}
</script>
</head> 
<body>

<form action="" method="post">
Сменить скин<br /> 
<select size="1" name="tems"> 
<option value="1">Тема 1</option> 
<option value="2">Тема 2</option> 
</select>
<input type="submit" value="set">
</form> 

выберете кто симпатишнее 
<form action="" method="post">
<select name="hero" size="1">
<option>Выберите героя</option>
<option value="Чебурашка">Чебурашка</option>
<option value="Крокодил Гена">Крокодил Гена</option>
<option value="Шапокляк">Шапокляк</option>
<option value="Крыса Лариса">Крыса Лариса</option>
</select>
<input type="submit" value="OK" onClick="dataSelect(this.form)">
</form> 
<?php

$hero 
= (isset($_POST['hero'])) ? htmlspecialchars($_POST['hero']) : 'никто не выбран';
$hero .=  ($tems == 1) ? ' :(' ' :) ' ;
echo 
'<div class="d">' $hero '</div>' ;

?>
</body>
</html>
:) только не нашёл на чём применить кроме как на примере из учебника

   
 
 автор: Санька   (02.11.2007 в 08:58)   письмо автору
 
   для: EXP   (02.11.2007 в 00:06)
 

Вобщем сделал но по другому, при выборе тем я просто поставил чтобы стиль менялся для этого сделал 1.php и 2.php
И прописал условие
if($tems==1) include"1.php"; и т.д

   
 
 автор: Санька   (02.11.2007 в 10:44)   письмо автору
 
   для: EXP   (02.11.2007 в 00:06)
 

При переходе на другую страницу тема остается та которую выбрали, но в форме скидывается на самую первую, как сделать чтоб так которую выбрали оставалась в форме?

   
 
 автор: EXP   (02.11.2007 в 15:41)   письмо автору
 
   для: Санька   (02.11.2007 в 10:44)
 

можно хотя-бы так
<?php

session_start
() ; 
if (isset(
$_POST['tems'])) {  
$tems =  (int) $_POST['tems'] ;   
if (
$tems || $tems 2$tems =  // если неправильный  
$_SESSION['tems'] = $tems ;  
} else {  
$tems = (isset($_SESSION['tems'])) ? (int) $_SESSION['tems'] : // по умолчанию 1  


$select = array('''''') ;
$select[ ($tems) ] = 'selected ' ;

?>
<form action="" method="post">
Сменить скин<br /> 
<select size="1" name="tems"> 
<option value="1" <?php echo $select[1?>>Тема 1</option> 
<option value="2" <?php echo $select[2?>>Тема 2</option> 
</select>
<input type="submit" value="set">
</form>
но даже в таком простом есть масса вариантов как сделать.
например здесь сначала проверяется ($_POST['tems']), потом $_SESSION['tems'], хотя ($_POST['tems']) посылается только один раз. можно например сделать отдельный файл
и проверять $_POST['tems'] только в нём, как например так с использованием cookie
<?php

$tems 
= (isset($_COOKIE['tems'])) ? (int) $_COOKIE['tems'] : // по умолчанию 1  
if ($tems != 2$tems =  // если неправильный  

$select = array('''''') ;
$select[ ($tems) ] = 'selected ' ;

?>
<form action="deliver.php" method="post">
<input type="hidden" name="back" value="<?php echo $_SERVER['REQUEST_URI']?>">
Сменить скин<br /> 
<select size="1" name="tems"> 
<option value="1" <?php echo $select[1?>>Тема 1</option> 
<option value="2" <?php echo $select[2?>>Тема 2</option> 
</select>
<input type="submit" value="set">
</form> 

deliver.php
<?php

if (isset($_POST['tems'])) {  
    
$tems =  (int) $_POST['tems'] ;   
    if ( 
$tems == 2setcookie('tems'2time() + (3600 5), '/' ) ; // влепление в cookie на 5 суток
    
else   setcookie('tems''2'time() - 3600'/') ; // деактуализация :)


?>
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<meta http-equiv="Refresh" content="0; url=<?php echo htmlspecialchars($_POST['back']) ?>"/>
</head><body>
секундочку
</body></html>

   
 
 автор: Санька   (02.11.2007 в 16:43)   письмо автору
 
   для: EXP   (02.11.2007 в 15:41)
 

Когда вставляю $select=array(",","); юзает ошибка Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, еxpecting T_STRING or T_VARIABLE or T_NUM_STRING
а когда $select=[('$tems')]='selected';
Юзает 2 ошибки Notice: Undefined offset

   
 
 автор: EXP   (02.11.2007 в 17:00)   письмо автору
 
   для: Санька   (02.11.2007 в 16:43)
 

проверь , кажется пробел затесался между $ и select.
во втором случае из-за того что необъявляется массив

   
 
 автор: Санька   (02.11.2007 в 18:03)   письмо автору
 
   для: EXP   (02.11.2007 в 17:00)
 

Пробелов нет.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования