Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Алфавитный указатель

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: как сделать?
leshiy_SV
Отправлено: 03 Февраля, 2010 - 13:02:05
Post Id



Гость


Покинул форум
Сообщений всего: 77
Дата рег-ции: Окт. 2009  
Откуда: Пятигорск


Помог: 0 раз(а)




день добрый. тема такая. хочу замутить алфавитный указатель, типа куча буковок, щелкаешь на буковку выдает авторов, щелкаешь на автора, выдает список его статей. как такое организовать? Не понял
сам попробовал сделать такое.
В базе, где статьи, создал дополнительное поле "letter", куда заноситься первая буква фамилия автора. Далее делаю вывод на страницу этих буковок
PHP:
скопировать код в буфер обмена
  1. $query  = "SELECT DISTINCT letter FROM  `article` ORDER BY letter ASC";
из результата строю ссылки "<a href=?letter=urlencode($буква)> буква</a>". функцию urlencode использую для передачи русских букв, хотя это может быть и не правильно, пока другого способа не нашел.
Далее щелкаем на такую ссылочку и передаем нашу буковку в другой скрипт, где уже делаем выборку авторов, фамилии которых начинаются на нашу буковку
PHP:
скопировать код в буфер обмена
  1. $query  = "SELECT DISTINCT author, id FROM  `article` letter='".urldecode($bukva) GROUP BY author ORDER BY author ASC";
т.е. выбираем авторов без повторений и id первой попавшейся статьи этого автора. и строим ссылочки "<a href=?letter=urldecode($буква)&id=$id>автор</a>"
тут уже щелкаем на автора, чтобы получить все статьи автора. Для этого решил сделать так:
по id которое передается по ссылке я получаю полную фамилию автора ($author)
PHP:
скопировать код в буфер обмена
  1. $query  = "SELECT author FROM  `article` WHERE id=$id";

Далее делаю запрос на выборку всех статей
PHP:
скопировать код в буфер обмена
  1. $query  = "SELECT title FROM  `article` WHERE id=$author";
и полученный результат уже преобразую в нужный вид и вывожу. Как вам такой вариант? плохо или хорошо и можно ли так. А может кто то сталкивался с подобной задачей и есть другие варианты решения. Весь код полностью не могу привести слишком громоздко, это только отдельные главные вырезки кода.
 
 Top
Viper
Отправлено: 03 Февраля, 2010 - 15:20:14
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




ну не обязательно прям в базу тулить все. намного проще сделать можно

делаем буквенный список вида

PHP:
скопировать код в буфер обмена
  1. $sorting = trim($_REQUEST, 'sorting', '');
  2. $base_url = 'index.php?sorting=';
  3.  
  4. <a href="'.$base_url.'ruA.'" title="А">А</a>
  5. <a href="'.$base_url.'ruB.'" title="Б">Б</a>
  6. <a href="'.$base_url.'ruV.'" title="В">В</a>
  7. <a href="'.$base_url.'ruG.'" title="Г">Г</a>
  8. <a href="'.$base_url.'ruD.'" title="Д">Д</a>
  9. <a href="'.$base_url.'ruE.'" title="Е">Е</a>
  10. <a href="'.$base_url.'ruGE.'" title="Ж">Ж</a>
  11. <a href="'.$base_url.'ruZ.'" title="З">З</a>
  12. <a href="'.$base_url.'ruU.'" title="И">И</a>
  13. <a href="'.$base_url.'ruK.'" title="К">К</a>
  14. <a href="'.$base_url.'ruL.'" title="Л">Л</a>
  15. <a href="'.$base_url.'ruM.'" title="М">М</a>
  16. <a href="'.$base_url.'ruN.'" title="Н">Н</a>
  17. <a href="'.$base_url.'ruO.'" title="О">О</a>
  18. <a href="'.$base_url.'ruP.'" title="П">П</a>
  19. <a href="'.$base_url.'ruR.'" title="Р">Р</a>
  20. <a href="'.$base_url.'ruS.'" title="С">С</a>
  21. <a href="'.$base_url.'ruT.'" title="Т">Т</a>
  22. <a href="'.$base_url.'ruY.'" title="У">У</a>
  23. <a href="'.$base_url.'ruF.'" title="Ф">Ф</a>
  24. <a href="'.$base_url.'ruH.'" title="Х">Х</a>
  25. <a href="'.$base_url.'ruC.'" title="Ц">Ц</a>
  26. <a href="'.$base_url.'ruCH.'" title="Ч">Ч</a>
  27. <a href="'.$base_url.'ruHA.'" title="Ш">Ш</a>
  28. <a href="'.$base_url.'ruHE.'" title="Щ">Щ</a>
  29. <a href="'.$base_url.'ruEA.'" title="Э">Э</a>
  30. <a href="'.$base_url.'ruUA.'" title="Ю">Ю</a>
  31. <a href="'.$base_url.'ruI.'" title="Я">Я</a>


далее в alphabet.php

