<<<1...5...101112131415161718>>>
Принимаем вопросы от населения
Kabak |
|
---|---|
Это для вывода данных в форму . А для считывания из формы при нажатии кнопки "сохранить" пользователем/админом ? Или я не понимаю чего-то ? |
Macik |
|
---|---|
#38427 Kabak: Алгоритм такой: через ф-и `cot_inport` мы делаем импорт параметров из запроса. Потом эти параметры используются при построении формы. Понятнее объяснил? https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F |
Trustmaster |
|
---|---|
Советую почитать http://www.cotonti.com/docs/ext/extensions/tutorial_advanced_plugin, там в 5-й главе как раз этот вопрос разбирается. May the Source be with you!
|
Kabak |
|
||
---|---|---|---|
Ребята, с алгоритмами всё понятно и эту статью я читал. Я не понимаю, каким образом , например, тэг в шаблоне {USERS_EDIT_DELETE} привязан к Повторяю мой вопрос: Например : в users.edit.php есть проверка
Где происходит привязка 'ruserdelete' к конкретному полю - тегу {USERS_EDIT_DELETE} в users.edit.tpl ? т.е. где определено что 'ruserdelete' получает значение тэга {USERS_EDIT_DELETE} ? в users.edit.tpl форме нет например такого : <form name="form1" method="post" action=""> {USERS_EDIT_DELETE}<input type="text" name="ruserdelete"><br><br> </form> В той же статье 5, что Володя указывает есть например $user_name = cot_import('user', 'P', 'TXT'); Почему именно 'user', а не 'User', или 'user_name_tpl' ? Где определяется что из tpl имя пользователя передеётся в php как переменная 'user' и никак иначе и. т.д. по списку всех переменных? Понятно, что мне непонятно ? |
|||
This post was edited by Kabak (2013-11-11 17:35, 11 years ago) |
Trustmaster |
|
---|---|
В случае форм это просто имя инпута, т.е. атрибут name в HTML. В случае того же user_edit_delete это значение передается в параметрах функции cot_radiobox(): cot_radiobox(0, 'ruserdelete', array(1, 0), array($L['Yes'], $L['No'])) May the Source be with you!
|
Sergey |
|
---|---|
http://wm-help.net/my-articles/article/use-post-and-get-in-php.htm Это надо прочитать, это основа, это общие знания. Теперь будем разбирать ход программы, начнем с части user.edit.php 257 $mskin = cot_tplfile(array('users', 'edit', $usr['maingrp']), 'module'); Обратите внимание на array это массив возможных частей имен. Имеется своя дилемма подбора, это как раз функция cot_tplfile она находит файл шаблона, будет найден шаблон user.edit.tpl а мог быть user.edit.название_группы.tpl и другие комбинации. Важно, что получили имя файла шаблона. теперь переходим дальше, на $t = new XTemplate($mskin); этот оператор создает новый экземпляр класса типа шаблон XTemplate В этом классе есть две главные функции это $t->parse('MAIN'); $t->out('MAIN'); Первая производит замену {USERS_EDIT_DELETE} на выражение, которое находится в классе t вторая out, выводит шаблон, после замены, в выходной поток, который своим способом попадает в браузер клиента, читателя Для того, чтобы поместить в USERS_EDIT_DELETE выражение имеется стандартное назначение: $t->assign(array( ..... 'USERS_EDIT_DELETE' => ($sys['user_istopadmin']) ? cot_radiobox(0, 'ruserdelete', array(1, 0), array($L['Yes'], $L['No'])) . $delete_pfs : $L['na'], тут вопрос, этот юзер $sys['user_istopadmin']) имеет право администрирования? Да, тогда мы создаем форму радиобатон с наименование ruserdelete это создает функция cot_radiobox обратите внимание, что радиобатон имеет два состояние 1- TRUE и 0 -FALSE, следовательно элемент массива $_POST, будет ассоциативный элемент ruserdelete Клиент получил форму, заполнил форму и нажал <input type="submit" value="{PHP.L.Update}" class="submit" /> ответ пошел на сервер, надо знать, что еще был сформирован и ответ в шаблоне: <form action="{USERS_EDIT_SEND}" method="post" name="useredit"><input type="hidden" name="id" value="{USERS_EDIT_ID}" /> а там 'USERS_EDIT_SEND' => cot_url('users', 'm=edit&a=update&'.cot_xg().'&id='.$urr['user_id']), где формируются урл с двумя ключами m=edit a=update и ключом идентификатора пользователя id= эти ключи мы можем достать по запросу $_GET там будет массив из элементов: m, a и id. как форма отправилась опять загрузится модуль user.edit.php. В части common.php обрабатываются общие ключи, строки с 481 $m = cot_import('m', 'G', 'ALP', 24); $n = cot_import('n', 'G', 'ALP', 24); $a = cot_import('a', 'G', 'ALP', 24); $b = cot_import('b', 'G', 'ALP', 24); нам интересна функция в строке $a = cot_import('a', 'G', 'ALP', 24); она обрабатывает ответ $_GET - 'G', 'a', - это наименование элемента ассоциативного массива из $_GET, 'ALP' - это значит, что символы будут типа букв цифр и некоторых знаков. Надо знать, что серверная глобальная переменная ${_SERVER['QUERY_STRING'] как раз содержит все эти ключи, т.е. то что мы отмечаем от ? по & так устроен сервер, надо знать вот это http://www.php.su/articles/?cat=vars&page=015 команда Котонти уже позаботилась с правилами работы с этими глобальными. Опять возвращаемся к user.edit.php строка с 48 if ($a == 'update') { cot_check_xg(); /* === Hook === */ foreach (cot_getextplugins('users.edit.update.first') as $pl) { include $pl; } /* ===== */ $ruserdelete = cot_import('ruserdelete','P','BOL'); вот и имя ассоциативно массива $_POST - входное 'P', элемент ruserdelete о котором вы переживали. 'BOL' это как раз тип элемент битная логика: 1 или 0, помните вначале мы его задавали, а сейчас проверяем. получили $ruserdelete и начинаем обрабатывать если $ruserdelete это 1 или TRUE if ($ruserdelete) { $sql = $db->delete($db_users, "user_id=$id"); $sql = $db->delete($db_groups_users, "gru_userid=$id"); надо признать, тут могут движок поломать через user_id=$id надо проверять на sql инъекцию (может проверка и есть, а может и нет), но без проверки такое делать не надо, нельзя набранное юзером совать в sql запрос, не при каких вариантах. Примерно так. - 2 часа жизни из моей шагреневой кожи. www.cotonti.mobi
|
Macik |
|
---|---|
#38348 Kabak: «Специально по заявкам радиослушателей»: http://www.cotonti.com/forums?m=posts&q=7583 Будут вопросы по отладке - можно в той же теме отписать.
https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F |
Trustmaster |
|
---|---|
Дополню пост Sergey насчёт SQL-инъекций. Чтобы защититься от оных, лучше лишний раз воспользоваться возможностью безопасной передачи параметров в запрос: $db->delete($db_users, "user_id=?", $id); $db->delete($db_something, "foo = ? AND bar = ?", array($foo, $bar)); Такая возможность есть в методах: query, delete, update. May the Source be with you!
|
Kabak |
|
---|---|
#38448 Trustmaster: Это проверка на существование такой(ких) перменной(ых) в базе перед удалением ? |
Trustmaster |
|
---|---|
Нет, это фильтрация переменных от опасных вставок. May the Source be with you!
|
Kabak |
|
---|---|
Пожалуйста, расскажите о подгруппах. 1) Как и для чего они используются в движке ? 2) В каких разделах движка и каким образом используется главная группа к которой привязан пользователь, а где дополнительные группы - подгруппы ? |
|
This post was edited by Kabak (2013-11-25 08:20, 11 years ago) |
Trustmaster |
|
---|---|
Главная группа пользователя отображается в его статусе и используется для быстрой проверки доступа в некоторых частях движка или в админке. Второстепенные группы влияют на права. Права пользователя - это объединение (через логическое ИЛИ) прав всех его групп (главной и второстепенных). Есть ещё группы без прав - они влияют на отображаемый статус, но не несут информации о правах. May the Source be with you!
|
Kabak |
|
---|---|
Как в плагине вывести системное окно Котонти с вопросом подтверждения действия ? |
|
This post was edited by Kabak (2013-12-04 12:32, 11 years ago) |
Trustmaster |
|
---|---|
#38721 Kabak: Задаем URL с помощью функции cot_confirm_url(): cot_confirm_url(cot_url('plug', 'e=myplug&a=delete')) и в шаблоне для ссылки прописываем <a class="confirmLink" href="{URL}">
May the Source be with you!
|
Yusupov |
|
---|---|
Подскажите, пожалуйста, каким образом создается контент страниц на разных языках? Что для этого нужно добавить в шаблон страницы, чтобы добавлять переводы? |