Однажды, бродя по форуму бывшей Тех. Поддержки пользователей юКоз (uCoz), наткнулся я на простой и незамысловатый вопросик. Вот так он звучал в оригинале: Можно ли поставив в форме добавления комментариев чекбокс, использовать его значения для изменения вида комментария? Например, поставил галочку и у добавленного комментария изменился цвет фона.
В принципе, с первого взгляда, идея мне показалось немного идиотской, да прости́т меня автор, но, после более пристального взгляда на вопрос, и прикидки (от слова «прикидывать» - по значению близко к выражению: «Представлять себе»), как это можно использовать, идея, в конечном счёте оказалась не совсем уж и безнадёжной. И даже, может быть, достойной для использования такой редкой вещи, как лишнее/свободное поле. Где бы то ни было. В данном случае - в комментариях. Дело в том, что, сейчас, наверно, жутко-глупую, и всем известную вещь сморожу, ну да ладно, не привыкать ... так вот, дело в том, что базы данных, как и все реляционные базы, состоят из таблиц, которые в свою очередь состоят из столбцов и строк, на пересечении которых расположены ячейки. Так вот эти ячейки и хранят те данные, что вводит пользователь или система(скрытые поля, инкремент (AUTO_INCREMENT), т.п). Кроме того, данные одних таблиц, как правило, связаны с данными других таблиц. Но не в этом суть. А в том, все ячейки, зарезервированы за тем или иным, и нельзя просто придумать поле, не существующее в таблице, и пытаться что-то записать в него, и при этом надеяться на успех. Записывать и считывать информацию можно только из реально существующих в базе ячеек. Кроме того, обращаться к ним нужно по её, уникальному в таблице, имени поля. Почему я об этом вообще начал? - вот из-за этого поста. Quote (NN [орфография сохранена]) Пытаюсь использовать значения чекбокса, находящегося в форме добавления комментария, для использования в условном операторе в иде кометариев. Code <input value="test" name="checkbox1" type="checkbox">
- код чекбокса в форме добавления комментария Code <_?if(checkbox1='test')?_>ONOFF<_?endif?_>
- код условного оператора в виде комментариев. По идее, при включенном флажке, в добавленном комментарии OFF должно быть заменено на ON, но это к сожалению не так. Прошу помогите написать рабочий код!
Никогда не подумал бы, что это придется объяснять. Вот так, примерно выглядит таблица для комментариев.
Наверное, стоит отметить, что данная фишка будет работать только для гостей. Для пользователей, адрес сайта и мыло - мыло берётся из профиля, так что привязку для зарегистрированных, придется делать на чём нибудь другом. Тема для размышления. ヅ
Итак, если у вас есть лишнее/свободное поле, и вы хотите его каким либо образом использовать, вот небольшая, примерная инструкция. Данная пост будет показывать как практически, установкой значения, в данном случае - стиля, из выпадающего списка, например, привязать данные, в данном случае имя стиля, к определённому посту/комментарию, записать значение (value) выбранного поля (name) в базу данных.
Исходные данные.Форма добавления комментариев. Code <table border="0" width="100%" cellspacing="1" cellpadding="2" class="commTable"> <tr><td class="commTd2" colspan="2">$ERROR$</td></tr> <_?if(!$USER_LOGGED_IN$)?_> <tr><td width="15%" class="commTd1" nowrap>Имя *:</td><td class="commTd2"><input class="commFl" type="text" name="name" value="$NAME$" size="30" maxlength="60"></td></tr> <tr><td class="commTd1">Email:</td><td class="commTd2"><input class="commFl" type="text" name="email" value="$EMAIL$" size="30" maxlength="60"></td></tr> <_?endif?_> <tr><td class="commTd2" colspan="2"><div style="padding-bottom:2px">$BBCODES$</div><table border="0" cellpadding="0" cellspacing="0" width="100%"><tr><td valign="top"><textarea class="commFl" style="height:135px;" rows="8" name="message" id="message" cols="50">$MESSAGE$</textarea></td><_?if($SMILES$)?_><td width="5%" align="center" valign="top" style="padding-left:3px;">$SMILES$</td><_?endif?_></tr></table></td></tr> <_?if($SUBSCRIBE$)?_><tr><td width="15%" class="commTd1" nowrap>Подписка:</td><td class="commTd2">$SUBSCRIBE$</td></tr><_?endif?_> <_?if($SECURITY_CODE$)?_><tr><td class="commTd1" nowrap>Код *:</td><td class="commTd2">$SECURITY_CODE$</td></tr><_?endif?_> <tr><td class="commTd2" colspan="2" align="center"> <input type="submit" class="commSbmFl" id="addcBut" name="submit" value="- Добавить комментарий -"></td></tr></table>
Кусок шаблона «вид комментария». Нужная мне часть.
Code <table border="0" cellpadding="0" cellspacing="0" width="100%" class="$CLASS$"><tr> <td style="padding:3px;"> <!--Много разных незнакомых букаф и цыфер--> </td></tr></table><br />
Делаем выпадающий список, с именами и значениями стилей. Code <select name="www" class="commFl"> <option class="st0" value="st0">Стиль №0</option> <option class="st1" value="st1">Стиль №1</option> <option class="st2" value="st2">Стиль №2</option> <option class="st3" value="st3">Стиль №3</option> <option class="st4" value="st4">Стиль №4</option> <option class="st5" value="st5">Стиль №5</option> <option class="st6" value="st6">Стиль №6</option> <option class="st7" value="st7">Стиль №7</option> <option class="st8" value="st8">Стиль №8</option> <option class="st9" value="st9">Стиль №9</option> </select>
Где: name="www" - имя элемента «select» - должно соответствовать ячейке в таблице данных. class="commFl" - просто класс элемента. value="st0" - значение, которое будем записывать в БД, при выборе. И, потом получать его. class="st0" ... class="st9" - стили для пунктов списка.
Стили, в данном случае - просто фон цветом. Для комментариев и самого списка. Code <style type="text/css">
.st0{background-color:#FCF;} .st1{background-color:#99F;} .st2{background-color:#FCC;} .st3{background-color:#FC9;} .st4{background-color:#FC3;} .st5{background-color:#F99;} .st6{background-color:#CFC;} .st7{background-color:#9FC;} .st8{background-color:#6FF;} .st9{background-color:#3FC;}
</style>
Собираем всё вместеДля этого, я просто добавлю ещё одну строчку, после строки для ввода «Email» И обзову её «Стиль». Примерно вот так: Code <table border="0" width="100%" cellspacing="1" cellpadding="2" class="commTable"> <tr><td class="commTd2" colspan="2">$ERROR$</td></tr> <_?if(!$USER_LOGGED_IN$)?_> <tr><td width="15%" class="commTd1" nowrap>Имя *:</td><td class="commTd2"><input class="commFl" type="text" name="name" value="$NAME$" size="30" maxlength="60"></td></tr> <tr><td class="commTd1">Email:</td><td class="commTd2"><input class="commFl" type="text" name="email" value="$EMAIL$" size="30" maxlength="60"></td></tr> <_?endif?_> <tr><td class="commTd1">Стиль:</td> <td class="commTd2"> <select name="www" class="commFl"> <option class="st0" value="st0">Стиль №0</option> <option class="st1" value="st1">Стиль №1</option> <option class="st2" value="st2">Стиль №2</option> <option class="st3" value="st3">Стиль №3</option> <option class="st4" value="st4">Стиль №4</option> <option class="st5" value="st5">Стиль №5</option> <option class="st6" value="st6">Стиль №6</option> <option class="st7" value="st7">Стиль №7</option> <option class="st8" value="st8">Стиль №8</option> <option class="st9" value="st9">Стиль №9</option> </select> </td></tr> <tr><td class="commTd2" colspan="2"><div style="padding-bottom:2px">$BBCODES$</div> <table border="0" cellpadding="0" cellspacing="0" width="100%"><tr><td valign="top"><textarea class="commFl" style="height:135px;" rows="8" name="message" id="message" cols="50">$MESSAGE$</textarea></td><_?if($SMILES$)?_><td width="5%" align="center" valign="top" style="padding-left:3px;">$SMILES$</td></tr></table></td></tr> <_?if($SUBSCRIBE$)?_><tr><td width="15%" class="commTd1" nowrap>Подписка:</td><td class="commTd2">$SUBSCRIBE$</td></tr> <_?if($SECURITY_CODE$)?_><tr><td class="commTd1" nowrap>Код *:</td><td class="commTd2">$SECURITY_CODE$</td></tr> <tr><td class="commTd2" colspan="2" align="center"><input type="submit" class="commSbmFl" id="addcBut" name="submit" value="- Добавить комментарий -"></td></tr></table>
Всё, до упора, просто. Должно получится что-то вроде этого:
Так, форму сделали. Теперь будем получать данные, с помощью системной функции для вывода адреса сайта, поле которого я использовал, $SITE$. Оказалось, сервер подставляет ещё и протокол, к выдаваемым данным «http://», то есть на выходе мы получаем вот это «http://st9» - при выборе стиля №9. Думаю, что это убирается где-то в настройках сайта, но, если честно, мне лень искать, и я просто отфильтрую ответ. Code <_?substr($SITE$,-3)?_>
И добавлю его (фильтрованный ответ) к самим комментариям, точнее, к классу, который отвечает за их оформление. Вот так: Code <table border="0" cellpadding="0" cellspacing="0" width="100%" class="$CLASS$ <_?substr($SITE$,-3)?_>"><tr> <td style="padding:3px;"> <!--Много разных незнакомых букаф и цыфер--> </td></tr></table><br />
То есть, если выбрать стиль, например, №4, при добавлении коментария, то его стиль, после добавления, будет вот таким: <table class="cBlock1 st3"....>... Думаю, это всё. Больше, вроде, нечего и сказать-то ... Тема раскрыта.
А вот как именно использовать это, зависит только от вашего воображения и творческого подхода. Несомненно, что, блин, для такой ерундовской вещи, как задание цвета комментариям, использовать такую возможность - не есть «хорошо»... Я, всего лишь, прикинул, что́ можно извлечь из этого, и попытался наглядно показать как. А что и́менно - решать, несомненно Вам. И то́лько вам. Обсуждение, вопросы и прочее, в одноимённой теме на форуме: «Использование форм для изменения вида коментариев»или в коментариях.... ヅ
Реально реализована данная, точнее, похожая, функция, вот здесь «http://tng.ucoz.ru/news/proverka7/2010-08-22-11». Только, данные там подставляются, в скрытое поле, случайным образом. Но всё равно, можете посмотреть, как это работает. Доступно для гостей. Будет доступно ещё некоторое время. .... Пока не затру другим примером ... ヅ
P.S.Пшите, подкидывайте интересные темы для рассмотрения, а, пока, всем Удачи ..... ヅ Flesh.
Источник: Использование даполнительных полей для изменения вида коментариев Формы. Для юКоз,uCoz,инструкция, реляционные базы |