Foren / National / Russian / Тех. поддержка / Запросы документации

ErsteVorherige1...5...101112131415161718NächsteLetzte

Принимаем вопросы от населения

Kabak
#211 11. November 2013, 06:53

Это для вывода данных в форму . А для считывания из формы при нажатии кнопки "сохранить" пользователем/админом ?  Или я не понимаю чего-то ?

Macik
#212 11. November 2013, 12:40
#38427 Kabak:

Это для вывода данных в форму . А для считывания из формы при нажатии кнопки "сохранить" пользователем/админом ?  Или я не понимаю чего-то ?

Алгоритм такой: через ф-и `cot_inport` мы делаем импорт параметров из запроса. Потом эти параметры используются при построении формы.
Т.е. на первом этапе (мы еще ничего не отправляли и просто загрузили страницу с формой) параметры не определены и форма отрисовывается с параметрами по умолчинию или из БД. Когда отправили форму (сохранить) параметры из POST запроса импортируется через cot_import, после чего либо записываются в БД (идет переадресация на другой адрес или возврат в эту же форму с сообщением, что все записано), либо если какая-то ошибка произошла (например не указан обязательный параметр), то попадают обратно в форму, плюс выводится сообщение об ошибке.

Понятнее объяснил? 

https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F
Trustmaster
#213 11. November 2013, 14:06

Советую почитать http://www.cotonti.com/docs/ext/extensions/tutorial_advanced_plugin, там в 5-й главе как раз этот вопрос разбирается.

May the Source be with you!
Kabak
#214 11. November 2013, 17:13

Ребята, с алгоритмами всё понятно и эту статью я читал. Я не понимаю, каким образом , например, тэг в шаблоне {USERS_EDIT_DELETE}  привязан к 'ruserdelete' чтобы можно было импортировать данные из формы.  Понимаете что мне не ясно ?  Как вывести в форму в любой тэг на движке Cotonti я понимаю, а вот как импортировать из тега в переменную в Cotonti не понимаю.  Точнее, я понимаю что через cot_import() и понимаю как эта функция работает, есть описание на сайте.  Я не понимаю где именно 'ruserdelete' в php = {USERS_EDIT_DELETE} в шаблоне.

Повторяю мой вопрос:

Например :  в users.edit.php есть проверка

1
2
$ruserdelete = cot_import('ruserdelete','P','BOL');
if ($ruserdelete)...

Где происходит привязка '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' и никак иначе  и. т.д. по списку всех переменных?

Понятно, что мне непонятно ?


Dieser Beitrag wurde von Kabak (am 11. November 2013, 17:35, vor 10 Jahre) bearbeitet
Trustmaster
#215 11. November 2013, 18:10

В случае форм это просто имя инпута, т.е. атрибут 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
#216 11. November 2013, 19:26

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
#217 11. November 2013, 21:39
#38348 Kabak:

А с Denwer поможете настроить ? Я почитал на этом сайте  как пользоваться встроенной отладкой.  Я пользуюсь NetBeans. Но что-то не разобрался как настроить NetBeans чтобы отлаживать и пошагово ходить по Cotonti

«Специально по заявкам радиослушателей»:  http://www.cotonti.com/forums?m=posts&q=7583 

Будут вопросы по отладке - можно в той же теме отписать.

 

https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F
Trustmaster
#218 12. November 2013, 06:25

Дополню пост 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
#219 12. November 2013, 11:20
#38448 Trustmaster:

Дополню пост Sergey насчёт SQL-инъекций. Чтобы защититься от оных, лучше лишний раз воспользоваться возможностью безопасной передачи параметров в запрос:

$db->delete($db_users, "user_id=?", $id);
$db->delete($db_something, "foo = ? AND bar = ?", array($foo, $bar));

Такая возможность есть в методах: query, delete, update.

Это проверка на существование такой(ких) перменной(ых) в базе перед удалением ?

Trustmaster
#220 12. November 2013, 11:39

Нет, это фильтрация переменных от опасных вставок.

May the Source be with you!
Kabak
#221 25. November 2013, 07:27

Пожалуйста, расскажите о подгруппах.

1) Как и для чего они используются в движке ?

2) В каких разделах движка и каким образом используется главная группа к которой привязан пользователь, а где дополнительные группы - подгруппы ?


Dieser Beitrag wurde von Kabak (am 25. November 2013, 08:20, vor 10 Jahre) bearbeitet
Trustmaster
#222 25. November 2013, 09:21

Главная группа пользователя отображается в его статусе и используется для быстрой проверки доступа в некоторых частях движка или в админке. Второстепенные группы влияют на права. Права пользователя - это объединение (через логическое ИЛИ) прав всех его групп (главной и второстепенных). Есть ещё группы без прав - они влияют на отображаемый статус, но не несут информации о правах.

May the Source be with you!
Kabak
#223 4. Dezember 2013, 12:15

Как в плагине вывести системное окно Котонти с вопросом подтверждения действия ?
 


Dieser Beitrag wurde von Kabak (am 4. Dezember 2013, 12:32, vor 10 Jahre) bearbeitet
Trustmaster
#224 4. Dezember 2013, 16:41
#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
#225 9. Dezember 2013, 14:02

Подскажите, пожалуйста, каким образом создается контент страниц на разных языках? Что для этого нужно добавить в шаблон страницы, чтобы добавлять переводы?

ErsteVorherige1...5...101112131415161718NächsteLetzte