![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Valdo |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 6.4.2010 Репутация: нет Всего: нет |
Доброго времени суток!
Встал передо мной следующий вопрос: "Как создаются пользовательские закладки?" Постараюсь обрисовать ситуацию как можно подробнее: Сайт. Есть зарегистрированные пользователи. Есть страницы с публикациями (к примеру, новости, статьи, заметки). Как обычно - есть краткая публикация с ссылкой на полную публикацию. Ниже каждой краткой публикации есть текстовая ссылка (либо кнопка) с надписью "Добавить в закладки". Зарегистрированный пользователь жмет ссылку, тем самым, добавляя публикацию в закладки для последующего прочтения. Тут же, возле краткой публикации ссылка "Добавить в закладки" тут же сменяется следующей "Убрать из закладок". Пройдя по ссылке "Мои закладки" в пользовательском меню, он попадает на страницу своих закладок, где лежат выбранные им публикации. Возле каждой публикации есть ссылочки "Убрать из закладок". Прочтя ту или иную публикацию, пользователь жмет на ссылку - закладка удаляется. Вторые сутки "ковыряю" DLE - ничего не получается. Слишком мудренный код для того, кто с начала сего года изучает php. Бьюсь как рыба об лед, а отдачи нет. Разобрал лишь то, что в таблицу с пользователями (назовем ее "users"), в поле "favorites" (к примеру), добавляются id этих самых публикаций, которые перечисляются через запятую. При каждом добавлении/удалении, таблица "users" (поле "favorites") обновляется. Ситуацию с изучением закладок на DLE усугубляет то, что там используется Ajax (чтобы страничка не перезагружалась при нажатии на ссылку/кнопку добавления/удаления закладок). Наверняка так и используется повсеместно, пусть не Ajax, но Javascript уж точно. В подведении итогов, хотелось бы узнать: 1. По какому принципу создаются пользовательские закладки? 2. Если есть возможность, покажите на примере (код), как они создаются? Быть может какие-то статьи на соответствующую тему, возможно у кого есть готовый код, по которому можно было бы учиться (не используя его как готовый материал по принципу "получил на руки - вставил - пользуюсь, незная каким образом он работает"). Зачастую встречаю сайты, где используется функция добавления/удаления закладок, но как все это реализуется на практике (как, впрочем, и в теории) очень хотелось бы знать... Заранее огромное спасибо за любую помощь по данным вопросам! |
|||
|
||||
| BuShaRt |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
Честно говоря не когда не видел таких "фичей" на сайтах, но примерно могу подсказать как это реализуется с нуля.
Для начал забудьте раз и на всегда о идее перечислять в базе данных данные в поле через запятую - это не профессионализм высшей степени. В остальном Вы близке к истине. Нам понадобиться таблица "bookmark", у нее будет 3 поля id_bookmark, id_users, id_new (уникальные номера закладки, пользователя, статьи соответственно). Когда Вы будете писать скрипт вывода закладок определенного пользователя, Вам понадобиться построить сложный SQL запрос объединяющей таблицы bookmark и new с выборкой только по определенному значению поля id_users. О объеденение таблиц. Добавлено @ 23:18 Возможно я мог не правильно оценить глубину вопроса, но боюсь, что если вопрос куда более сложный, то Вам стоит почитать литературу т.к. работа с AJAX предполагает хотя бы средние навыки работы с php, mysql, javascript и как следствие понимание DOM. Это сообщение отредактировал(а) BuShaRt - 10.5.2010, 23:21 |
|||
|
||||
| NewDima |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: 10 Всего: 12 |
Задача тривиальна. С jquery будет так
Client-side:
Server-side:
В ссылке прописываем id в href для роутера (если яваскрипт будет отключен, обрабатываем на стороне сервера и выплюнем результат). И устанавливаем атрибут id в ней же для функции. Все. P.S. Может где какая помарка, писал на коленке Это сообщение отредактировал(а) NewDima - 11.5.2010, 05:28 |
||||||
|
|||||||
| BuShaRt |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
Оффтоп..
Зачем писать?
чем не устраивает просто?
|
||||
|
|||||
| NewDima |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: 10 Всего: 12 |
BuShaRt, а если функция возвращает код ошибки? Не придирайтесь к мелочам, это не важно
|
|||
|
||||
| BuShaRt |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
NewDima,
Я не придираюсь, я интересуюсь, для того пометку "оффтоп" и поставил. |
|||
|
||||
| Valdo |
|
||||||||||||||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 6.4.2010 Репутация: нет Всего: нет |
Спасибо Вам за помощь! Сегодня я продвинулся немного вперед в решении наболевшего вопроса...
Хорошо. Буду знать.
Написал код, который вносит выбранные статьи в таблицу закладок (ниже прикрепленного кода опишу появившиеся недочеты, которые решить я так и не смог): Небольшие уточнения: 1. Есть две таблицы: a. bookmark (id_bookmark(int(30)), id_user(int(30)), id_news(int(30))) b. news (id(int(30)), name(varchar(255)), ... остальные поля) 2. $dbcnx - соединение с DB;
По этому коду, закладки без проблем добавляются в таблицу "bookmark". Хотя, может есть какие-либо кривые моменты... Затруднения у меня вот на каких этапах: 1. Не могу понять, каким образом осуществить проверку на предмет того, существует ли в поле "id_new" id той статьи, которую хотим добавить в закладки? С тем, чтобы выводить соответствующую ссылку - если id в поле "id_new" совпадает с id выбранной статьи, вывести "Удалить из закладок", иначе "Добавить в закладки". Т.к. после нажатия "Добавить в закладки", ссылка не изменяется на "Удалить из закладок". 2. После того, как закладка добавлена - перезагружаю страницу, а выбранная статья вновь помещается в таблицу "bookmarks", ибо в адресной строке браузера все время показывает, как ...index.php?do=add&id=1 (к примеру). И так до бесконечности - 10 раз перезагружаешь, 10 раз добавляется одна и та же статья.
Спасибо. Статью прочел несколько раз, но, честно говоря, практически ничего из нее не понял. Благодаря ей, поискал в сети несколько статей о LEFT JOIN, RIGHT JOIN, INNER JOIN. И там же наткнулся на один из способов связки двух таблиц (применил ее в своем коде). Во всяком случае работает, хотя, незнаю, правильно ли делать выборку тем образом, что я представил на примере? Как Вы считаете?
С Ajax'ом решил пока повременить. Врядли сейчас я его смогу потянуть. Но изучать обязательно буду...
Спасибо! Вместо строки "this-script-address/toggle/1" вписывается урл-странички? Обязательно изучу подробнее, сразу же после того, как "разделаюсь" с php-кодом... Это сообщение отредактировал(а) Valdo - 11.5.2010, 14:52 |
||||||||||||||
|
|||||||||||||||
| NewDima |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: 10 Всего: 12 |
Valdo, во-первых, сделайте естественный ключ из идентификатора пользователя и идентификатора новости, тогда добавить вторично не получится.
Во-вторых, хотя-бы вынесите часть, отвечающую за добавление закладки в другой файл, самому же удобнее будет. В-третьих, когда передаете параметр do, сделайте все, что требуется, приняв его. А дальше выбросьте заголовок
и прекратите выполнение скрипта (die). Тогда не будет проблем с повторным обращением с теми же параметрами. А вообще для лучшей структуризации хорошо было бы познакомиться с оператором выбора switch. P.S. в коде много комментировать |
|||
|
||||
| Valdo |
|
||||||||||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 6.4.2010 Репутация: нет Всего: нет |
Большое спасибо за рекомендации! Постарался все учесть. Вот, что в итоге получилось: Файл: index.php
Файл: bookmark.php
Файл: my_bookmarks.php
Код работает. Код, отвечающий за добавление закладок, вывел в отдельный файл. После выполнения кода, происходит редирект на страницу статей. Проблема с повторным добавлением закладок успешно решена! Остается всего лишь одна загвоздка - это решить, что прописывать в условии if, в зависимости от которого выводить соответствующую ссылку: "Добавить в закладки" либо "Удалить из закладок". Двое суток уже ломаю голову, но так ни к чему и не пришел... Прошу помочь с рекомендациями, напутствиями, если есть таковая возможность. Заранее спасибо! Это сообщение отредактировал(а) Valdo - 12.5.2010, 15:19 |
||||||||||
|
|||||||||||
| Valdo |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 6.4.2010 Репутация: нет Всего: нет |
Пришел к способу, при котором изменяются ссылки на добавление/удаление закладок. Но чую, что этот вариант подходит менее всего:
Думаю, этот способ проверки не пригоден, т.к .запрос к базе идет при каждом выполнении цикла. Будут выбраны 100 статей - будет 100 раз выполняться один и тот же запрос. Но работает лишь этот способ. Или я смотрю совсем не в том направлении... (( |
|||
|
||||
| NewDima |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: 10 Всего: 12 |
хм, сейчас тестить на не чем будет, думаю как-то так запрос составить нужно:
Попробуйте например так, хотя можно наверное и упростить. P.S. Здесь три таблицы: users(id, name), articles(id, title), boolmarks(user, article). |
|||
|
||||
| Valdo |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 6.4.2010 Репутация: нет Всего: нет |
Большое Вам спасибо за помощь на протяжении темы! Попробовал вариант с запросом - ничего не вышло. Вернее, моих знаний на данный момент времени, в полной мере не хватает, чтобы правильно примерить данный запрос к своему коду. Как ни крутил - безрезультатно (с этих пор, приступаю к более углубленному изучению mysql). Несмотря на это, задачу с выводом корректной ссылки успешно решена (эх, долго я корпел над ней)! Вот окончательный вариант страницы "index.php":
NewDima, BuShaRt Еще раз спасибо! PS. Форум отличный! Недавно посещаю и впредь он станет для меня настольным! Это сообщение отредактировал(а) Valdo - 13.5.2010, 21:06 |
||||
|
|||||
| BuShaRt |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
||||
|
||||
| Valdo |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 6.4.2010 Репутация: нет Всего: нет |
Спасибо! Буду искать... |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |