[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Обработка полученной информации перед выводом пол
McLotos
Возможно эта ситуация уже здесь описывалась, но я не нашёл.
У меня в БД есть таблица Config, в которую записываются конфигурации структуры сайта и т.д.
Ну просто чтобы не писать все параметры всех страниц в коде,
я решил сделать их в БД и просто вытягивать нужное.
Структура таблицы
`Config` (
`Category` varchar(24) NOT NULL, //категория параметра, ну допустим меню, или язык пользователя, или что-нибудь ещё
`Access` varchar(25) NOT NULL, //уровень доступа вошедшего юзера
`Location` text NOT NULL, //местоположение вошедшего юзера
`Variable` text NOT NULL //то что нужно выдать в этой ситуации
)

в этой таблице есть такая запись
('Menu',
'Employee',
'/',
'<UL type=''none''>\r\n<li>".$lang[''link.calls'']."</li>
<font color=grey>".$lang[''link.calls.desc'']."</font>
<br>\r\n<li><br>".$lang[''link.stat'']."</li>
<font color=grey>".$lang[''link.stat.desc'']."</font>
<br>\r\n<li><br>".$lang[''link.exit'']."</li>
<font color=grey>".$lang[''link.exit.desc'']."</font>
<br>\r\n</UL>'
)

И вытягивается всё таким запросом
select variable from config where category='Menu' and Access=".$_SESSION['access']." and Location={$_SERVER['REQUEST_URI']}

Всё хорошо, всё прекрасно работает, но
пользователю выводится меню вот в таком виде
".$lang['link.calls']."
".$lang['link.calls.desc']."

".$lang['link.stat']."
".$lang['link.stat.desc']."

".$lang['link.exit']."
".$lang['link.exit.desc']."

Как теперь сделать так, чтобы перед выводом из БД эти все переменные заменялись в зависимости от языка пользователя?
Т.е. выводились не сами переменные, а их значение в соответствии с настройками вошедшего юзера?
Имеются несколько Lang файлов
примерно такого содержания
$lang['link.members'] = "<a href='/userlist'>Список пользователей</a>";
$lang['link.members.desc'] = " - Здесь отображается список пользователей Вашего окружения.";
И т.д.
пробовал делать вот так
$q="select variable from config where category='Menu' and Access=".$_SESSION['access']." and Location={$_SERVER['REQUEST_URI']}";
$result=mysql_query($q);
$myrow=mysql_fetch_array($result);
eval ("\$myrow['variable'] = \"$myrow['variable']\";");
echo $myrow['variable'];

бесполезно
выдаётся ошибка
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE,
expecting T_STRING or T_VARIABLE or T_NUM_STRING in Z:\home\{Location}\www\parameters.php on line 6

вот что лежит в самом поле variable
<UL type='none'>
<
li>".$lang['link.calls']."</li><font color=grey>".$lang['link.calls.desc']."</font>
<
br>
<
li><br>".$lang['link.stat']."</li><font color=grey>".$lang['link.stat.desc']."</font><br>
<
li><br>".$lang['link.exit']."</li><font color=grey>".$lang['link.exit.desc']."</font><br>
</
UL>

Как сделать чтобы это всё адекватно отображалось на страницах?
Но только так чтобы не писать кучу кода, который бы объяснял скрипту как это переводится.
Т.е. смысл в чём: Сократить объём файлов, переместив меню и прочее в БД, и просто подтягивать это меню оттуда, но учитывать что юзер может не понимать русский, поэтому меню сделано на нескольких языках



Спустя 2 часа, 22 минуты, 52 секунды (23.08.2011 - 15:48) Renden написал(а):
McLotos
Начало понятно, а потом нифига не понятно, если нужно чтоб выводились разные языки,
создай в базе поле с языком(и указывай там ru,en или че там) и создай разные lang файлы да инклюдь их в зависимости от языка ну типа:

$myrow = mysql_fetch_array($query);
switch($myrow['lang'])
{
case "ru":
include ("lang/ru.lang");
case "en":
include ("lang/en.lang");
case "us":
include ("lang/us.lang");
break;
default:
include ("lang/en.lang");
}

Спустя 8 минут, 12 секунд (23.08.2011 - 15:57) linker написал(а):
Жестоко
eval('echo "' . $myrow['variable'] . '";');
может всё более грамотно переписать с нуля?

Спустя 40 минут, 40 секунд (23.08.2011 - 16:37) McLotos написал(а):
Сам блок меню, т.е. всё меню целиком занимает 1 поле таблицы. Поле называется Variable, в самом меню имеются переменные $lang['бла-бла'], которые в зависимости от установленного в профиле пользователя языка должны принимать разные значения, описанные в файлах типа project.ru.lang.php или project.en.lang.php. Я думал ч в моем первом посте всё подробно расписал.

Спустя 3 минуты, 55 секунд (23.08.2011 - 16:41) McLotos написал(а):
Т.е. фактически мне нужно:
1. вытянуть значение поля variable в зависимости от ситуации - готово
select variable from config where category='Menu' and Access=".$_SESSION['access']." and Location={$_SERVER['REQUEST_URI']}

2. полученный результат (а именно переменные $lang['бла-бла-бла']) заменять на язык, который поймёт юзер.
Во всех файлах есть такой блок, который отвечает за подключение нужного языка

 <?
if ($myrow['lang']=="eng"){$langs="project.en.lang.php";} //если авторизован и в анкете английский
elseif ($myrow['lang']=="rus") {$langs="project.ru.lang.php";} //если авторизован и в анкете русский
else {$langs="project.alter.lang.php";} //если не авторизован
require $langs; //подключить нужный файл?>


что дальше делать?

Спустя 15 часов, 30 минут, 9 секунд (24.08.2011 - 08:11) linker написал(а):
$q = "SELECT `variable` FROM `config` WHERE `category`='Menu' AND `Access`='".$_SESSION['access']."' AND `Location`='" . $_SERVER['REQUEST_URI'] . "'";
$result = mysql_query($q) or die(mysql_error());


_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.