Forum Webscript.Ru
Программирование => PHP => Тема начата: Enemy от 13 Августа 2003, 15:29:40
-
Чтобы изменить значение константы на странице - мне нужно перегружать страницу дважды...
Использую я их для обявления языка. как в PHP NUKE. но в нюке язык переключается сразу, а у меня остается прежний, только после перегрузки страницы (то есть уже второй раз) константы меняют значение.
потом я прочитал в хелпе -
Constants may not be redefined or undefined once they have been set;
не знаю как решить эту проблему. что посоветуете? удалить константу также не знаю как (вроди и невозможно).
-
Может, КОНСТАНТЫ тебе не подходят?
-
подходят. иначе уже не могу. все файлы уже с константами. перевод сайта на два языка. теперь нужно сделать так чтобы с перегрузкой страницы + выбран другой язык - изменялись константы и язык сайта.
там стоит простой switch -
switch ($_SESSION["lang"]){
case "ua" : { $file = "lang-ukrainian.php"; break;};
case "ru" : { $file = "lang-russian.php"; break;};
default : { $file = "lang-ukrainian.php"; break;};
}//endswitch
include_once("language/$file");
файл загружается, а константы не перегружаются. только после еще одного рефреша.
-
Ну вот что с такими делать?
Говорят ему - константы не подходят.
причем он САМ убедился, что таки не подходят.
И все равно будет талдычить.
Ну тогда ОПРЕДЕЛЯЙ константы ПОСЛЕ того, как выбрал язык.
А не ДО.
Если ты уж и этого не можешь сделать по идеологическим соображениям, то тебе остаетсся только застрелиться.
-
Стрелятся мне не зачем. у меня с нервами все в порядке, не то что у некоторых. А спрашиваю я потому что в НЮКЕ это реализовано. И работает. Значит МОЖНО так сделать.
-
Enemy
switch ($_SESSION["lang"]){
case "ua" : { $file = "lang-ukrainian.php"; break;};
case "ru" : { $file = "lang-russian.php"; break;};
default : { $file = "lang-ukrainian.php"; break;};
}//endswitch
у тебя до этого switch-а уже были константы определены ?
файл загружается, а константы не перегружаются. только после еще одного рефреша.
ты уверен что загружается именно нужный файл ?
Предположение:
if (isset($_GET[\'lang\']) && in_array($_GET[\'lang\'], array(\'ru\',\'ua\')) {
$_SESSION[\'lang\'] = $_GET[\'lang\'];
}
// далее твой switch
....
-
1. Спасибо хорошему человеку за ответ - Макс .
вот мой текст кода -
session_start();
if ($_GET["lang"]) $_SESSION["lang"] = $_GET["lang"];
if (!$_SESSION["lang"]) $_SESSION["lang"] = "ua";
switch ($_SESSION["lang"]){
case "ua" : { $file = "lang-ukrainian.php"; break;};
case "ru" : { $file = "lang-russian.php"; break;};
default : { $file = "lang-ukrainian.php"; break;};
}//endswitch
include_once("language/$file");
Это почти то же что ты и говорил.
2. ты уверен что загружается именно нужный файл ?
- к сожалению уверен... проверял...
-
что никто и никогда не использовал константы? я думаю что способ решения этой проблемы - был бы интересен всем.
-
Все использовали.
Но только именно как константы, а не как переменные.
во-первых, все используют константы именно как КОНСТАНТЫ.
число ПИ - константа.
она всегда равно одному и тому же числу.
а не так, что сегодня она равна 3, а завтра - 4.
И если исходить из этого, то твоих проблем ни у кого никогда не было.
Если значение надо менять, то тебе нужна не константа, а переменная!
Так что, к чужому опыту взывать не надо, если сделал без головы.
И никому решение этой "проблемы" неинтересо, потому, что никто на такие грабли не наступает просто.
Но раз уж ты влез с константами так, что переделать не можешь, то повторяю еще раз:
поскольку РНР яызк скриптовый, и выполняется заново каждый раз при просмотре страницы, нет никаких проблем определять константы ПОСЛЕ того, как ты определишься, наконец, что им присвоить.
Не ДО, чтобы потом переопределять, а ПОСЛЕ того, как ты из сессии прочтешь язык.
Если же тебе и это не под силу, то выражение "застрелиться" надо понимать фигурально. Это значит, что если ты не желаешь переделывать свою программу разумно, то так и будешь по два раза перезагружать.