PHP:
скопировать код в буфер обмена
  1. switch ($sorting) {
  2.         case 'ruA': Sorting('А%'); break;
  3.         case 'ruB': Sorting('Б%'); break;
  4.         case 'ruV': Sorting('В%'); break;
  5.         case 'ruG': Sorting('Г%'); break;
  6.         case 'ruD': Sorting('Д%'); break;
  7.         case 'ruE': Sorting('Е%'); break;
  8.         case 'ruGE': Sorting('Ж%'); break;
  9.         case 'ruZ': Sorting('З%'); break;
  10.         case 'ruU': Sorting('И%'); break;
  11.         case 'ruK': Sorting('К%'); break;
  12.         case 'ruL': Sorting('Л%'); break;
  13.         case 'ruM': Sorting('М%'); break;
  14.         case 'ruN': Sorting('Н%'); break;
  15.         case 'ruO': Sorting('О%'); break;
  16.         case 'ruP': Sorting('П%'); break;
  17.         case 'ruR': Sorting('Р%'); break;
  18.         case 'ruS': Sorting('С%'); break;
  19.         case 'ruT': Sorting('Т%'); break;
  20.         case 'ruY': Sorting('У%'); break;
  21.         case 'ruF': Sorting('Ф%'); break;
  22.         case 'ruH': Sorting('Х%'); break;
  23.         case 'ruC': Sorting('Ц%'); break;
  24.         case 'ruCH': Sorting('Ч%'); break;
  25.         case 'ruHA': Sorting('Ш%'); break;
  26.         case 'ruHE': Sorting('Щ%'); break;
  27.         case 'ruEA': Sorting('Э%'); break;
  28.         case 'ruUA': Sorting('Ю%'); break;
  29.         case 'ruI': Sorting('Я%'); break;
  30.         default: return; break;
  31. }
  32.  
  33. function Sorting($sort) {
  34.         $sort = trim($sort);
  35.         $like = "LIKE '$sort'";
  36.         $query = "SELECT `id`, `author_name`"
  37.                 . "\n FROM `#__db_name` WHERE "
  38.                 . $like
  39.                 . "\n AND `published` = '1'"
  40.                 . "\n ORDER BY `author_name` ASC";
  41.  
  42.         // Далее выводим результаты в нужном виде
  43. }


функция примерная.

(Отредактировано автором: 03 Февраля, 2010 - 15:22:18)



-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
leshiy_SV
Отправлено: 03 Февраля, 2010 - 15:27:08
Post Id



Гость


Покинул форум
Сообщений всего: 77
Дата рег-ции: Окт. 2009  
Откуда: Пятигорск


Помог: 0 раз(а)




Viper пишет:
$like = "LIKE '$sort'";
это кажется будет выбирать тех авторов, в которых встречается эта буква, даже если она будет в середине фамилии, это так? если так то это не есть для меня хорошо
 
 Top
Viper
Отправлено: 03 Февраля, 2010 - 15:35:05
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




leshiy_SV пишет:
это кажется будет выбирать тех авторов, в которых встречается эта буква, даже если она будет в середине фамилии, это так? если так то это не есть для меня хорошо


вы не правы.
а% найдет все записи начинающиеся на букву а

и ещё... в первом куске кода $sorting = trim($_REQUEST, 'sorting', '');

не правильно ) эт у мну с другой функцией работает так. вам нужно будет просто $sorting = trim($_REQUEST['sorting']);

(Отредактировано автором: 03 Февраля, 2010 - 15:37:06)



-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
JustUserR
Отправлено: 03 Февраля, 2010 - 16:32:49
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




leshiy_SV пишет:
Будет выбирать тех авторов, в которых встречается эта буква, даже если она будет в середине
Тут есть два модификатора - ? (Один любой символ) и % (Много любых символов) которые означают любой символ - если написать шаблон без них то будет искать авторов и именем из одной буквы
Это вам конечно не регулярные выражения но тоже очень полезная вещь Улыбка


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
leshiy_SV
Отправлено: 04 Февраля, 2010 - 09:58:23
Post Id



Гость


Покинул форум
Сообщений всего: 77
Дата рег-ции: Окт. 2009  
Откуда: Пятигорск


Помог: 0 раз(а)




а можно использовать такую конструкцию ссылки или лучше сделать транслит русских букв
PHP:
скопировать код в буфер обмена
  1. <a href=?letter=urlencode($буква)> буква</a>

а в принимающей конструкции сделать наоборот

(Отредактировано автором: 04 Февраля, 2010 - 10:00:14)

 
 Top
Viper
Отправлено: 04 Февраля, 2010 - 12:44:34
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




leshiy_SV и зачем изобретать велосипед и городить ненужные конструкции?


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
leshiy_SV
Отправлено: 04 Февраля, 2010 - 12:51:45
Post Id



Гость


Покинул форум
Сообщений всего: 77
Дата рег-ции: Окт. 2009  
Откуда: Пятигорск


Помог: 0 раз(а)




ну не знаю Хм , просто так мне легче, да и писать код меньше нужно
 
 Top
JustUserR
Отправлено: 04 Февраля, 2010 - 13:36:00
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




leshiy_SV пишет:
А можно использовать такую конструкцию ссылки или лучше сделать транслит русских букв
Вообще urlencode является самым обычным средством передачи данных в query-строке и подходит как для ASCIIZ так и для юникода - конечно он увеличивает размер передаваемых данных из-за такого экранирующего преобразования но вам это наверное не очень существенно


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
fullzero
Отправлено: 30 Мая, 2012 - 09:09:06
Post Id



Гость


Покинул форум
Сообщений всего: 120
Дата рег-ции: Март 2011  


Помог: 0 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2. foreach(range('А', 'Я') as $letter) {
  3. echo "<a href=\"".$letter."\">".$letter."</a> ";
  4. }
  5.  
 
 Top
Мелкий Супермодератор
Отправлено: 30 Мая, 2012 - 09:33:43
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




JustUserR пишет:
Отправлено: 04 Февраля, 2010 - 14:36:00

fullzero пишет:
Отправлено: 30 Мая, 2012 - 10:09:06

С дважды новым годом.

А range такой фокус с utf8 не умеет.
Тема закрыта!


-----
PostgreSQL DBA
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB