люди добрые!
есть ли знающие сей чудный язык форумчане?
RawonaM.
а он консультирует?
Нельзя сказать, что я его как-то слишком хорошо знаю. Спрашивайте, по возможности буду отвечать, когда время и знания позволять будут.
Есть. Drundia, ЕМНИП.
делаю онлайн словарик.
хочу под формой ввода поставить пять букв (á é í ó ú), нажимаешь на букву - она появляется в форме ввода (типа вирт. клавы)
может скриптик у кого завалялся...
Это вам не PHP нужен, а JavaScript. Делаете кнопки или ссылки с этим текстом, по нажатию на них JS функция вставляет нужный текст в форму ввода.
Цитата: do50 от хочу под формой ввода поставить пять букв (á é í ó ú), нажимаешь на букву - она появляется в форме ввода (типа вирт. клавы)
Ну Вы, блин, даёте‼
http://www.mediawiki.org/wiki/Extension:CharInsert/ru
Пример реализации от Hellerickʼа: http://wiki.lingvoforum.net/w/MediaWiki:Edittools
Кстати, RawonaM же сделал такую юзер-настраиваемую штуку в быстром ответе. Кто мешает посмотреть код?
дай вам Бог здоровья, добрые люди!
Цитата: do50 от сентября 15, 2011, 21:15
делаю онлайн словарик.
хочу под формой ввода поставить пять букв (á é í ó ú), нажимаешь на букву - она появляется в форме ввода (типа вирт. клавы)
Это надо не на PHP делать, а на JavaScript. PHP—серверный язык. То есть выполняется на сервере, выдает пользователю результат и никак не взаимодействует на то, что после этого происходит, до того, как к нему снова обратяться.
На ЖабаСкрипте это делается примерно так:
<input type="text" id="SLON" />
<a href="#" onclick="var e = document.getElementById('SLON'); e.value += 'буква'; e.focus(); return false">буква</a>
Сама ссылка ведет на эту же страницу (#), а весь код записан в части onclick. Первая команда присваивает переменной e объект с ID = SLON. Вторая команда добавляет к тексту в этом объекте одну букву. Так как при щелчке по ссылке управление переходит на ссылку, и вводить текст снова не дает, e.focus() возвращает фокус ввода на объект e. return false сообщает, что основное действие ссылка (переход по ссылке) выполнять не должна.
Блин, думаю, пока я это писал с телефона, уже все ответили.
Цитата: do50 от сентября 15, 2011, 21:33
Цитата: Bhudh от сентября 15, 2011, 21:30
Кто мешает посмотреть код?
воровать? 8-)
Ну так не обязательно воровать, т.е. дословно копировать. Можно посмотреть, запомнить принципы реализации и написать то же самое, но по-другому. Это ненаказуемо, AFAIK (да и в любом случае недоказуемо).
И вообще, IMO понятие «воровство» в сфере интеллектуальной собственности несет очень странный смысл.
А в плане ЖабаСкрипта и подавно. Я, в отличие даже от случаев с Windows, ни на какие условия о тех JavaScript'ах, которые мне посылают, не соглашался (ну, по крайней мере, относительно большинства из них).
Цитата: do50 от воровать? 8-)
Это не воровство, а использование уже в дупу стандартного решения.
Цитата: Demetrius от сентября 15, 2011, 21:38
И вообще, IMO понятие «воровство» в сфере интеллектуальной собственности несет очень странный смысл.
Несет вполне нормальный смысл, но в данном случае упомянуто не в тему.
Код открыт, подсмотреть его и сделать точно так же — это не воровство, а обмен опытом.
чё вы сегодня все такие серьёзные? код открыт, значит можно пользоваться, я пошутил про воровство
Я серьезный потому что у меня сегодня приступ зависти помноженный на кучу материала к экзамену, который на носу.
Запятая лишняя.
Точно? Вроде как еще одной не хватает.
Цитата: RawonaM от сентября 15, 2011, 21:54Точно? Вроде как еще одной не хватает.
Поскольку отсутствующих запятых больше чем присутствующих делается вывод что имелась цель опустить запятые полностью. Ergo одна лишняя.
народ, я теперь с кодировками запутался :'(
А в чем проблема, подробнее?
Кодировки, собственно, прописываются в двух местах: на самой странице и в заголовках, посылаемых сервером. Если они не совпадают, браузер сам решит, но у меня серверные считались важнее.
На странице кодировки указываются в разделе head, тегом <meta http-equiv="Content-Type" content="text/html; Charset=UTF-8"> (вместо UTF-8 нужную подставить).
Заголовки сервера можно менять по-разному. Лучше всего—меняя настройки сервера (на серверах Apache это обычно можно сделать с помощью файлов .htaccess). Если сервер настроить не представляется возможным, можно в самом начале файла (до вывода какого-либо текста, даже пробелов) написать такой код:
<?php
header('Content-Type: text/html; Charset=UTF-8');
?>
utf-8 не отображает кириллицу, а ansi не отображает буквы с акутами...
ничего не пойму. знаю, что в настройках БД стоит utf-8
Цитата: do50 от сентября 16, 2011, 00:12
utf-8 не отображает кириллицу, а ansi не отображает буквы с акутами...
ничего не пойму. знаю, что в настройках БД стоит utf-8
UTF-8 отображает кириллицу. Просто, скорее всего, Ваши файлы не в кодировку UTF-8, а в ANSI. Перекодируйте их каким-нибудь редактором (самый дешевый и сердитый вариант—AkelPad).
Но при перекодировке выберите UTF-8 без BOM. Поэтому блокнот не подходит: он не умеет записывать файлы без BOM.
Подробнее? Каким образом система получает текст, и на какой стадии в нем буквы превращаются в кракозяблики?
Цитата: Demetrius от сентября 16, 2011, 00:25
Цитата: do50 от сентября 16, 2011, 00:12
utf-8 не отображает кириллицу, а ansi не отображает буквы с акутами...
ничего не пойму. знаю, что в настройках БД стоит utf-8
UTF-8 отображает кириллицу. Просто, скорее всего, Ваши файлы не в кодировку UTF-8, а в ANSI. Перекодируйте их каким-нибудь редактором (самый дешевый и сердитый вариант—AkelPad).
Но при перекодировке выберите UTF-8 без BOM. Поэтому блокнот не подходит: он не умеет записывать файлы без BOM.
я пользуюсь pspad, им и перекодировал в UTF-8 из ANSI, из-за того, что последний не знает акутов (подла), так вот, акуты появились, а вместо кириллицы ромбики с вопросами...
Ромбики с вопросами обочно появляются, если текст в анси пытаются отобразить как утф-8. Т.е., редактор, скорее всего, перекодировкать не смог или не захотел, а в самой странице при этом указана кодировка утф-8.
И да, там было что-то про БД? Текст с ромбиками — это текст самой страницы, или текст, хранимый в БД?
Python, у Вас какой-то очень хороший форк libastral.
разобрался:
сделал файл .htaccess с текстом AddDefaultCharset UTF-8 и всё заработало
всем большое спасибо за помощь!!! :UU:
Цитата: Demetrius от сентября 16, 2011, 00:49
Python, у Вас какой-то очень хороший форк libastral.
Просто немного разбираюсь в кракозябликах :)
«Python, � ��� �����-�� ����� ������� ���� libastral.» — windows-1251, который раскодировали как utf-8
«Python, Сѓ Р'ас какой-С,Рѕ очень С...ороший С,,РѕСЂРє libastral.» — то же самое, но наоборот.
«Python, С бЮЯ ЙЮЙНИ-РН НВЕМЭ УНПНЬХИ ТНПЙ libastral.» — windows-1251, раскодированный как koi8-r
«Python, ó Âàñ êàêîé-òî î÷åíü õîðîøèé ôîðê libastral.» — windows-1251 как windows-1252 или ISO-8859-1 (дефолтная кодировка)
«Python, � ��� �����-�� ����� ������� ���� libastral.» — хм., странно. windows-1251, прочитанный как US-ASCII. Впрочем, логично, если это тру-ascii с чистым пространством после 127-го символьного кода.
«Python, �� ������ ����������-���� ���������� �������������� �������� libastral.» — из utf-8 в us-ascii. Ромбиков в два раза больше.
Странно, что дефолтной кодировкй оказался us-ascii — обычно там используется что-то с дополнительными кодами для западноевропейских языков.
Р.Ѕ. Приведенные примеры перекодировки я делал с помощью небольшой джава-программы. Джава понимает us-ascii как ортодоксальный вариант ascii без ничего лишнего. Однако, Опера, если в ней указать эту кодировку, воспринимают ее как западноевропейскую с дополнительными символами.
ещё вопрос образовался, как я уже говорил, делаю словарь, как заставить (скорее всего БД, наверное) воспринимать á = a ?
Цитата: do50 от сентября 16, 2011, 01:34
ещё вопрос образовался, как я уже говорил, делаю словарь, как заставить (скорее всего БД, наверное) воспринимать á = a ?
Сравнивать не сами строки, а переделанный вариант строк, в котором все á заменены на a.
В MySQL может сработать примерно такой SQL-запрос:
SELECT *
FROM tablename
WHERE REPLACE(fieldname, 'á', 'a') = REPLACE('входная строка', 'á', 'a')
Цитата: Demetrius от сентября 16, 2011, 01:55
В MySQL может сработать примерно такой SQL-запрос:
SELECT *
FROM tablename
WHERE REPLACE(fieldname, 'á', 'a') = REPLACE('входная строка', 'á', 'a')
и куда эту красоту записать?
Цитата: do50 от сентября 16, 2011, 09:17
и куда эту красоту записать?
А как вы запрос к базе данных делаете?
Вообще-то это был запрос на языке SQL. Если вы используете что-то другое, то надо делать как-то по другому. Базы данных разные бывают.
есть файл config.php, в котором прописаны параметры подключения к БД, наверное с ним надо пошаманить?
Какая у вас вообще структура?
Цитата: do50 от есть файл config.php, в котором прописаны параметры подключения к БД, наверное с ним надо пошаманить?
Параметры тут ни при чём, запрос пишется в коде.
config.php — разве не обычный файл с пхп-кодом, пусть даже и с определенной ролью в проекте, с которым работает автор темы?
Первый раз слышу, чтобы в конфигах сикьюэл-запросы писали... :what:
Ну так этот конфиг представляет собой простой пхп-файл, который тупо инклудится в индекс.пхп или еще что-нибудь. Технически там может быть что-угодно.
Технически-то понятно. Но смысл?‥
Цитата: do50 от сентября 16, 2011, 10:00
есть файл config.php, в котором прописаны параметры подключения к БД, наверное с ним надо пошаманить?
Наверное, вы имели в виду "php.ini"?
Цитата: jvarg от сентября 17, 2011, 07:19
Наверное, вы имели в виду "php.ini"?
такого нет, а как с его помощью можно это сделать?
ввод символов в форму реализовал так:
Цитировать
<INPUT TYPE=button VALUE="á" onClick="document.getword.elements[0].value='á';">
<INPUT TYPE=button VALUE="é" onClick="document.getword.elements[0].value='é';">
<INPUT TYPE=button VALUE="í" onClick="document.getword.elements[0].value='í';">
<INPUT TYPE=button VALUE="ó" onClick="document.getword.elements[0].value='ó';">
<INPUT TYPE=button VALUE="ú" onClick="document.getword.elements[0].value='ú';">
сейчас столкнулся с такой проблемой, клик на кнопку стирает всё, что было написано в форме до него и вводит соответствующий символ. как это побороть?
Цитата: do50 от сентября 17, 2011, 10:17
сейчас столкнулся с такой проблемой, клик на кнопку стирает всё, что было написано в форме до него и вводит соответствующий символ. как это побороть?
Вместо document.getword.elements[0].value= пишете document.getword.elements[0].value
+=.
Будет добавлять в конец.
Цитата: RawonaM от сентября 17, 2011, 10:32
Вместо document.getword.elements[0].value= пишете document.getword.elements[0].value+=.
Будет добавлять в конец.
урааа! заработало!!!
RawonaM, спасибо! осталось ещё заставить БД думать, что á = a ...
Цитата: do50 от сентября 17, 2011, 10:39
RawonaM, спасибо! осталось ещё заставить БД думать, что á = a ...
А зачем? Что-то я не понял задачи.
Цитата: RawonaM от сентября 17, 2011, 10:49
А зачем? Что-то я не понял задачи.
в словаре есть поиск по слову и поиск по первой букве, т.е. нажимая на букву выдаётся список слов, начинающихся на эту букву. нажимаем А - выдаёт список:
a
am
anois
áiléar
а должно быть:
a
áiléar
am
anois
буквы с акутом должны быть равны буквам без него
А, это нужно изменить коллацию таблицы и может еще чего-то на аццент-инсенситиве.
Там вариантов может быть уйма и это вообще может оказаться не так просто. Не любой сервер будет это поддерживать.
Можно пойти несколько окольным путем и пересортировать готовый результат уже в PHP, если там не миллионы строк.
Цитата: do50 от сентября 17, 2011, 10:57
Цитата: RawonaM от сентября 17, 2011, 10:49
А зачем? Что-то я не понял задачи.
в словаре есть поиск по слову и поиск по первой букве, т.е. нажимая на букву выдаётся список слов, начинающихся на эту букву. нажимаем А - выдаёт список:
a
am
anois
áiléar
а должно быть:
a
áiléar
am
anois
буквы с акутом должны быть равны буквам без него
тут решений может быть много, RawonaM прав - все зависит от размеров базы. Самое топорное решение - иметь в базе дополнительную колонку, где писать то же слово, но без диакритики и при поиске выбирать строки по ней. Можно попробовать регулярными выражениями...
Цитата: do50 от сентября 17, 2011, 10:17
ввод символов в форму реализовал так:
Цитировать
<INPUT TYPE=button VALUE="á" onClick="document.getword.elements[0].value='á';">
<INPUT TYPE=button VALUE="é" onClick="document.getword.elements[0].value='é';">
<INPUT TYPE=button VALUE="í" onClick="document.getword.elements[0].value='í';">
<INPUT TYPE=button VALUE="ó" onClick="document.getword.elements[0].value='ó';">
<INPUT TYPE=button VALUE="ú" onClick="document.getword.elements[0].value='ú';">
сейчас столкнулся с такой проблемой, клик на кнопку стирает всё, что было написано в форме до него и вводит соответствующий символ. как это побороть?
Можно то же самое на jQuery реализовать. Для такой простой задачи можно на чистом javascript писать, но для более сложных задач удобнее jQuery
Цитата: rlode от сентября 17, 2011, 12:02
Можно то же самое на jQuery реализовать. Для такой простой задачи можно на чистом javascript писать, но для более сложных задач удобнее jQuery
это как?
Цитата: rlode от сентября 17, 2011, 11:59
Самое топорное решение - иметь в базе дополнительную колонку, где писать то же слово, но без диакритики и при поиске выбирать строки по ней.
а как это реализовать практически?
Цитата: do50 от сентября 17, 2011, 10:17
Цитата: jvarg от сентября 17, 2011, 07:19Наверное, вы имели в виду "php.ini"?
такого нет, а как с его помощью можно это сделать?
http://www.avege.ru/russian/php_5/php_04.shtml (http://www.avege.ru/russian/php_5/php_04.shtml)
Цитата: do50 от сентября 17, 2011, 10:39
урааа! заработало!!!
RawonaM, спасибо! осталось ещё заставить БД думать
База данных думать не умеет. Попробуйте сами :) :)
Цитата: jvarg от сентября 17, 2011, 12:28
База данных думать не умеет. Попробуйте сами
дельный совет, спасибо!
Цитата: jvarg от сентября 17, 2011, 12:28
http://www.avege.ru/russian/php_5/php_04.shtml
а это тут при чём?
Цитата: do50 от сентября 17, 2011, 12:19
Цитата: rlode от сентября 17, 2011, 11:59Самое топорное решение - иметь в базе дополнительную колонку, где писать то же слово, но без диакритики и при поиске выбирать строки по ней.
а как это реализовать практически?
Создаете еще одно поле в таблице, копируете в нее все слова, изменяете в ней все акцентированные буквы на простые. Затем когда делаете выборку (select) в условии (where) используете новое поле.
Цитата: do50 от сентября 17, 2011, 12:41
Цитата: jvarg от сентября 17, 2011, 12:28
http://www.avege.ru/russian/php_5/php_04.shtml
а это тут при чём?
Это ответ на ваш вопрос. Что такое php.ini, и с чем его едят.
Цитата: rlode от сентября 17, 2011, 12:02
Цитата: do50 от сентября 17, 2011, 10:17
ввод символов в форму реализовал так:
Цитировать
<INPUT TYPE=button VALUE="á" onClick="document.getword.elements[0].value='á';">
<INPUT TYPE=button VALUE="é" onClick="document.getword.elements[0].value='é';">
<INPUT TYPE=button VALUE="í" onClick="document.getword.elements[0].value='í';">
<INPUT TYPE=button VALUE="ó" onClick="document.getword.elements[0].value='ó';">
<INPUT TYPE=button VALUE="ú" onClick="document.getword.elements[0].value='ú';">
сейчас столкнулся с такой проблемой, клик на кнопку стирает всё, что было написано в форме до него и вводит соответствующий символ. как это побороть?
Можно то же самое на jQuery реализовать. Для такой простой задачи можно на чистом javascript писать, но для более сложных задач удобнее jQuery
можете здесь читнуть: http://black-zorro.com/mediawiki/Часть_первая_про_jquery (http://black-zorro.com/mediawiki/%D0%A7%D0%B0%D1%81%D1%82%D1%8C_%D0%BF%D0%B5%D1%80%D0%B2%D0%B0%D1%8F_%D0%BF%D1%80%D0%BE_jquery)
это код того самого словаря, сейчас проблема такая: вводя слово из одной буквы выдаётся весь список слов на эту букву, как сделать, чтобы выводилась только статья соответствующая данной букве и желательно с учётом регистра
Цитировать
$configfile = "config.php";
require $configfile;
$db = mysql_connect("$host", "$username", "$password");
mysql_select_db("$databasename", $db);
if($word)
{
$getWord=mysql_query("SELECT word,definition FROM mdglossary WHERE word LIKE '%$word%' ORDER BY word", $db);
if($getWordArray=mysql_fetch_array($getWord))
{
echo "Here are the results for $word<br><dl>";
do
{
echo "<br><dt><b>";
printf($getWordArray["word"]);
echo "</b></dt><dd>";
printf($getWordArray["definition"]);
echo "</dd>";
}
while($getWordArray=mysql_fetch_array($getWord));
echo "</dl>";
}
else
{
echo "Sorry there are no matches for $word";
}
}
if($letter)
{
if($letter=="number")
{
$getWord=mysql_query("SELECT word,definition FROM mdglossary WHERE word LIKE '0%' OR word LIKE '1%' OR word LIKE '2%' OR word LIKE '3%' OR word LIKE '4%' OR word LIKE '5%' OR word LIKE '6%' OR word LIKE '7%' OR word LIKE '8%' OR word LIKE '9%' ORDER BY word", $db);
}
else
{
$getWord=mysql_query("SELECT word,definition FROM mdglossary WHERE word LIKE '$letter%' ORDER BY word", $db);
}
if($getWordArray=mysql_fetch_array($getWord))
{
echo "Here are the results for the letter <b>$letter</b><br><dl>";
do
{
echo "<br><dt><b>";
printf($getWordArray["word"]);
echo "</b></dt><dd>";
printf($getWordArray["definition"]);
echo "</dd>";
}
while($getWordArray=mysql_fetch_array($getWord));
echo "</dl>";
}
else
{
echo "Sorry, there are currently no words under <b>$letter</b>";
}
}
if(!$word&&!$letter)
{
/*echo "Welcome to the glossary!<br>";*/
}
if($word||$letter)
{
echo "<HR>";
}
/*echo "You can either type in the word you are looking for in the box below or browse by letter<br><br>";*/
?>
<a href="http://dic.gaeilge.ru/"><img src="http://dic.gaeilge.ru/img/home.png"/></a>
<?php
echo "<br><br><br>";
echo "Поиск<br>";
echo "<form name=\"getword\" action=\"index.php\" method=\"get\"><input name=\"word\" type=\"text\" value=\"\"> <input type=\"submit\" value=\"Cuardaigh\"></form>";
?>
Цитата: do50 от сентября 17, 2011, 22:17
{
$getWord=mysql_query("SELECT word,definition FROM mdglossary WHERE word LIKE '$letter%' ORDER BY word", $db);
}
Нужно убрать %, тогда только одну букву будет искать. А чтобы было регистрозависимо, то нужно регистрозависимую коллацию установить в базе данных.
П.С. Что же у вас отступов нет совсем, ничего ж непонятно...
Цитата: RawonaM от сентября 17, 2011, 22:26
П.С. Что же у вас отступов нет совсем, ничего ж непонятно...
спасибо!
я только учусь, понадёргал из разных скриптов, что то сам по книжкам писал, так что ещё не научился нормально оформлять...
не помогло!:(
Цитата: RawonaM от сентября 17, 2011, 22:26
регистрозависимую коллацию установить в базе данных.
:o это почти матом :D
Цитата: do50 от сентября 17, 2011, 22:30
не помогло!:(
Как не помогло?! Значит вероятно вы не получаете $letter. Из кода непонятно, какие переменные в каких случаях приходят. Вставьте в добавок перед строкой "if($word)" следущее:
if ($word && strlen($word)==1)
{
$letter = $word;
$word = '';
}
Выражаю скепсис по отношению к успешности того, что получится из этого проекта.
А, подождите, я не так прочитал что вам надо. Дайте еще раз посмотрю.
Вы хотите чтобы если слово из одной буквы, то выдавало только его, да? А если две буквы вводят? Три? Как вообще у вас задумано?
вот теперь работает!
приогромное спасибо!!!
Цитата: RawonaM от сентября 17, 2011, 22:55
А, подождите, я не так прочитал что вам надо. Дайте еще раз посмотрю.
Вы хотите чтобы если слово из одной буквы, то выдавало только его, да? А если две буквы вводят? Три? Как вообще у вас задумано?
всё правильно вы поняли, и теперь всё работает как надо, слово из одной буквы выводится в отдельной статьёй, а не списком из всех слов начинающихся с этой буквы.
ещё раз спасибо
Цитата: arseniiv от сентября 17, 2011, 22:54
Выражаю скепсис по отношению к успешности того, что получится из этого проекта.
спасибо за поддержку!
новая напасть, теперь набирая (кнопкой или с клавы) в поиске одну букву с акутом, выдаётся список слов, в которых есть эта буква. как это побороть, сделать так, чтобы выдавалось значение слова á, а не все слова, где эта буква встречается?
Попробуйте тут:
Цитата: RawonaM от сентября 17, 2011, 22:53
if ($word && strlen($word)==1)
strlen заменить на mb_strlen.
не помогло :(
Я так до сих пор и не врубился в ваш код, что там откуда принимается. Попробуйте поубирать проценты в запросах:
Цитата: do50 от сентября 17, 2011, 22:17
$getWord=mysql_query("SELECT word,definition FROM mdglossary WHERE word LIKE '$letter%' ORDER BY word", $db);
Цитата: do50 от сентября 17, 2011, 22:17
$getWord=mysql_query("SELECT word,definition FROM mdglossary WHERE word LIKE '%$word%' ORDER BY word", $db);
Процент означает, что добавляются любые символы. Если %$word% заменить на $word%, то по идее должно выбирать только с таким началом, но у вас там ничего не понятно.
Хэ. Разые SQL потерял оператор BEGINS? Его там не было, я путаю, да?
Ага, вроде бы не терял, т. е. такого не было.
Цитата: RawonaM от сентября 19, 2011, 16:18
Если %$word% заменить на $word%, то по идее должно выбирать только с таким
началом, но у вас там ничего не понятно.
получилось, но не полностью, теперь выдаёт не весь список слов, где в какой-либо позиции встречается эта буква, а только слова начинающиеся с этой буквы...
Цитата: do50 от сентября 19, 2011, 18:58
Цитата: RawonaM от сентября 19, 2011, 16:18Если %$word% заменить на $word%, то по идее должно выбирать только с таким
началом, но у вас там ничего не понятно.
получилось, но не полностью, теперь выдаёт не весь список слов, где в какой-либо позиции встречается эта буква, а только слова начинающиеся с этой буквы...
Ну следовательно уберите второй процент и оставьте только $word, будет искать точно. Причем это касается всех слов, не только однобуквенных.
да! теперь как надо,
а что слишком мудрёный код получился?
спасибо!!!
Если бы хотя бы отступы были, то можно было бы хотя бы быстро вникнуть, а так ломает :)
Мне только непонятно что мы там выше натворили с буквами, у меня ощущение, что что-то не так. Думаю что сейчас не работает список слов начинающихся на какую-то букву, выдаст слово.
Вот штуку нашел: http://www.decodephp.com/codecleaner/
Запостите последний код со всеми изменениями. Я посмотрю, что там вышло.
<?php
$configfile = "config.php";
require $configfile;
$db = mysql_connect("$host", "$username", "$password");
mysql_select_db("$databasename", $db);
if ($word && strlen($word)==1){
$letter = $word;
$word = '';
}
if($word){
$getWord=mysql_query("SELECT word,definition FROM mdglossary WHERE word LIKE '$word$' ORDER BY word", $db);
if($getWordArray=mysql_fetch_array($getWord)){
echo "<em>Ðåçóëüòàò ïîèñêà ñëîâà</em> <strong>$word:</strong><br><dl>";
do{
echo "<br><dt><b>";
printf($getWordArray["word"]);
echo "</b></dt><dd>";
printf($getWordArray["definition"]);
echo "</dd>";
}
while($getWordArray=mysql_fetch_array($getWord));
echo "</dl>";
} else{
echo "<em>Ïîèñê ñëîâà</em> <strong>$word</strong> <em>íå äàë ðåçóëüòàòîâ</em>";
}
}
if($letter){
if($letter=="number"){
$getWord=mysql_query("SELECT word,definition FROM mdglossary WHERE word LIKE '0%' OR word LIKE '1%' OR word
LIKE '2%' OR word LIKE '3%' OR word LIKE '4%' OR word LIKE '5%' OR word LIKE '6%' OR word LIKE '7%' OR word LIKE '8%' OR word
LIKE '9%' ORDER BY word", $db);
} else{
$getWord=mysql_query("SELECT word,definition FROM mdglossary WHERE word LIKE '$letter' ORDER BY word", $db);
}
if($getWordArray=mysql_fetch_array($getWord)){
echo "<em>Ðåçóëüòàò ïîèñêà</em> <strong>$letter:</strong><br><dl>";
do{
echo "<br><dt><b>";
printf($getWordArray["word"]);
echo "</b></dt><dd>";
printf($getWordArray["definition"]);
echo "</dd>";
}
while($getWordArray=mysql_fetch_array($getWord));
echo "</dl>";
} else{
echo "Ïîèñê ñëîâà <b>$letter</b> íå äàë ðåçóëüòàòîâ";
}
}
if(!$word&&!$letter){
/*echo "Welcome to the glossary!<br>";*/
}
if($word||$letter){
echo "<HR>";
}
/*echo "You can either type in the word you are looking for in the box below or browse by letter<br><br>";*/
?>
<a href="http://dic.gaeilge.ru/">
<img class="img2" src="http://dic.gaeilge.ru/img/home.png"
alt="">
</a>
<?php
echo "<br><br><br>";
echo "Ïîèñê<br>";
echo "<form name=\"getword\" action=\"index.php\" method=\"get\"><input name=\"word\" type=\"text\" value=\"\"> <input type=\"submit\" value=\"Cuardaigh\"></form>";
?>
Цитата: do50 от сентября 19, 2011, 19:35
if ($word && strlen($word)==1){
$letter = $word;
$word = '';
}
Это нужно убрать, должно работать без этого.
Цитата: do50 от сентября 19, 2011, 19:35
$getWord=mysql_query("SELECT word,definition FROM mdglossary WHERE word LIKE '$word$' ORDER BY word", $db);
У вас тут лишний доллар, вы уверены, что с ним работает?!
Цитата: do50 от сентября 19, 2011, 19:35
$getWord=mysql_query("SELECT word,definition FROM mdglossary WHERE word LIKE '$letter' ORDER BY word", $db);
Когда будете делать просмотр по буквам, здесь нужно будет добавить % после $letter, но как я понимаю пока еще этой функциональности у вас нет.
Цитата: RawonaM от сентября 19, 2011, 19:44
Это нужно убрать, должно работать без этого.
работает без этого, но необъяснимым образом сейчас получился поиск чувствительный к регистру!
Цитата: do50 от сентября 19, 2011, 20:01
Цитата: RawonaM от сентября 19, 2011, 19:44Это нужно убрать, должно работать без этого.
работает без этого, но необъяснимым образом сейчас получился поиск чувствительный к регистру!
Не думаю, что это из-за этого, можете вернуть и посмотреть, разницы не должно быть. Так вы ж вроде и хотели чувствительный к регистру.
Цитата: RawonaM от сентября 19, 2011, 20:05
Не думаю, что это из-за этого, можете вернуть и посмотреть, разницы не должно
быть.
да, этот кусочек кода влияет на чувствительность, правда я ещё не определился, нужно это или нет
Цитата: RawonaM от сентября 19, 2011, 19:44
У вас тут лишний доллар, вы уверены, что с ним работает?!
да, верно, второй доллар лишний
Цитата: do50 от сентября 19, 2011, 20:13
Цитата: RawonaM от сентября 19, 2011, 20:05Не думаю, что это из-за этого, можете вернуть и посмотреть, разницы не должно
быть.
да, этот кусочек кода влияет на чувствительность
Это для меня загадка, такого не должно быть. В таком случае нужно смотреть откуда приходят эти переменные $word и $letter, может это как-то прольет свет. Покажите config.php, пароли закройте.
<?php
//Configuration file
//Username - The username of the database you are going to use
$username="***";
//Password - The password of the database you are going to use
$password="***";
//Host - The host that the database is stored on (usually 'localhost')
$host="p17717.mysql.ihc.ru";
//Database name - The name of the database that your administrator has set up for you
$databasename="p17717_dic";
//If you don't know any of the above contact your system administrator
//Root to glossary - The complete (absolute) address to the glossary.
$roottoglossary="http://***.*******.ru/index.php";
$adminlogin = '***';
$adminpassw = '***';
?>
спасибо, а то я тупанул...
Очень странно. Этот файл (главный), вы вызывается напрямую или из какого-то другого php файла?
Неужто у вас register_globals включен...
Цитата: RawonaM от сентября 19, 2011, 21:31
Неужто у вас register_globals включен...
не знаю, а где посмотреть?
Цитата: do50 от сентября 19, 2011, 21:43
Цитата: RawonaM от сентября 19, 2011, 21:31Неужто у вас register_globals включен...
не знаю, а где посмотреть?
Нужно выполнить фукнцию phpinfo().
Например создать файл с таким содержимым:
<?php
phpinfo();
?>
Залить на сервер в доступную с сети директорию и открыть в браузере.
http://dic.gaeilge.ru/s.php
вот, что получилось...
Цитата: do50 от сентября 19, 2011, 21:52
вот, что получилось...
Да, register_globals включен. Это устаревшая директива, сегодня так не делают, тем более в версии 5.3 уже кажется она не поддерживается.
Значит $word вы получаете напрямую с формы. В общем, не может быть, чтобы этот отрывок кода влиял на регистрочувстивельность. Вы точно уверены?
нет, сейчас ни с ним, ни без него регистр не чувствует...
Цитата: do50 от сентября 19, 2011, 22:02
нет, сейчас ни с ним, ни без него регистр не чувствует...
Ну вот. :)
Пусть не чувствует, не нужно это.
Цитата: RawonaM от сентября 19, 2011, 22:06
Пусть не чувствует, не нужно это.
это правда, но что ж я накрутил, что это работало? :???
Цитата: do50 от сентября 19, 2011, 22:09
Цитата: RawonaM от сентября 19, 2011, 22:06Пусть не чувствует, не нужно это.
это правда, но что ж я накрутил, что это работало? :???
Вам наверное показалось. :)
Цитата: RawonaM от сентября 19, 2011, 22:11
Вам наверное показалось.
да, я ни-ни, уже две недели (времени нет), хотя... может устал просто :)
есть такой файл
Цитировать
<?php
function GetDataArt($art_id){
$sel = "SELECT `title`,`content` FROM `articles` WHERE `id` = '$art_id' LIMIT 1";
$query = mysql_query($sel);
if(!$query){
echo('Не удалось взять данные из БД!');
}
else{
if(mysql_num_rows($query)>0){
$res = mysql_fetch_array($query);
$title = $res['title'];
$content = $res['content'];
}
else{
$title = 'К сожалению, такая страница отсутствует на данном сайте!';
$page_title = 'К сожалению, такая страница отсутствует на данном сайте!';
}
$data_arr = array($title, $content);
return $data_arr;
}
}
?>
и вывод этого добра
Цитировать
<ul id="menu">
<li><a href="/"><span>Главная</span></a></li>
<li><a href="/index.php?art_id=2"><span>Поиск</span></a></li>
<li><a href="/index.php?art_id=3"><span>Регистрация</span></a></li>
<li><a href="/index.php?art_id=4"><span>Карта сайта</span></a></li>
<li><a href="/index.php?art_id=5"><span>О сайте</span></a></li>
</ul>
вопрос у меня такой, как сделать, чтобы активная ссылка выделялась?
Я не понял задачу. Вам нужно вывести то же меню, но выделить активную ссылку?
Я бы сделал так:
<ul id="menu">
<?php
$links = array(
array(1, 'Главная'),
array(2, 'Поиск'),
array(3, 'Регистрация'),
array(4, 'Карта сайта'),
array(5, 'О сайте')
);
foreach ($links as $ln) {
$url = ($ln[0] == 1) ? '/' : '/index.php?art_id=' . $ln[0];
$text = $ln[1];
$active = $ln[0] == (int)($_GET['art_id']);
if ($active) {
print "<li><a href='$url'><span><strong>$text</strong></span></a></li>";
}
else {
print "<li><a href='$url'><span>$text</span></a></li>";
}
}
?>
</ul>
wangjhenbai, спасибо! да, то, что нужно!!! ;up:
ой, только я вот запутался, а почему "Главная" не выделяется?
Ой, точно, я не подумал про «Главную».
Замените строчку
$active = $ln[0] == (int)($_GET['art_id']);
на
$active = $ln[0] == (isset($_GET['art_id']) ? (int)($_GET['art_id']) : 1);
Я чуть поправил код... (isset($_GET['art_id']) ? (int)($_GET['art_id']) : 1) должно быть в скобках.
Цитата: wangjhenbai от июля 3, 2012, 17:02
$active = $ln[0] == (isset($_GET['art_id']) ? (int)($_GET['art_id']) : 1);
не работает!
Parse error: syntax error, unexpected T_STRING in /home/p17717/www/nova.gaeilge.ru/include/siderbar.php on line 16
Мне сложно сказать, что там не так, но попробуйте заменить всю эту строчку, скажем, на:
if (isset($_GET['art_id']))
$active = $ln[0] == (int)($_GET['art_id']) : 1);
else
$active = $ln[0] == 1;
не-а, не работает, но спасибо! попробую разобраться
Цитировать
print "<li><a href='$url'><span><strong>$text</strong></span></a></li>";
}
else {
print "<li><a href='$url'><span>$text</span></a></li>";
}
тут функция print( ) обязательна или можно использовать echo( )?
А разве между ними есть какая-то разница?
Цитата: wangjhenbai от июля 3, 2012, 19:41
А разве между ними есть какая-то разница?
мне кажется, что echo( ) побыстрее работает или я ошибаюсь?
Нет, они работают с приблизительно одинаковой скоростью.
Разница между echo и print'ом в том, что echo может вывести сразу несколько строк:
echo 'a', 'b', 'c'; //print так не может
Цитата: wangjhenbai от июля 3, 2012, 19:59
Разница между echo и print'ом в том, что echo может вывести сразу несколько строк:
echo 'a', 'b', 'c'; //print так не может
ясно, спасибо вам за помощь
а с "Главной" так и не выходит :'(
еще один вопрос: нужно чтобы активные пункты были без подчёркивания, как и куда "text-decoration:none" прикрутить?
Цитата: do50 от июля 3, 2012, 20:06нужно чтобы активные пункты были без подчёркивания, как и куда "text-decoration:none" прикрутить?
К
a:hover,
a:active.
Простой путь:
Замените:
print "<li><a href='$url'><span><strong>$text</strong></span></a></li>";
на
print "<li><a href='$url' style='text-decoration: none;'><span><strong>$text</strong></span></a></li>";
Идеологически правильный путь (с разделением смысла и внешнего вида):
Замените:
print "<li><a href='$url'><span><strong>$text</strong></span></a></li>";
на
print "<li class='current'><a href='$url'><span>$text</span></a></li>";
А в файл css/style.css добавьте:
ul#menu li.current a {
text-decoration: none;
font-weight: bold;
}
Цитата: Bhudh от июля 3, 2012, 20:11
Цитата: do50 от июля 3, 2012, 20:06нужно чтобы активные пункты были без подчёркивания, как и куда "text-decoration:none" прикрутить?
К a:hover, a:active.
Я думал, под «активными» понимались «соответствующие открытой в данный момент странице», а не «те, над которыми наведена мышка»...
Соответствующие странице лучше жырным выделять.
Цитата: wangjhenbai от июля 3, 2012, 20:13
Я думал, под «активными» понимались «соответствующие открытой в данный момент странице», а не «те, над которыми наведена мышка»...
да, вы всё правильно поняли! ещё раз спасибо!
Цитата: Bhudh от июля 3, 2012, 20:15
Соответствующие странице лучше жырным выделять.
:fp:
Кому от этого лучше?
К тому же жирным они уже и так выделяются, см. тему выше.
Цитата: wangjhenbai от июля 3, 2012, 20:12
Идеологически правильный путь (с разделением смысла и внешнего вида):
Замените:
print "<li><a href='$url'><span><strong>$text</strong></span></a></li>";
на
print "<li class='current'><a href='$url'><span>$text</span></a></li>";
А в файл css/style.css добавьте:
ul#menu li.current a {
text-decoration: none;
font-weight: bold;
}
я примерно так и делал, но ставил двойные кавычки и сервер на меня ругался (почти матом! ;D)
Цитата: wangjhenbai от июля 3, 2012, 17:16
Мне сложно сказать, что там не так, но попробуйте заменить всю эту строчку, скажем, на:
if (isset($_GET['art_id']))
$active = $ln[0] == (int)($_GET['art_id']);
else
$active = $ln[0] == 1;
fixed
А, это потому что они уже внутри двойных кавычек, т.е. сервер думал, что строка заканчивается.
Если Вам очень нужны именно двойные кавычки, надо тогда их экранировать, т.е. поставить перед ними знак \":
print "<li class=\"current\"><a href=\"$url\"><span>$text</span></a></li>";
Ну, или заключить всю строку в одинарные кавычки, но тогда нельзя использовать подстановки с помощью доллара (приходится разделить строку на много строк и объединять их оператором .):
print '<li class="current"><a href="' . $url .'"><span>' . $text . '</span></a></li>';
Установите себе какой-нибудь редактор с подсветкой синтаксиса: тогда строки подсвечиваются одним цветом, а всё остальное — другим. И сразу будет понятно, где заканчивается строка. Удобно.
Цитировать
$active = $ln[0] == (isset($_GET['art_id']) ? (int)($_GET['art_id']) : 1);
вот это замечательно работает
Цитата: wangjhenbai от июля 3, 2012, 21:25
Установите себе какой-нибудь редактор с подсветкой синтаксиса: тогда строки подсвечиваются одним цветом, а всё остальное — другим. И сразу будет понятно, где заканчивается строка. Удобно.
у меня их два(!) notepad++ и PSPad editor :)
Цитата: wangjhenbai от июля 3, 2012, 21:25
Если Вам очень нужны именно двойные кавычки
нет, я не сумасшедший, одинарные, так одинарные
wangjhenbai, и остальные люди доброй воли, помогите теперь сделать многоуровневое меню на php + БД из вот этого:
Цитировать
<div id="nav">
<ul class="current"><!-- <<<== активное меню -->
<li><a href="###"><b>Главная</b></a>
<ul class="sub_active"><!-- <<<== активное подменю меню -->
<li class="current_sub"><a href="###">О нас</a></li><!-- <<<== активная страница -->
<li><a href="###">Контакты</a></li>
<li><a href="###">Карта сайта</a></li>
<li><a href="###">Как нас найти</a></li>
</ul>
</li>
</ul>
<ul class="select">
<li><a href="###"><b>Игры</b></a></li>
</ul>
<ul class="sub">
<li><a href="###">Азартные</a></li>
<li><a href="###">Гонки</a></li>
<li><a href="###">Стратегии</a></li>
<li><a href="###">Аркады</a></li>
<li><a href="###">Спорт</a></li>
<li><a href="###">RPG(Ролевые)</a></li>
<li><a href="###">Логические </a></li>
</ul>
<ul class="select">
<li><a href="###"><b>Погода</b></a>
<ul class="sub">
<li><a href="###">На сегодня</a></li>
<li><a href="###">На завтра</a></li>
<li><a href="###">На месяц</a></li>
<li><a href="###">На неделю</a></li>
<li><a href="###">На 85 лет вперед</a></li>
</ul>
</li>
</ul>
<ul class="select">
<li><a href="###"><b>Программы для ПК</b></a>
<ul class="sub">
<li><a href="###">Аудио-видео плееры</a></li>
<li><a href="###">Безопасность и защита</a></li>
<li><a href="###">Интернет</a></li>
<li><a href="###">Общение (Messeger/Chat/E-mail)</a></li>
<li><a href="###">Файловые менеджеры, архиваторы</a></li>
<li><a href="###">Экранные утилиты</a></li>
</ul>
</li>
</ul>
</div>
По-моему, тут нужен скорее css и js, чем php. Или нужно сделать его несовместимым со старыми броузерами, и чтобы все время что-то подгружалось?
Цитата: Python от июля 5, 2012, 08:38
По-моему, тут нужен скорее css и js
эта штука и без js отлично работает. все статьи находятся в БД, их нужно от туда выковыривать
Мы ничем не можем Вам помочь, так как не знаем структуру Вашей БД.
да какая там структура!
Цитировать
CREATE TABLE IF NOT EXISTS `articles` (
`id` int(11) NOT NULL auto_increment,
`title` varchar(255) NOT NULL,
`content` longtext NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;
вот и вся структура
В вашей структуре явно не хватает способа хранить иерархию. Т.е., предположим, у Вас хранятся такие вещи:
«Контакты», «Карта сайта», «Как нас найти», «Азартные» и т.д. А как программа узнает, что первые 3 принадлежат разделу «Главная», а последнее — разделу «Игры»?
Есть 2 способа:
- Если «Главная» и «Игры» сами являются страницами, добавьте поле parent; тогда у страницы «Азартные» поле parent будет равно полю id страницы «Игры» (т.е. это вложенная страница), а у страницы «Игры» поле parent будет NULL (или равно 0, как Вам нравится; т.е. это страница верхнего уровня): ALTER TABLE `articles` ADD COLUMN `parent` INTEGER NULL;
- Если «Главная» и «Игры» страницами не являются (т.е. обладают какими-то особыми свойствами), можете создать ещё одну таблицу, categories, а в таблицу articles добавить поле category; тогда «Игры» будет не страницей, а категорией; CREATE TABLE categories(`id` INTEGER AUTO_INCREMENT PRIMARY KEY, `title` VARCHAR(255) NOT NULL); ALTER TABLE `articles` ADD COLUMN `category` INTEGER NULL;
Если одна страница может входить в несколько категорий, тогда не добавляйте поле
`parent`/
`category`, а создайте таблицу
CREATE TABLE `article_parents`(`id` INTEGER AUTO_INCREMENT PRIMARY KEY, `article_id` INTEGER, `parent` INTEGER); или
CREATE TABLE `article_categories`(`id` INTEGER AUTO_INCREMENT PRIMARY KEY, `article_id` INTEGER, `category_id` INTEGER);Скажете, на каком варианте остановились. Только ж учитывайте, что Вам потом надо будет ещё и подобавлять в БД эти странички.
Ладно, я сейчас немного занят, так что не обечаю, что отвечу сразу.
«Главная» и «Игры» сами являются страницами, добавил
`parent`теперь таблица получилась такая:
Цитировать
CREATE TABLE IF NOT EXISTS `articles` (
`id` int(11) NOT NULL auto_increment,
`title` varchar(255) NOT NULL,
`content` longtext NOT NULL,
`parent` int(11) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;
правильно?
Цитата: do50 от июля 5, 2012, 16:44
правильно?
Да, вполне.
Итак, вот код. Код разбит на 2 части. Первая — функции.
- Функция get_item_link принимает номер (id) страницы и возвращает её адрес (пока что она просто возвращает /index.php?art_id=XXX, но функция нужна для того, чтобы потом структуру адреса можно было легко изменить),
- а функция print_menu принимает адрес текущей страницы и собственно выводит меню; она будет правильно работать только если вложенность двухуровневая: т.е. у подразделов не может быть своих подразделов.
Лучше всего разместить функции в каком-нибудь внешнем файле, например,
func.php, а в шаблоне только вызвать этот файл (с помощью строки
require 'func.php';).
<?php
function get_item_link($item_id) {
return "/index.php?art_id=$item_id";
}
function print_menu($current_id) {
// Найдём активный элемент
$query = "SELECT * FROM `articles` WHERE id = $current_id";
$res = mysql_query($query) or die("Невозможно прочитать родительский элемент текущей страницы!");
if (mysql_num_rows($res) >= 1) {
$obj = mysql_fetch_object($res);
if (is_null($obj->parent)) { //Выбран элемент верхнего уровня
$current_cat = (int)$current_id;
$current_sub = false;
}
else { //Выбран подэлемент
$current_cat = $obj->parent;
$current_sub = (int)$current_id;
}
mysql_free_result($res);
}
//Запишем все элементы верхнего уровня в $top_level_elements
$query = "SELECT `id`, `title` FROM `articles` WHERE (`parent` IS NULL) OR (`parent` = 0) ORDER BY id";
$res = mysql_query($query) or die("Невозможно прочитать элементы верхнего уровня!");
$top_level_elements = array();
if (mysql_num_rows($res) >= 1) {
while ($obj = mysql_fetch_object($res)) {
$top_level_elements[] = $obj;
}
mysql_free_result($res);
}
// Выведем поочерёдно каждый элемент верхнего уровня
foreach ($top_level_elements as $el) {
if ($el->id == $current_cat) { // Если текущий верхнеуровневый эл-т активен
$top_class_name = 'current';
$sub_class_name = 'sub_active';
}
else { // Неактивный
$top_class_name = 'select';
$sub_class_name = 'sub';
}
$url = get_item_link($el->id);
print "<ul class='{$top_class_name}'><li><a href='{$url}'><b>{$el->title}</b></a>";
// Запросим и выведем все подэлементы
$query = "SELECT `id`, `title` FROM `articles` WHERE `parent` = {$el->id}";
$res = mysql_query($query) or die("Невозможно прочитать подэлементы!");
if (mysql_num_rows($res) >= 1) { // Если подэлементы есть
print "<ul class='$sub_class_name'>";
while ($obj = mysql_fetch_object($res)) {
$li_class = ($obj->id == $current_sub) ? " class='current_sub'" : '';
$url = get_item_link($obj->id);
print "<li{$li_class} id='sub{$obj->id} / {$current_sub}'><a href='{$url}'>{$obj->title}</a></li>";
}
mysql_free_result($res);
print '</ul>';
}
print "</li></ul>";
}
}
// В этот файл можно натаскать ещё функций, не только эти.
Так как этот файл вызывается из другого файла, тег
?> в конце не нужен.
А в основном файле сделать вот так:
<?php require 'func.php'; ?>
<!-- Тут какой-нибудь ещё код... -->
<div id="nav">
<?php print_menu(isset($_GET['art_id']) ? (int)($_GET['art_id']) : 1); ?>
</div>
Я тестировал на такой базе данных:
-- phpMyAdmin SQL Dump
-- version 3.2.3
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Jul 05, 2012 at 06:31 PM
-- Server version: 5.1.40
-- PHP Version: 5.3.3
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
--
-- Database: `test`
--
-- --------------------------------------------------------
--
-- Table structure for table `articles`
--
CREATE TABLE IF NOT EXISTS `articles` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`content` longtext NOT NULL,
`parent` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=29 ;
--
-- Dumping data for table `articles`
--
INSERT INTO `articles` (`id`, `title`, `content`, `parent`) VALUES
(1, 'Главная', 'Просто главная страница.', NULL),
(2, 'О нас', 'О нас', 1),
(3, 'Контакты', 'Контакты', 1),
(6, 'Карта сайта', 'Карта сайта', 1),
(7, 'Как нас найти', 'Как нас найти', 1),
(8, 'Игры', 'Игры', NULL),
(9, 'Азартные', 'Азартные', 8),
(10, 'Гонки', 'Гонки', 8),
(11, 'Стратегии', 'Стратегии', 8),
(12, 'Аркады', 'Аркады', 8),
(13, 'Спорт', 'Спорт', 8),
(14, 'RPG (Ролевые)', 'RPG (Ролевые)', 8),
(15, 'Логические ', 'Логические ', 8),
(16, 'Погода', 'Погода', NULL),
(17, 'На сегодня', 'На сегодня', 16),
(18, 'На завтра', 'На завтра', 16),
(19, 'На месяц', 'На месяц', 16),
(20, 'На неделю', 'На неделю', 16),
(21, 'На 85 лет вперед', 'На 85 лет вперед', 16),
(22, 'Программы для ПК', 'Программы для ПК', NULL),
(23, 'Аудио-видео плееры', 'Аудио-видео плееры', 22),
(24, 'Безопасность и защита', 'Безопасность и защита', 22),
(25, 'Интернет', 'Интернет', 22),
(26, 'Общение (Messeger/Chat/E-mail)', 'Общение (Messeger/Chat/E-mail)', 22),
(27, 'Файловые менеджеры, архиваторы', 'Файловые менеджеры, архиваторы', 22),
(28, 'Экранные утилиты', 'Экранные утилиты', 22);
ух ты!!!
wangjhenbai, спасибо вам огромное!
буду разбираться, ещё раз благодарю!!!
не совсем про php, но...
для заковыристых шрифтов на сайте что лучше использовать cufón или подгружать через css?
IMHO CSS гораздо лучше, так как позволяет копировать текст.
Цитата: wangjhenbai от июля 7, 2012, 23:15
IMHO CSS гораздо лучше, так как позволяет копировать текст.
ну, мне только для оформления заголовков, хотя вы правы, css - лучше
Если для оформления заголовков — тогда всё равно, IMHO.
Цитата: wangjhenbai от июля 7, 2012, 23:22
Если для оформления заголовков — тогда всё равно, IMHO.
js притормаживает работу браузера, там итак много всего понакручено, так, что наверное, лучше через стили
народ, а как думаете, под ie7 надо сайт затачивать?
Только если при этом не теряется совместимость с остальными браузерами.
Цитата: do50 от июля 9, 2012, 10:28
народ, а как думаете, под ie7 надо сайт затачивать?
Вот здесь можно посмотреть статистику использования:
http://gs.statcounter.com/#browser_version-ww-monthly-201106-201206-bar
Как видим, IE 7 использует меньше 4% пользователей во всём мире. Нужна ли Вам эта аудитория — решайте сами.
Лично моё мнение такое:
- если речь идёт об оформлении или дополнительных функциях, реализовывать их для IE7 не стоит;
- но если есть какой-то баг, мешающий просто читать сайт в IE7, стоит его исправить.
Цитата: Python от июля 9, 2012, 10:36
Только если при этом не теряется совместимость с остальными браузерами.
через css ничего не теряется, но уж очень муторно
Вы про @font-face? А что там муторного-то, урл прописать да шрифты закачать...
Цитата: Bhudh от июля 9, 2012, 14:49
Вы про @font-face? А что там муторного-то, урл прописать да шрифты закачать...
Нетъ, конечно. Речь о созданіи отдѣльнаго CSS для IE7, а отдѣльнаго для остальныхъ браўзеровъ.
Цитата: Bhudh от июля 9, 2012, 14:49
Вы про @font-face? А что там муторного-то, урл прописать да шрифты закачать...
нет, в IE 7 картинки разъезжаются, везде всё нормально, а в IE 7 как попало
А, я думал, Вы про «заковыристые шрифты».
В IE вообще картинки показываются иначе, чем в других браузерах.
Везде нижний край картинки на уровне нижнего baselineʼа, а у них верхний на уровне верхнего. Поўбіўаў би!
Цитата: Bhudh от июля 9, 2012, 15:47
Поўбіўаў би!
+100500
ну его, этот IE 7, в 8 и в 9 работает, в сафари, опере и файерфоксе тоже и ладно,
можно для любителей IE 7 написать - "выпей йаду и убейся апстол" ;D
чёй та???
Там же написано, чё. Свойство или метод не поддерживаются. У мелкомягких свои аналоги для половины из них... А для некоторых и вовсе нету.
Цитата: Bhudh от июля 9, 2012, 17:37
Свойство или метод не поддерживаются.
чё делать то?
Добавлять ИЕ-совместимые.
Хотя странно... Там вроде только jquery, и при беглом просмотре ничего такого страшного не обнаруживается. Специалист нужен.
Кстати:
Цитата: //ru.wikipedia.org/wiki/jQueryПоследняя версия 1.7.2
А у вас там предыдущая. Может, обновить, вдруг уже починили... Она же как кроссплатформенная позиционируется...
Цитата: Bhudh от июля 9, 2012, 17:44
Кстати:Цитата: //ru.wikipedia.org/wiki/jQueryПоследняя версия 1.7.2
А у вас там предыдущая. Может, обновить, вдруг уже починили... Она же как кроссплатформенная позиционируется...
ваще с 1.7.2. работать не хочет
Кстати, у меня курсор не может добраться до ссылки «Экранные утилиты».
Фокус сбрасывается и снова появляется подменю «Главные».
Цитата: Bhudh от июля 9, 2012, 19:01
Кстати, у меня курсор не может добраться до ссылки «Экранные утилиты».
Фокус сбрасывается и снова появляется подменю «Главные».
под рамкой ничего не будет, это так, пока просто макет :yes:
А Lorem ipsum можно пока и на чё-й-либо ирландское заменить :negozhe:.
Цитата: Bhudh от июля 9, 2012, 19:22
А Lorem ipsum можно пока и на чё-й-либо ирландское заменить
ок, щас сделаю
лучше?
Круче! Ещё б пробел между ораментиком и текстом поставить.
Но до «Файловых манагеров» по-прежнему не дотянуться :(.
Цитата: Bhudh от июля 9, 2012, 20:14
Ещё б пробел между ораментиком и текстом поставить.
а было! куда делось?
Цитата: Bhudh от июля 9, 2012, 20:14
Но до «Файловых манагеров» по-прежнему не дотянуться
там ничего не будет!
Цитата: do50 от июля 9, 2012, 20:23а было! куда делось?
:donno:
Но в стилях что-то типа
.tb2_2 { padding-left: 1ex; } лучше прописать...
А ещё лучше (http://www.nova.gaeilge.ru/img/list_symbol.png) прописать не картинкой (да ещё и в другой клетке таблицы!), а стилем в виде
.tb2_2::before { content: url(img/list_symbol.png); }.
Цитата: Bhudh от июля 9, 2012, 20:25
А ещё лучше прописать не картинкой (да ещё и в другой клетке таблицы!), а стилем в виде
да, так лучше, спасибо!
Кстати, text-align: left; можно не писать, так как это дефолтное значение :eat:.
Цитата: Bhudh от июля 9, 2012, 20:56
Кстати, text-align: left; можно не писать, так как это дефолтное значение :eat:.
во всех браузерах дефолтно?
Цитата: http://htmlbook.ru/css3/beforeБраузер Internet Explorer до версии 9.0 работает только с нотацией :before, описанной в спецификации CSS 2.1.
Мммать!
Посмотрите, у Вас двойное двоеточие в ИЕ работает?
Цитата: do50 от июля 9, 2012, 21:00во всех браузерах дефолтно?
Не знаю ни одного браузера, где бы текстовый блок в клетке таблицы отображался справа...
Разве что арабский какой-нибудь...
Цитата: Bhudh от июля 9, 2012, 21:03
Посмотрите, у Вас двойное двоеточие в ИЕ работает?
не работает!
убрал одно двоеточие, заработало в ИЕ 8
Сделайте оба варианта.
Для совместимости. В CSS3 одинарные только для этого оставлены.
просто продублировать с двойным двоеточием?
Ага. Очень часто под разные браузеры разные вещи дублируются, как в JS, так и в CSS.
Лучше вообще разные css-ки иметь под это дело. Определять браузер клиента и какую нужно посовывать на стороне сервера.
Или хотя бы в спецблоках писать, как у Вас, кстати, и сделано!
Так что вариант с одним двоеточием суйте в ie.css и/или в ie7.css, а с двумя оставьте где надо.
Цитата: Bhudh от июля 9, 2012, 21:35
Так что вариант с одним двоеточием суйте в ie.css и/или в ie7.css, а с двумя оставьте где надо.
так и сделал ;up:
Ай-я-яй (http://validator.w3.org/check?uri=%5Burl=http://www.nova.gaeilge.ru&charset=%28detect+automatically%29&doctype=Inline&group=0)!
Цитата: Bhudh от июля 9, 2012, 21:47
Ай-я-яй (http://validator.w3.org/check?uri=%5Burl=http://www.nova.gaeilge.ru&charset=%28detect+automatically%29&doctype=Inline&group=0)!
а чевой та?
почему то инфа из БД на страницу не выводится :donno:
По ссылке Bhudh'a вообще битая ссылка проверяется.
http://validator.w3.org/check?uri=http://www.nova.gaeilge.ru&charset=(detect automatically)&doctype=Inline&group=0 (http://validator.w3.org/check?uri=http%3A%2F%2Fwww.nova.gaeilge.ru&charset=%28detect+automatically%29&doctype=Inline&group=0)
Цитата: Python от июля 10, 2012, 13:37
http://validator.w3.org/check?uri=http://www.nova.gaeilge.ru&charset=(detect automatically)&doctype=Inline&group=0 (http://validator.w3.org/check?uri=http%3A%2F%2Fwww.nova.gaeilge.ru&charset=%28detect+automatically%29&doctype=Inline&group=0)
было 86 ошибок, поисправлял маненько
Цитата: Python от июля 10, 2012, 13:39
Опере 9
так уже 12 есть, кто же 9 пользуется?
Извиняюсь, в Опере 9 таки работает. Не сразу заметил.
Цитата: Python от июля 10, 2012, 13:42
Извиняюсь, в Опере 9 таки работает. Не сразу заметил.
:negozhe:
Цитата: Python от июля 10, 2012, 13:34По ссылке Bhudh'a вообще битая ссылка проверяется.
Это не ссылка битая, это парсер урлов у RawonaMʼа недоделанный! >(
Цитата: do50 от июля 10, 2012, 13:39было 86 ошибок, поисправлял маненько
Слэши из
idʼов поубирайте, кривой скрипт их вставляет явно.
P. S. А вообще, на фига вам этот Strict? Ставьте
<!doctype html> и плюйте в потолок.
Bhudh, у меня статья из БД не выводится! :'(
Цитата: Bhudh от июля 10, 2012, 14:13
P. S. А вообще, на фига вам этот Strict? Ставьте <!doctype html> и плюйте в потолок.
вместо
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> просто
<!doctype html>?
Да. Это означает «вместо XHTML 1.0 Strict — HTML5».
Цитата: do50 от июля 10, 2012, 14:14Bhudh, у меня статья из БД не выводится!
Ну, это к Dēmētriō... :donno:
Я в базах ни в зуб копытом :(.
[От Вана Чжэньбо/Wáng Jhēngbái]
do50, не могли бы вы сказать мне Ваш email (например, написал мне письмо с него на dmymd@ya.ru) или дать какой-нибудь ещё способ с Вами связаться? Нынче на форуме вообще запретили писать гостям, а регистрировать нового клона из принципа не хочу, так что я не могу Вам ничего написать. [При этом вопросы и дальше постите на форуме, пожалуйста: я там их читаю, а ещё их там могут прочитать Bhudh, RawonaM, etc.]
Можете показать код, которым вы выводите содержимое статьи? Насколько я понимаю, вы пользуетесь функцией GetDataArt (которую вы постили тут: LF#38228/1375750 (http://lingvoforum.net/index.php/topic,38228.msg1375750.html#msg1375750))?
Я попробовал, используя эту функцию, вывести содержание текста:
<div id="content">
<?php $art = GetDataArt($_GET['art_id']); ?>
<span id="headline"><?=$art[0]?></span>
<?=$art[1]?>
</div>
И у меня всё прекрасно получилось.
Так что проблема где-то у Вас. Если хотите, запостите тот участок кода, где вы выводите текст — будем разбираться.
Цитата: arseniiv от июля 10, 2012, 18:05
Я попробовал, используя эту функцию, вывести содержание текста:
<div id="content">
<?php $art = GetDataArt($_GET['art_id']); ?>
<span id="headline"><?=$art[0]?></span>
<?=$art[1]?>
</div>
поправил, всё заработало!! спасибо!
вот, что сейчас имеем:
1. БД
--
-- Структура таблицы `articles`
--
CREATE TABLE IF NOT EXISTS `articles` (
`id` int(11) NOT NULL auto_increment,
`title` varchar(255) NOT NULL,
`content` longtext NOT NULL,
`parent` int(11) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=100 ;
--
-- Дамп данных таблицы `articles`
--
INSERT INTO `articles` (`id`, `title`, `content`, `parent`) VALUES
(1, 'Baile', '<p>На северо-западе Европы < ... >, Ирландия славилась своими арфистами, флейтистами и певцами.</p>', NULL),
(2, 'История|Stair', '<p>История|Stair</p>', 1),
(3, 'Музыка|Ceol', '<p>Музыка|Ceol</p>', 1),
(4, 'Архитектура|Ailtireacht', '<p>Архитектура|Ailtireacht</p>', 1),
(5, 'О нас|Fúinn', '<p>О нас|Fúinn</p>', 1),
(6, 'Контакты', '<p>Контакты</p>', 1),
(8, 'Ирландия|Éire', '<p>Ирландия|Éire</p>', NULL),
(9, 'Республика|Poblacht', '<p>Республика|Poblacht</p>', 8),
(10, 'Столица|Príomhchathair', '<p>Столица|Príomhchathair</p>', 8),
(11, 'Северная Ирландия|Tuaisceart Éireann', '<p>Северная Ирландия|Tuaisceart Éireann</p>', 8),
(16, 'Книги|Leabhair', '<p>Книги|Leabhair</p>', NULL),
(17, 'Ирландский|Gaeilge', '<p>Ирландский|Gaeilge</p>', 16),
(18, 'Шотландский|Gàidhlig', '<p>Шотландский|Gàidhlig</p>', 16),
(19, 'Мэнский|Gaelg', '<p>Мэнский|Gaelg</p>', 16),
(22, 'Ирландский язык|Gaeilge', '<p>Ирландский язык|Gaeilge</p>', NULL),
(23, 'Грамматика|Gramadach', '<p>Грамматика|Gramadach</p>', 22),
(24, 'Уроки|Ceachtanna', '<p>Уроки|Ceachtanna</p>', 22),
(25, 'Шрифты|Clónna', '<p>Шрифты|Clónna</p>', 22);
2. Файл functions.php
<?php
function GetDataArt($art_id){
$sel = "SELECT `title`,`content` FROM `articles` WHERE `id` = '$art_id' LIMIT 1";
$query = mysql_query($sel);
if(!$query){
echo('Не удалось взять данные из БД!');
}
else{
if(mysql_num_rows($query)>0){
$res = mysql_fetch_array($query);
$title = $res['title'];
$content = $res['content'];
}
else{
$title = 'К сожалению, такая страница отсутствует на данном сайте!';
$page_title = 'К сожалению, такая страница отсутствует на данном сайте!';
}
$data_arr = array($title, $content);
return $data_arr;
}
}
?>
3. Файл func.php
<?php
function get_item_link($item_id) {
return "/index.php?art_id=$item_id";
}
function print_menu($current_id) {
// Найдём активный элемент
$query = "SELECT * FROM `articles` WHERE id = $current_id";
$res = mysql_query($query) or die("Невозможно прочитать родительский элемент текущей страницы!");
if (mysql_num_rows($res) >= 1) {
$obj = mysql_fetch_object($res);
if (is_null($obj->parent)) { //Выбран элемент верхнего уровня
$current_cat = (int)$current_id;
$current_sub = false;
}
else { //Выбран подэлемент
$current_cat = $obj->parent;
$current_sub = (int)$current_id;
}
mysql_free_result($res);
}
//Запишем все элементы верхнего уровня в $top_level_elements
$query = "SELECT `id`, `title` FROM `articles` WHERE (`parent` IS NULL) OR (`parent` = 0) ORDER BY id";
$res = mysql_query($query) or die("Невозможно прочитать элементы верхнего уровня!");
$top_level_elements = array();
if (mysql_num_rows($res) >= 1) {
while ($obj = mysql_fetch_object($res)) {
$top_level_elements[] = $obj;
}
mysql_free_result($res);
}
// Выведем поочерёдно каждый элемент верхнего уровня
foreach ($top_level_elements as $el) {
if ($el->id == $current_cat) { // Если текущий верхнеуровневый эл-т активен
$top_class_name = 'current';
$sub_class_name = 'sub_active';
}
else { // Неактивный
$top_class_name = 'select';
$sub_class_name = 'sub';
}
$url = get_item_link($el->id);
print "<ul class='{$top_class_name}'><li><a href='{$url}'><b>{$el->title}</b></a>";
// Запросим и выведем все подэлементы
$query = "SELECT `id`, `title` FROM `articles` WHERE `parent` = {$el->id}";
$res = mysql_query($query) or die("Невозможно прочитать подэлементы!");
if (mysql_num_rows($res) >= 1) { // Если подэлементы есть
print "<ul class='$sub_class_name'>";
while ($obj = mysql_fetch_object($res)) {
$li_class = ($obj->id == $current_sub) ? " class='current_sub'" : '';
$url = get_item_link($obj->id);
print "<li{$li_class} id='sub{$obj->id} / {$current_sub}'><a href='{$url}'>{$obj->title}</a></li>";
}
mysql_free_result($res);
print '</ul>';
}
print "</li></ul>";
}
}
// В этот файл можно натаскать ещё функций, не только эти.
4. Файл siderbar.php
<ul id="menu">
<?php
$links = array(
array(1, 'Baile'),
array(2, 'История|Stair'),
array(3, 'Музыка|Ceol'),
array(4, 'Архитектура|Ailtireacht'),
array(5, 'О нас|Fúinn')
);
foreach ($links as $ln) {
$url = ($ln[0] == 1) ? '/' : '/index.php?art_id=' . $ln[0];
$text = $ln[1];
$active = $ln[0] == (isset($_GET['art_id']) ? (int)($_GET['art_id']) : 1);
if ($active) {
print "<li class='curr'><a href='$url'><span>$text</span></a></li>";
}
else {
print "<li><a href='$url'><span>$text</span></a></li>";
}
}
?>
</ul>
5. Файл contentr.php
<?php $art = GetDataArt($_GET['art_id']); ?>
<span id="headline"><?=$art[0]?></span>
<span id="text"><?=$art[1]?></span>
Проблема: при переходе на сайт с другого сайта активными являются кнопки (и в меню и в навигации) "Baile" и выводится сообщение: "К сожалению, такая страница отсутствует на данном сайте!".
при нажатии на кнопку "Baile" в меню - ничего не меняется, а при нажатии на "Baile" в навигации открывается начальная статья.
и еще вопрос: как правильно объединить файлы functions.php и func.php, я пробовал, не получилось
Моё письмо, видимо, не дошло, так что продублирую вот так.
Цитата: do50 от июля 11, 2012, 10:50
Проблема: при переходе на сайт с другого сайта активными являются кнопки (и в меню и в навигации) "Baile" и выводится сообщение: "К сожалению, такая страница отсутствует на данном сайте!".
при нажатии на кнопку "Baile" в меню - ничего не меняется, а при нажатии на "Baile" в навигации открывается начальная статья.
Проблема в том, что при просто открытии сайта $_GET['art_id'] не установлена. А он должен по умолчанию возвращать число 1, значение не установлено.
Это можно исправить, например, заменив вызов функции GetDataArt таким образом:
<?php $art = GetDataArt(isset($_GET['art_id']) ? $_GET['art_id'] : 1); ?>
<span id="headline"><?=$art[0]?></span>
<span id="text"><?=$art[1]?></span>Таким образом,
isset($_GET['art_id']) ? $_GET['art_id'] : 1 будет возвращать 1, если
isset($_GET['art_id']) неверно (т.е. если
$_GET['art_id'] не определена), и по умолчанию будет открываться страница с ID 1 (Baile).
НО! Тут ещё одна проблема.
Цитата: do50 от июля 11, 2012, 10:50
при нажатии на кнопку "Baile" в меню - ничего не меняется, а при нажатии на "Baile" в навигации открывается начальная статья.
Это плохо, что ссылки работают по-разному! Это значит, что ссылки в навигации и в меню разные. Гугл может подумать, что
nova.gaeilge.ru/index.php?art_id=1 и
nova.gaeilge.ru — разные страницы и будет считать, что на сайте повторяется контент — это может ухудшить рейтинг сайта (ну, на самом деле не сильно ухудшит, но всё же лучше всё сделать правильно).
Чтобы этого не было, поменяйте функцию get_item_link таким образом:
function get_item_link($item_id) {
return $item_id != 1 ? "/index.php?art_id=$item_id" : '/';
}Таким образом, если
$item_id будет равно 1, функция будет возвращать ссылку не
/index.php?art_id=1, а
/.
Кроме того, стоит поменять код в sidebar'е, чтобы он вызывал функцию get_item_link. Тогда, если вы внесёте изменения в структуру ссылок, то они изменятся сразу везде, не надо будет менять их в нескольких местах.
Чтобы унифицировать код, в sidebar.php замените эту строку:
$url = ($ln[0] == 1) ? '/' : '/index.php?art_id=' . $ln[0];
На такую:
$url = get_item_link($ln[0]);
При этом вызов сайдбара должен находиться после require 'functions.php' или include 'functions.php'. Если он находится после, перенесите его повыше.
Зачем Вам может понадобиться в будущем вносить изменения в структуру ссылок? Например, можно сделать вместо nova.gaelige.ru/index.php?art_id=3 ссылки вида nova.gaelige.ru/art-3.html (это очень легко делается с помощью mod_rewrite; если надо, могу рассказать как) или вообще вида nova.gaelige.ru/ailtireacht.html (это чуть сложнее, тут надо в базу добавлять новое поле, но всё равно достаточно легко).
Цитироватьи еще вопрос: как правильно объединить файлы functions.php и func.php,
я пробовал, не получилось
Думаю, проблема в скобках
<?php ... ?>. Главное — чтобы они не были вложены друг в друга. В готовом файле в идеале они должны встречаться один раз:
Лучше всего вот так:
<?php
function GetDataArt($art_id){
/* Тут код... */
}
function get_item_link($item_id) {
/* Тут код... */
}
function print_menu($current_id) {
/* Тут код... */
}
//Конец файла
Если закрывающая скобка стоит в конце файла, её можно не писать. Главное — чтобы не было
<?php внутри
<?php.
что то у меня не получается
1. в func.php поменял return "/index.php?art_id=$item_id"; на return $item_id != 1 ? "/index.php?art_id=$item_id" : '/';
2. в sidebar.php поменял $url = ($ln[0] == 1) ? '/' : '/index.php?art_id=' . $ln[0]; на $url = get_item_link($ln[0]);
3. include 'functions.php' с самого начала находился в самом верху
теперь "Baile" и в навигации и в сайдербаре выдаёт сообщение "К сожалению, такая страница отсутствует на данном сайте!"
Цитата: fujhi от июля 12, 2012, 08:58
Моё письмо, видимо, не дошло
можно ещё сюда мылить
do50@ya.ru
Цитата: do50 от июля 12, 2012, 13:23
что то у меня не получается
Вы всё правильно сделали, но ещё надо вот это (в файле
contentr.php):
Цитата: do50 от июля 11, 2012, 10:50
<?php $art = GetDataArt($_GET['art_id']); ?>
<span id="headline"><?=$art[0]?></span>
<span id="text"><?=$art[1]?></span>
Замените на вот это:
Цитата: fujhi от июля 12, 2012, 08:58
<?php $art = GetDataArt(isset($_GET['art_id']) ? $_GET['art_id'] : 1); ?>
<span id="headline"><?=$art[0]?></span>
<span id="text"><?=$art[1]?></span>
Иными словами, было: «вызвать
GetDataArt со значением
$_GET['art_id']», стало: «вызвать
GetDataArt со значением
$_GET['art_id'], если значение $_GET['art_id'] установлено, иначе со значением 1».
ну, да! конечно же!!
ура, всё работает!!!
Цитата: fujhi от июля 12, 2012, 08:58
Вам может понадобиться в будущем вносить изменения в структуру ссылок? Например, можно сделать вместо nova.gaelige.ru/index.php?art_id=3 ссылки вида nova.gaelige.ru/art-3.html (это очень легко делается с помощью mod_rewrite; если надо, могу рассказать как) или вообще вида nova.gaelige.ru/ailtireacht.html (это чуть сложнее, тут надо в базу добавлять новое поле, но всё равно достаточно легко).
вот эти моменты очень интересны!
Цитата: do50 от июля 12, 2012, 14:57
Цитата: fujhi от июля 12, 2012, 08:58
Вам может понадобиться в будущем вносить изменения в структуру ссылок? Например, можно сделать вместо nova.gaelige.ru/index.php?art_id=3 ссылки вида nova.gaelige.ru/art-3.html (это очень легко делается с помощью mod_rewrite; если надо, могу рассказать как) или вообще вида nova.gaelige.ru/ailtireacht.html (это чуть сложнее, тут надо в базу добавлять новое поле, но всё равно достаточно легко).
вот эти моменты очень интересны!
Если вкратце, сервер может «переписывать» запросы по определённым правилам.
Например, когда у меня в блоге посетитель заходит на страницу
http://ablog.site90.com/page-3.html
Сервер автоматически переписывает
page-3.html
на
_read.php?pg=3
То есть вызывается страница http://ablog.site90.com/_read.php?pg=3
Я использую сервер Apache, и у меня вот такие простые настройки .htaccess:
# Do not remove this line, otherwise mod_rewrite rules will stop working
RewriteBase /
RewriteEngine On
# Rewrite URLs from nice ones to ugly :)
RewriteRule ^page-([0-9]+).html$ _read.php?pg=$1
RewriteRule ^post-([0-9]+).html$ _read.php?entry=$1
В разных серверах правила переписывания задаются по-разному. Обычно все используют сервер Apache. Я дальше буду описывать работу именно с ним. Если у Вас какой-то другой сервер, например, MS IIS, там правила переписывания надо задавать
не так (хотя это тоже возможно — почти во всех серверах есть такая опция).
В Apache должен быть установлен модуль
mod_rewrite и должна быть включена поддержка настроек в файле
.htaccess. Это зависит только он настроек хостинга, но почти на всех хостингах оно включено.
Если на Вашем сервере уже есть файл
.htaccess, скопируйте его к себе на компьютер и редактируйте. Если нет — создайте. В «Проводнике» Windows могут быть проблемы с созданием файлов, которые начинаются с точки; используйте Total Commander или командную строку.
В этом файле обязательны 3 строки:
RewriteBase /(Если вы хотите переписывать внутри только какой-то папки, например,
nova.gaelige.ru/slon/..., то поместите файл
.htaccess в эту папку и замените
/ на
/slon/)
RewriteBase должна встречаться только один раз. Если вы редактируете уже готовый файл
.htaccess, убедитесь, что там уже нет RewriteBase.
Дальше, нужна ещё одна строка:
RewriteEngine OnЭта строка означает, что правила переписывания на сервере включены. Эта строка тоже должна встречаться только один раз: если вы редактируете уже готовый
.htaccess, убедитесь, что там уже нет RewriteEngine. Если там встечается
RewriteEngine Off, замените его на
On.
После этого идут правила замен:
RewriteRule. Пишутся они так:
RewriteRule что_заменять чем_заменятьЧто_заменять — это регулярное выражение. В что_заменять может использоваться подстрока из что_заменять с помощью $N, где N — номер подстроки
Если вы с ними не знакомы, то регулярные выражения — это своего рода шаблоны текстовых строк.
Буквы в шаблоне соответствуют сами себе. То есть
RewriteRule l f
Заменит все f на l (то есть, когда пользователь откроет страницу luck.php, ему откроется fuck.php).
Звёздочка после выражения значит «повторять от нуля до бесконечности». Так, такое выражение:
RewriteRule go*gle g
заменит «ggle», «gogle», «google», «gooogle», «goooogle» на «g».
Плюсик значит «повторять от 1 раза до бесконечности»:
RewriteRule goo+gle g
заменит «google», «gooogle» на «g», но не тронет gogle и ggle.
Вопросик значит «либо ни разу, либо 1 раз»:
RewriteRule goo+gle g
заменит «google», «gooogle» на «g», но не тронет gogle и ggle.
Можно работать сразу с несколькими символами, окружив их скобкой:
RewriteRule lol(lol)+ lol
Заменит lollol, lollollol, lollollol на lol. Просто (lol)+ написать нельзя было бы, так как тогда сервер будет заменять lol на себя же до бесконечности.
Чтобы указать «любой символ», надо поставить точку:
RewriteRule g.+gle g
Заменит «gagle», «g9gle», «gZZgle» и так далее.
Чтобы спецсимволы (?*+.[]^$) потеряли своё значение, надо поставить перед ними обратную косую черту:
RewriteRule \.html .php
Заменит все .html на .php (обратите внимание: строка чем_заменять регуляркой не является).
Когда пользователь обратиться к about.html, будет прочитано about.php
Чтобы замены выполнялись только в конце, надо поставить после регулярного выражения знак доллара:
RewriteRule \.html$ .php
Заменит все .html на .php (обратите внимание: строка чем_заменять регуляркой не является).
Когда пользователь обратиться к about.html.html, будет прочитано about.html.php
Чтобы замены выполнялись только в начале файла, поставьте перед регулярным выражением знак крышечки:
RewriteRule ^art- index.php?art_id=
Заменит «art-» на «index.php?art_id=», но только в начале предложения. Если пользователь наберёт http://nova.gaelige.ru/art-10, ему откроется http://nova.gaelige.ru/art_id=10.
Чтобы заменить всю строку, надо использовать ^ и $ вместе:
RewriteRule ^art-10.html$ index.php?art_id=10
Заменит «art-10.html» на «index.php?art_id=10». Если пользователь наберёт
http://nova.gaelige.ru/art-10.html, ему откроется http://nova.gaelige.ru/art_id=10, но другие страницы это не заденет.
Чтобы выделить в строке подстроку, используются скобки. Скобки нумеруются (по открывающей) с единицы. Потом к скобкам можно обращаться с помощью доллара:
Чтобы заменить всю строку, надо использовать ^ и $ вместе:
RewriteRule ^art-(.+).html$ index.php?art_id=$1
Заменит «art-XXX.html» на «index.php?art_id=XXX». Т.е. если пользователь наберёт http://nova.gaelige.ru/art-XXX.html, ему откроется http://nova.gaelige.ru/art_id=XXX, но другие страницы это не заденет.
Чтобы заменить только цифру, можно написать [0-9]:
RewriteRule ^art-([0-9]+).html$ index.php?art_id=$1
Подробнее про регулярные выражения можете почитать тут: http://www.php.net/manual/ru/reference.pcre.pattern.syntax.php (http://www.php.net/manual/ru/reference.pcre.pattern.syntax.php).
Чтобы заменять art-333.html на
index.php?art_id=333, напишите такое правило:
RewriteRule ^art-([0-9]+).html$ index.php?art_id=$1Потом, когда вы сделаете, что ссылки
art-333.html работают, можно будет переписать get_item_link, чтобы он возвращал ссылки в новом формате.
//Не заменяйте это, пока новый формат не будет работать!
function get_item_link($item_id) {
return $item_id != 1 ? "/art-{$item_id}.html" : '/';
}
Названия типа blablabla.html сделать сложнее. Надо переписывать blablabla.html в index.php?art_name=blablabla, а затем в php-файле получать номер статьи по URL-у. Но где вообще взять соотношения blablabla<->номер? Надо добавлять новое поле в базу данных. Короче, сначала разберитесь со ссылками вида art-2324.html, а потом могу объяснить, как сделать буквенные.
ок, спасибо! буду разбираться
Кстати! Я только что заметил, что у Вас не Apache, у Вас Litespeed Web Server.
Он тоже умеет переписывать адреса (http://www.litespeedtech.com/docs/webserver/config/rewrite/ (http://www.litespeedtech.com/docs/webserver/config/rewrite/)), по идее он совместим с Apache, но что-то может отличаться.
Я тут почитал, что «LiteSpeed Web Server can operate with an Apache configuration file. Most commonly used Apache features have been implemented», так что всё, что написано Выше, будет верно и у Вас. :yes:
;up: замечательно!
с ЧПУ решил разобраться попозже (хочется всё таки понять как следует), а сейчас такой вопрос:
на странице Книги -> Ирландский будут размещены мини анонсы, литературы набралось много, как сделать так, что бы на одной странице размещалось 7 анонсов, на следующей ещё 7 и так далее (все они относятся к Книги -> Ирландский). и ещё, у каждого мини анонса будет ссылка на страницу с полным описанием книги и ссылкой на скачивание, как лучше это сделать?
Создайте дополнительную таблицу. Сделайте там какие-нибудь поля: как минимум поле id (его желательно делать для всех вещей), title и description. Можно ещё поле, скажем, с именем файла картинки обложки (текст); а можно и саму картинку в базу данных запихнуть (тогда используйте тип BLOB). Можно добавить поле с датой добавления книги на сайт, если захотите показывать самое новое сверху.
Кроме того, надо различать, где книги будут для ирландского, где — для шотландского... Поэтому надо добавить колонку art_id. Чтобы у книг по ирландскому art_id было равно 17, у книг по шотландскому — 18, у книг по мэнскому — 19.
Самым простым вариантом было бы назвать таблицу books — но в будущем вы, возможно, захотите использовать тот же код для каких-то других вещей, не только для книг (например, на странице «Архитектура» может быть список красивых архитектурных памятников, на странице шрифты — обзор основных гарнитур и т.д). Так что предлагаю назвать таблицу items, entries или как-нибудь так. Думаю, так логичнее.
Когда создадите таблицу, покажите её схему, тогда можно будет двигаться дальше.
вот, что получилось:
Структура таблицы `items`
--
CREATE TABLE IF NOT EXISTS `items` (
`id` int(11) NOT NULL auto_increment,
`title` varchar(250) NOT NULL,
`description` text NOT NULL,
`context` longtext NOT NULL,
`art_id` varchar(250) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
Цитата: do50 от июля 13, 2012, 17:00
`art_id` varchar(250) NOT NULL,
Сделайте
int NOT NULL. Так как в таблице
articles у вас
id — это число, то и тут нужно число:
art_id может содержать только те поля, которые содержит
id в
articles. Не имеет смысла создавать книги, которые не принадлежат какому-то разделу (если имеет, можно тогда сделать
int NULL; в любом случае, строка, да ещё и на 250 символов — это ужасная трата памяти).
Сейчас ещё напишу.
готово
Знате, что мне у Вас Я, правда, не понял, что такое
context, ну да не важно. ;D
CREATE TABLE IF NOT EXISTS `items` (
`id` int(11) NOT NULL auto_increment,
`title` varchar(250) NOT NULL,
`description` text NOT NULL,
`context` longtext NOT NULL,
`art_id` int NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
INSERT INTO `items`(`title`, `description`, `context`, `art_id`)
VALUES
('Урок от Романуса 1', 'Увы, удалены, но некоторые их сохранили', '<p>Так-то</p>', 17),
('Урок от Романуса 2', 'Увы, удалены, но некоторые их сохранили', '<p>Так-то</p>', 17),
('Урок от Романуса 3', 'Увы, удалены, но некоторые их сохранили', '<p>Так-то</p>', 17),
('Урок от Романуса 4', 'Увы, удалены, но некоторые их сохранили', '<p>Так-то</p>', 17),
('Урок от Романуса 5', 'Увы, удалены, но некоторые их сохранили', '<p>Так-то</p>', 17),
('Урок от Романуса 6', 'Увы, удалены, но некоторые их сохранили', '<p>Так-то</p>', 17),
('Урок от Романуса 7', 'Увы, удалены, но некоторые их сохранили', '<p>Так-то</p>', 17),
('Урок от Романуса 8', 'Увы, удалены, но некоторые их сохранили', '<p>Так-то</p>', 17),
('Урок от Романуса 9', 'Увы, удалены, но некоторые их сохранили', '<p>Так-то</p>', 17),
('Урок от Романуса 10', 'Увы, удалены, но некоторые их сохранили', '<p>Так-то</p>', 17),
('Урок от Романуса 11', 'Увы, удалены, но некоторые их сохранили', '<p>Так-то</p>', 17),
('Урок от Романуса 12', 'По-моему их было меньше, но какая разница?', '<p>Так-то</p>', 17),
('Урок от Романуса 13', 'Всё равно это просто пример...', '<p>Так-то</p>', 17),
('Урок от Романуса 14', 'Хе-хе.', '<p>Так-то</p>', 17),
('Урок от Романуса 15', 'Увы, удалены, но некоторые их сохранили', '<p>Так-то</p>', 17),
('Урок от Романуса 16', 'Увы, удалены, но некоторые их сохранили', '<p>Так-то</p>', 17),
('Урок от Романуса 17', 'Увы, удалены, но некоторые их сохранили', '<p>Так-то</p>', 17),
('Урок от Романуса 18', 'Увы, удалены, но некоторые их сохранили', '<p>Так-то</p>', 17),
('Урок от Романуса 19', 'Увы, удалены, но некоторые их сохранили', '<p>Так-то</p>', 17),
('Урок от Романуса 20', 'Увы, удалены, но некоторые их сохранили', '<p>Так-то</p>', 17),
('Урок от Романуса 21', 'Увы, удалены, но некоторые их сохранили', '<p>Так-то</p>', 17),
('Урок от Романуса 22', 'Увы, удалены, но некоторые их сохранили', '<p>Так-то</p>', 17),
('Книга по шотландскому 1', 'Надо же и шотландский проверить', '<p>Так-то</p>', 18),
('Книга по шотландскому 2', 'Lorem ipsum dolor sit amet', '<p>Так-то</p>', 18),
('Книга по шотландскому 3', 'Сonsectetur adipisicing elit', '<p>Так-то</p>', 18),
('Книга по шотландскому 4', 'Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua', '<p>Так-то</p>', 18),
('Книга по шотландскому 5', 'Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat', '<p>Так-то</p>', 18),
('Книга по шотландскому 6', 'Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur', '<p>Так-то</p>', 18),
('Книга по шотландскому 6', 'Excepteur sint occaecat cupidatat non proident', '<p>Так-то</p>', 18),
('Книга по шотландскому 7', 'sunt in culpa qui officia deserunt mollit anim id est laborum', '<p>Так-то</p>', 18),
('Книга по шотландскому 8', 'Просто чтобы и на второй странице что-то было', '<p>Так-то</p>', 18),
('Книга по мэнскому', 'Будем считать, что она одна', '<p>Так-то</p>', 19);
Дальше. Нужно определять, какие элементы показывать: 1—7, 8—14, 15—21... Есть два способа: указывать в запросе номер страницы (то есть 1—7 — это 1, 8—14 — это 2) или номер первого элемента (то есть 1—7 — это 1, 8—14 — это 8, и т.д.). В принципе, разницы никакой. Я предлагаю указывать номер страницы.
Назовём переменную
page. Тогда мы будем к ней обращаться
$_GET['page'], а адрес страницы примет вид
index.php?art_id=XXX&page=YYY. Если
page не указан, считаем, что пользователю нужна первая страница.
Для начала сделаем получение всех элементов с данной страницы. Функция будет принимать номер статьи, номер страницы (по умолчанию 1) и число сообщений на странице (по умолчанию 7), а возвращать — массив с элементами:
function get_art_items($art_id, $page = 1, $articles_per_page = 7) {
//Проверим, получены ли правильные данные:
$art_id = (int)$art_id;
$page = (int)$page ? (int)$page : 1;
$articles_per_page = (int)$articles_per_page ? (int)$articles_per_page : 7;
//Определяем, сколько пропустить: ($page - 1) страниц
$offset = ($page - 1) * $articles_per_page;
$q = "SELECT * FROM `items` WHERE `art_id` = $art_id LIMIT $articles_per_page OFFSET $offset";
$r = mysql_query($q) or die('Невозможно взять данные из БД!');
$items = array();
if ($r && mysql_num_rows($r) > 0) {
while ($item = mysql_fetch_assoc($r)) {
$items[] = $item;
}
mysql_free_result($r);
return $items;
}
else {
return false;
}
}
Эта функция возвращает массив. К элементам массива надо обращаться
- ['id'][/tt],
- ['title'], [1]['description'], [1]['context'], [2]['id'], [2]['context']...
Разместите эту функцию в файл с функциями.
Ещё создадим функцию get_items_count, возвращающую число элементов у страницы (разместите её рядом с первой):
function get_items_count($art_id) {
$art_id = (int)$art_id;
$q = "SELECT COUNT(*) AS c FROM `items` WHERE art_id = $art_id";
$r = mysql_query($q) or die('Невозможно взять данные из БД!');
if ($r && mysql_num_rows($r) > 0) {
$row = mysql_fetch_assoc($r);
mysql_free_result($r);
return $row['c'];
}
else {
return false;
}
}
К статьям можно будет обращаться index.php?art_id=17, а к остальным страницам статьи — index.php?art_id=17&page=2 и так далее.
Надо отразить это в функции get_item_link. Изменим её так, чтобы она принимала 2 значения — номер статьи и номер страницы с айтемами. Кстати, получается, что она нелогично названа (надо бы get_article_url), но чтобы её переназвать, придётся искать все места в коде, где она используется...
Итак, изменим её:
function get_item_link($item_id, $page_num = 1) {
$parts = array();
if ($item_id != 1)
$parts[] = 'art_id=' . $item_id;
if ($page_num != 1)
$parts[] = 'page=' . $page_num;
if (count($parts) == 0)
return '/index.php';
else
return '/index.php?' . implode('&', $parts);
}
Теперь нужно сделать вывод сообщений в файле, где выводится список событий (contentr.php). После основного кода разместите что-то такое:
<?php
//Так как мы проверяем данные в самой функции get_art_items, мы можем не провеять на isset
//А чтобы не вылезло предупреждение, если переменная не объявлена, ставим знак @:
$items = get_art_items(@$_GET['art_id'], @$_GET['page']);
//Если со страницей не связаны никакие элементы, не будем из выводить:
if ($items):
?>
<div class="items">
<?php foreach($items as $item): ?>
<div class="item">
<h4><?=$item['title']?></h4>
<p class='description'><?=$item['description']?></p>
<?=$item['context']?>
</div>
<?php endforeach; ?>
<?php $num_items = get_items_count(@$_GET['art_id']);
$num_pages = $num_items / 7;
//увеличим на 1, если остаток от деления не равен 0
if ($num_items % 7) $num_items++;
if ($num_pages): //если страница 1 или страниц нет, не выводим список страниц
?>
<div class='pagenumbers'>
<?php
for ($i = 1; $i <= $num_pages; $i++) {
$page_url = get_item_link(@$_GET['art_id'], $i);
//Не лучший способ проверить, что страница равна текущей:
if ($i == (@$_GET['page'] < 1 ? 1 :(int)(@$_GET['page'])))
print $i . ' ';
else
print "<a href='$page_url'>$i</a> ";
}
?>
</div>
<?php endif; ?>
</div>
<?php
endif;
?>
Теперь на каждой странице выводится список элементов, связанных со страницей.
fujhi, спасибо огромное!!! как разберусь, сразу отпишусь
Вообще говоря, код лучше отрефакторить, т.е. поправить, чтобы он делал то же самое, но был понятнее для человека:
- везде, где встречается get_item_link, заменить его на get_article_link (так как item у нас теперь значит вполне конкретную вещь, а не статью, можно не понять, что делает эта функция);
- где-нибудь в начале файла объявить глобальные переменные наподобие $art_id ($art_id = @_GET['art_id'] < 1 ? 1 : (int)(@$_GET['art_id']);) и $page_num ($page_num = @$_GET['page'] < 1 ? 1 : (int)(@$_GET['page']);), а потом заменить все обращения к $_GET на одну из этих переменных.
Если так сделать, то можно упростить код для понимания человеком. Например, вот это:
Цитата: fujhi от июля 13, 2012, 18:43
$page_url = get_item_link(@$_GET['art_id'], $i);
//Не лучший способ проверить, что страница равна текущей:
if ($i == (@$_GET['page'] < 1 ? 1 :(int)(@$_GET['page'])))
print $i . ' ';
else
print "<a href='$page_url'>$i</a> ";
Станет таким:
Цитата: fujhi от июля 13, 2012, 18:43
$page_url = get_article_link($art_id, $i);
if ($i == $page_num)
print $i . ' ';
else
print "<a href='$page_url'>$i</a> ";
Так делать не обязательно, но желательно — чтобы потом легче разбираться было. Вообще, рефакторинг надо время от времени делать.
fujhi, а куда в таблице items нужно вставить код страницы, которую нужно вывести?
что то я не так сделал, после изменений получил:
Parse error: syntax error, unexpected $end in /home/p17717/www/nova.gaeilge.ru/func.php on line 118
Цитата: do50 от июля 20, 2012, 19:26
fujhi, а куда в таблице items нужно вставить код страницы, которую нужно вывести?
Всё наоборот: страницы выводят итемы, а не итемы страницы.
Код страницы, к которой принадлежит item, я предлагаю писать в поле art_id из таблицы items. Но вообще-то это Ваша база, как сделаете, так и будет.
Цитировать
Parse error: syntax error, unexpected $end in /home/p17717/www/nova.gaeilge.ru/func.php on line 118
В
func.php не закрыт какой-то код: скорее всего не хватает
} (либо
endif;, либо
endforeach;, либо чего-то подобного).
запутался :'(
т.е. в art_id сохраняем html код страницы 1 с книгами 1 -7?
func.php исправил, сообщений об ошибках нет....
Цитата: do50 от июля 20, 2012, 20:19
запутался :'(
т.е. в art_id сохраняем html код страницы 1 с книгами 1 -7?
А! Нет, в art_id сохраняем 17, 18, 19... В зависимости от того, о каком языке книга.
Сам код описаний, наверное, в context... Или в description. Вы же, создавая эти поля, представляли, для чего они. Если честно, я не знаю, зачем нужны 2 этих поля.
Вот какой я написал код вывода одного элемента:
<?php foreach($items as $item): ?>
<div class="item">
<h4><?=$item['title']?></h4>
<p class='description'><?=$item['description']?></p>
<?=$item['context']?>
</div>
Если что-то выводитяся не так, правьте это место.
context и планировался для этого, страничка вывелась, пока всё нормально, огромное спасибо!!!
книги с первой по седьмую разместил в context id 1, следующие в context id 2, но они все остались на одной страницы, опять я что то напутал?
Цитата: do50 от июля 22, 2012, 11:43
книги с первой по седьмую разместил в context id 1, следующие в context id 2, но они все остались на одной страницы, опять я что то напутал?
Ничего не понял. :(
По идее они сами должны разбиваться на страницы по 7, без дополнительного указания на номер страницы. :???
А можете дать кусок кода, ответственный за вывод, как он теперь выглядит?
момент, кажется я понял в чём дело...
fujhi, с той проблемой разобрался. а как теперь сделать переход со страницы с анонсами к страницы с конкретной книгой?
Для начала её нужно создать, эту страницу с конкретной книгой.
У меня сейчас нет времени подробно объяснять, пусть кто-то другой пишет.
ок
странно, почему то шрифты не выводятся на соответствующую страницу, я сохранил их в таблице items c art_id 22 :(
22 — это «Ирландский язык», туда они прекрасно выводятся:
http://nova.gaeilge.ru/index.php?art_id=22
Шрифты — это 25.
Цитата: fujhi от июля 26, 2012, 11:41
22 — это «Ирландский язык», туда они прекрасно выводятся:
http://nova.gaeilge.ru/index.php?art_id=22
Шрифты — это 25.
:wall:
oops! i did it again...(c)
Кстати, было бы логично хранить ссылки «Скачать» в отдельном поле в базе данных, IMHO. И не выводить ссылку, если поле пустое.
Цитата: fujhi от июля 26, 2012, 11:47
Кстати, было бы логично хранить ссылки «Скачать» в отдельном поле в базе данных, IMHO. И не выводить ссылку, если поле пустое.
пустых то не будет, нет смысла делать анонс, если нет материала для скачивания
Цитата: do50 от июля 26, 2012, 12:44нет смысла делать анонс, если нет материала для скачивания
:o Да Вы идеалист! :=
Цитата: Bhudh от июля 26, 2012, 17:29
Цитата: do50 от июля 26, 2012, 12:44нет смысла делать анонс, если нет материала для скачивания
:o Да Вы идеалист! :=
каюсь!
разобрался и сделал сам отдельные страницы для книг! :eat:
1. сделал таблицу books
2. в functions.php добавил следующий код:
<?php
if (isset ($_GET['id'])) {
$id = $_GET['id'];
}
$boox = mysql_query ("SELECT text FROM books WHERE id = '$id'");
$myrow = mysql_fetch_array($boox);
?>
3. создал файл books.php из файла index.php заменив <?php include("include/content.php"); ?> на <?php print $myrow['text'] ?>
может и коряво получилось, но работает
а где конструктивная критика? :'(
«Оно работает? Не трогайте».
Цитата: fujhi от августа 3, 2012, 14:41
«Оно работает? Не трогайте».
точно как наш сисадмин ;D