cotonti.com : Дополнительные настройки в админке. Как это делать? https://www.cotonti.com Son konu mesajları Cotonti en Sun, 12 Apr 2026 22:06:53 -0000 Kort Paz, 31 Oca 2010 01:39:20 -0000 Trustmaster имеющихся статей по плагинам, всё-таки их писали люди с многолетним опытом работы в системе.

Что касается копипасты с seditio.by, на месте владельца последнего сайта я бы не стал её разрешать. На критически важные статьи можно проставлять ссылки (или даже redir).]]>
Cmt, 30 Oca 2010 19:04:17 -0000
Sergey Что касаемо видеочата. Признаюсь, грешен, но я ни разу еще не пробовал так общаться (хотя все фирменное стоит аж с 2000 года). Проблема в том, что широкополосный доступ у меня всего год, а до этого страдал дуализмом в 16 килобит.]]> Cmt, 30 Oca 2010 14:32:39 -0000 Gunslinger Dayver,

но согласись что твой подход очень и очень не продуман изначально

Позволю себе не согласиться :) , ну да фиг с ним, беседы о нюансах психологии пока задвинем куда подальше. Разгоаоров о лирике и так уже под завязку. Поступим следующим образом. Я предлагаю со своей стороны подзаняться документацией по плагинам (хуки, система написания и т.д.) и описанию функций. В начатых мной темах я буду задавать вопросы, возникающие по ходу работы. Большая человеческая просьба отвечать на них в манере Sergey.

П.С.

Позволю себе некоторый оффтоп:

Возникла необходимость прикрутить к Коту видеочат. Для общения по принципу скайпа. Ктонить сталкивался с таким вопросом? Может что-то подскажете?

П.П.С.
esclkm, пробежался по seditio.by Там в принципе целый комплект весьма интересных статей. Вопрос только в позволительности копипаста их сюда. Ну и заодно как ты предлагаеш их обработать? Просто собрать в кучу или как говорил Горбатый "расшИрить и углУбить" ?]]>
Cmt, 30 Oca 2010 08:04:40 -0000
Dayver # Gunslinger : 2. Невнимательность говориш зло? Именно. Смотрим:
...
О, заметили :) Вывод сам собой не напрашивается? Смотрим сюда:
....
Интересно по какому признаку ты считаешь что я только заметил это? Не нужно думать что команда судит о человеке по его показателю оставленых на форуме сообщений
# Gunslinger : Dayver
А теперь думаем над вопросом - с чего ты взял, что я это все затеял исключительно для себя? Потому лишь что я задаю вопросы? Неверный подход. Моя основная цель - добиться четкого, максимально детального и доходчивого для "простых смертных" , а глвавное структурированного четко по обсуждаемой тематике ( а не раскиданного по всему форуму) описания нескольких принципиальных для плагинописания моментов....
Ну если вообще я и думал об этом то наверное решил судя по характеру первого сообщения в топике:
# Gunslinger : Допустим, мне нужно в админке на закладке настройки форума добавить несколько новых (своих) параметров настройки. Эти параметры должны быть не вариантом плагина, а родными для движка (ну как "количество постов на страницу форума", "Скрывать приватные форумы" и т.д.). Короче нужен хак админки. Поясните плз как это делать.
П.С.
Варианты плагинов не предлагать. Нужна информация именно о том, как добавлять свои настройки в движок.
Если это и так, то видать, ты таки хочешь помочь проекту. Дык давай делать это более рациональнее чем создавать треды на форуме. (Да да вижу ты там уже отписался что согласен ... но согласись что твой подход очень и очень не продуман изначально) ... ну или на крайняк написал бы что одна из целей топика - решить ситуацию с доками.

# Gunslinger : Dayver
Так же стоит учесть тот факт, что некоторые пользователи котонти (как не смешно это прозвучит) не рискуют задавать подобные вопросы боясь нарваться на именно такой, исполненный "доброжелательности", ответ об их малограмотности со стороны искушенных в вопросах двигла гуру.
Тут вопрос неоднозначен ... если бы "искушенные в вопросах двигла гуру" были такие "исполненные "доброжелательности"" то навряд было бы создано сообщество и новый проект, а просто эти "искушенные в вопросах двигла гуру" собрались в закрытой группе и творили бы то что им нужно. Но нет они зачем то создают форум и по возможности помогают новичкам. *самйл демонстрирующий легкий налет иронии*

С другой стороны это как кормление крокодила из рук ... ведь может и руку откусить. Это я про часть не совсем добросовестных участников которые приходят просят сначала показать откуда можно скачать движок, потом просят объяснить как распаковать архив с дивжком, потом возмущаются, а почему он запакован в 7zip, и потом же просят ПОМОЧЬ установить двиг на хост(хотя заканчивается тем что приходится сделать это самому) ... ну и панеслась, а как то, а как это ... надеюсь понимаешь о чем я.
А ведь у каждого на лбу не написано кто есть кто.]]>
Cmt, 30 Oca 2010 07:19:59 -0000
Gunslinger esclkm. Конечно смогу. Но было бы неплохо определиться хотя бы с небольшим списком тем для подбора инфы. Да и здесь по форуму копнуть стоит. В процессе многих обсуждений всплывала целая куча интересных моментов и деталей, которые впринципе нгде не освещены. Раз их прочитаеш а потом либо ссылка теряется либо тема забывается и пиши пропало.

Короче по ходу дела предлагаю следующее - если бродя по форуму найдете ссылочку на нечто полезное или интересное, то кидайте мне ее в ПМ а я уже буду накапливать информацию и пытаться ее структурировать. Потом по мере наполнения буду передавать на редакторскую проверку и правку.]]>
Cmt, 30 Oca 2010 06:56:07 -0000
esclkm многое по шаблонизатору сказано в блогах на seditio.by в принципе там и полезное по немногу копиться

Если смогешь) организуй свое рода преобразование этого пласта в статьи. так как на форуме обычно многое терятеся]]>
Cmt, 30 Oca 2010 06:44:45 -0000
Gunslinger Dayver
1. Со мной можно на "ты"
2. Невнимательность говориш зло? Именно. Смотрим:
Я бы понял вашу позицию если бы вы впервые увидели движок но судя по форуму neocrome.ru в это поверить не реально.

О, заметили :) Вывод сам собой не напрашивается? Смотрим сюда:
Полагаю, будет не лишним предложить вынести содержимое ваших постов в виде отдельной статьи в раздел русскоязычной документации. На мой взгляд изложенная вами информация будет многим полезна. Ведь согласитесь, что если бороться за грамотное написание плагинов к движку то начинать стоит с четкого понимания основополагающих моментов структуры самого движка Котонти.

А теперь думаем над вопросом - с чего ты взял, что я это все затеял исключительно для себя? Потому лишь что я задаю вопросы? Неверный подход. Моя основная цель - добиться четкого, максимально детального и доходчивого для "простых смертных" , а глвавное структурированного четко по обсуждаемой тематике ( а не раскиданного по всему форуму) описания нескольких принципиальных для плагинописания моментов. Ведь на данный момент в варианте Котонти применить ход "Иди учи матчасть" не выйдет. Описания матчасти в режиме "не для Эйнштейна" просто нету. А вот как раз эти две темы - простейший способ получить эту самую документацию что называется "по ходу дела". И обсудили полезное и фактически доку сваяли. Тоесть время всех учавствовавшиш в дискуссии на самом деле потрачено с максимальной пользой.

Ну, мне так кажется. Или я не прав?

Так же стоит учесть тот факт, что некоторые пользователи котонти (как не смешно это прозвучит) не рискуют задавать подобные вопросы боясь нарваться на именно такой, исполненный "доброжелательности", ответ об их малограмотности со стороны искушенных в вопросах двигла гуру.

Чесн слово прозрачнее некуда.
Еще раз повторюсь: ты смотриш на это с точки зрения профессионала, перекопавшего уже вдоль и в поперек движок. Не забывай о том, что этот форум читают и менее подготовленные люди.

Sergey, и снова благодарю. Не сочтите за наглость но вы не могли бы перенести последний пост именно в тему о хуках? Все-таки хотелось бы соблюсти логическую структурность информации.]]>
Cmt, 30 Oca 2010 06:29:12 -0000
Sergey # Gunslinger :
И еще одно. Если вам не сложно, то обратите внимание еще на эту тему Система Hooks.
Начнем издалека. Вот текст этой функции, которая загружает плагин
function sed_getextplugins($hook, $cond='R')
{
	global $sed_plugins, $usr;

	if (is_array($sed_plugins))
	{
		foreach($sed_plugins as $i => $k)
		{
			if($k['pl_hook']==$hook && sed_auth('plug', $k['pl_code'], $cond))
			{
				$extplugins[$i] = $k;
			}
		}
	}
	return $extplugins;
}

а теперь посмотрим типичный пример описания установки плагина

Auth_guests=R
Lock_guests=W12345A
Auth_members=R
Lock_members=W12345A

типичный вызов:

/* === Hook === */
$extp = sed_getextplugins('list.main');

Ведите, в вызове функции sed_getextplugins один параметр, а в описании их два. Что обозначает это вызов? Этот, типовой вызов обозначает,
что это

Auth_guests=R
Lock_guests=W12345A
Auth_members=R
Lock_members=W12345A

системе пофиг, это выполняется одним образом $cond='R' т.е. всегда, если вы установили Auth в R .
Имеется еще один момент. У функции sed_getextplugins($hook, $cond='R') проводится выборка по имени хука $hook всех активных (не отключенных) одноименных с хуком элементов плагинов. Выборка производится из массива $sed_plugins Выборка производится один раз по ключу $cond. Следовательно, если у вас появилась мысль использовать плагин для группы "доверенных товарищей" вам придется позаботится об этом самим, т.е. написать особый плагин загрузки ваших плагинов для "доверенных товарищей".

вот вызов для получения правильного доступа по правам из page.inc.php к категории (списку)

list($usr['auth_read'], $usr['auth_write'], $usr['isadmin'], $usr['auth_download']) = sed_auth('page', $pag['page_cat'], 'RWA1');

аналогично, должно быть и к плагину для группы товарищей.

Следующий момент, это не понимание работы оператора (тут отвлеченный пример):

if (is_array($extp))
{ foreach($extp as $k => $pl) { include_once($cfg['plugins_dir'].'/'.$pl['pl_code'].'/'.$pl['pl_file'].'.php'); } }

Оператор foreach коварен. Он вначале у себя внутри выбирает все элементы из $extp а потом их перебирает, поэтому !! вы не сможете уже переопределить массив $extp дальше. Конечно, надо несколько другой механизм применять, но необходимость этого встречается только в отдельных случаях, когда вы решили динамически подвинуть или исключить плагин. Не выйдет.

Другое коварство заключается в именах переменных. Такие простенькие имена типа $i или $k могут использоваться и другими разработчиками других плагинов, особенно, состоящих из нескольких частей. Можно ненароком потереть или переопределить чужую переменную. В этом случае лучше перейти к своему классу или на худой конец оформить свой плагин функцией.]]>
Cmt, 30 Oca 2010 04:39:53 -0000
Dayver # Gunslinger : И еще одно. Если вам не сложно, то обратите внимание еще на эту тему : Система Hooks. Принцип работы..Как мне кажется она так же недостаточно прозрачна в плане понимания обычным пользователям. Не внимательность - зло. Отсюда и непрозрачность. Чесн слово прозрачнее некуда. Я бы понял вашу позицию если бы вы впервые увидели движок но судя по форуму neocrome.ru в это поверить не реально. Вот все ругают котонти за отсутствие документации .... и ругают многие которые перешли с седа .. возникает вопрос как же все жилы раньше при седе? Ох почему то я не видел такого недовольства на неокроме. Многие новшества внедренные в котонти мало мальски документированы ... мало документации по тому функционалу который не изменился со времен седитио (Радует что в версиях 0.7.0 и 1.0.0 такого останется крайне мало).]]> Cmt, 30 Oca 2010 04:03:37 -0000 Sergey
$t->parse("MAIN.LIST_ROW");

где MAIN это префикс всех тегов в главной части шаблона, отвечающие выражению LIST_ROW и дальше, т.е
	"LIST_ROW_URL" => $pag['page_pageurl'],
	"LIST_ROW_ID" => $pag['page_id'],
	"LIST_ROW_CAT" => $pag['page_cat'],
	"LIST_ROW_KEY" => htmlspecialchars($pag['page_key']),
	"LIST_ROW_TITLE" => htmlspecialchars($pag['page_title']),
	"LIST_ROW_DESC" => $pag['page_desc'],
	"LIST_ROW_DESC_OR_TEXT" => sed_cutpost($pag['page_text'], 200, false),
	"LIST_ROW_AUTHOR" => htmlspecialchars($pag['page_author']),
	"LIST_ROW_OWNER" => sed_build_user($pag['page_ownerid'], htmlspecialchars($pag['user_name'])),
	"LIST_ROW_DATE" => @date($cfg['formatyearmonthday'], $pag['page_date'] + $usr['timezone'] * 3600),
	"LIST_ROW_FILEURL" => empty($pag['page_url']) ? '' : sed_url('page', 'id='.$pag['page_id'].'&a=dl'),
	"LIST_ROW_SIZE" => $pag['page_size'],
	"LIST_ROW_COUNT" => $pag['page_count'],
	"LIST_ROW_FILEICON" => $pag['page_fileicon'],
	"LIST_ROW_FILECOUNT" => $pag['page_filecount'],
	"LIST_ROW_JUMP" => sed_url('page', $page_urlp.'&a=dl'),
	"LIST_ROW_COMMENTS" => $pag['page_comments'],
	"LIST_ROW_RATINGS" => $list_ratings,
	"LIST_ROW_ADMIN" => $pag['admin'],
	"LIST_ROW_ODDEVEN" => sed_build_oddeven($jj),
    "LIST_ROW_NUM" => $jj
Однако, имеются переменные, которые вставляются как теги. Для этих тегов имеется правило:
PHP.имя_переменной.ассоциативный_код
вот пример из шаблона list.tpl
<tr>
	<td class="coltop">{LIST_TOP_TITLE} {LIST_TOP_COUNT}</td>
	<td class="coltop" style="width:96px;">{PHP.L.Comments}</td>
	<td class="coltop" style="width:96px;">{PHP.L.Ratings}</td>
	<td class="coltop" style="width:96px;">{LIST_TOP_DATE}</td>
	<td class="coltop" style="width:128px;">{LIST_TOP_AUTHOR}</td>
</tr>
теги LIST_TOP_DATE и LIST_TOP_AUTHOR, а PHP.L.Comments и PHP.L.Ratings это переменные PHP: $L['Comments'] и $L['Ratings'].
Все теги которые не были "запарсены" префиксно, парсятся в конце модуля оператором

$t->parse("MAIN");

а выводится во внешний поток (на экран юзера) оператором

$t->out("MAIN");

Надо помнить, что сколько раз вы включили $t->parse() столько раз, эта часть шаблона парсится. Так получаются таблицы. Вот этот участок в list.inc.php
	$t-> assign(array(
		"LIST_ROWCAT_URL" => sed_url('list', 'c='.$i),
		"LIST_ROWCAT_TITLE" => $x['title'],
		"LIST_ROWCAT_DESC" => $x['desc'],
		"LIST_ROWCAT_ICON" => $x['icon'],
		"LIST_ROWCAT_COUNT" => $sub_count,
		"LIST_ROWCAT_ODDEVEN" => sed_build_oddeven($kk),
        "LIST_ROWCAT_NUM" => $kk,
		));

		/* === Hook - Part2 : Include === */
		if (is_array($extp))
		{ foreach($extp as $k => $pl) { include($cfg['plugins_dir'].'/'.$pl['pl_code'].'/'.$pl['pl_file'].'.php'); } }
		/* ===== */


		$t->parse("MAIN.LIST_ROWCAT");
Имеется еще одно замечательное определение, точнее переопределение. До парсинга, у тега можно изменить значение двумя способами, вот пример, обращение как элементу класса через функцию $t-> assign() и как к элементу массива через имя тега:

$t->vars["ИМЯ_ТЕГА"]
if	(isset($mesg_elink) and !empty ($mesg_elink))   // сообщение на странице отображения элемента
	{
	if	(isset($t->vars["PAGE_MSG"]))
		{
		$t->vars["PAGE_MSG"] .= "<br />".$mesg_elink;
		}
		else
			{
			$t->assign(array("PAGE_MSG" => $mesg_elink));
			}
	}
В этот примере определяется, был ли каким-то плагином, сформирован тег PAGE_MSG Если он не сформирован, то тег генерируется, а если тег есть, то он дополняется новым сообщением. Не заменяется, как в первом случае, а дополняется или модифицируется.
Впрочем ссылка на шаблонизатор уже приведена.]]>
Cmt, 30 Oca 2010 03:54:16 -0000
Gunslinger Sergey, Trustmaster, большое спасибо за потраченное вами на ликбез время. Sergey, вам отдельная благодарность за детали. Вот теперь картина с плагинами и модулями обрела ясность.

Полагаю, будет не лишним предложить вынести содержимое ваших постов в виде отдельной статьи в раздел русскоязычной документации. На мой взгляд изложенная вами информация будет многим полезна. Ведь согласитесь, что если бороться за грамотное написание плагинов к движку то начинать стоит с четкого понимания основополагающих моментов структуры самого движка Котонти.

И еще одно. Если вам не сложно, то обратите внимание еще на эту тему : Система Hooks. Принцип работы.. Как мне кажется она так же недостаточно прозрачна в плане понимания обычным пользователям. Буду категорически признателен за ваши комментарии и пояснения.]]>
Cmt, 30 Oca 2010 03:15:34 -0000
Trustmaster # SunChase : может слегка не в тему,но может ктото ткнуть на инфу по условиям типа PHP.tab и всё такое?
http://www.cotonti.com/docs/en/skins/xtemplate_introduction]]>
Cmt, 30 Oca 2010 03:05:59 -0000
SunChase Cmt, 30 Oca 2010 02:52:31 -0000 Sergey # Gunslinger : Sergey
С точки зрения програмного кода плагин по вашему не является тем же подключаемым модулем?
Вы не поняли, модуль подключается, точнее включается средствами браузера, а плагин средствами PHP.
Однако, PHP имеет внутренний механизм организации нового потока, подменяющего ответ от браузера. Как бы вписывает строку урла в браузере и тут же сам ее принимает. Вот рассмотрим этот необычно-стандартный участок, не только обработки ошибок.
if ($pag['page_state'] == 1 && !$usr['isadmin'] && $usr['id'] != $pag['page_ownerid'])
{
	sed_log("Attempt to directly access an un-validated page", 'sec');
	header("Location: " . SED_ABSOLUTE_URL . sed_url('message', "msg=930", '', true));
	exit;
}

if (mb_substr($pag['page_text'], 0, 6)=='redir:')
	{
	$redir = str_replace('redir:', '', trim($pag['page_text']));
	$sql = sed_sql_query("UPDATE $db_pages SET page_filecount=page_filecount+1 WHERE page_id='".$pag['page_id']."'");
	header("Location: " . SED_ABSOLUTE_URL . $redir);
	exit;
	}

elseif (mb_substr($pag['page_text'], 0, 8)=='include:')
	{
	$pag['page_text'] = sed_readraw('datas/html/'.trim(mb_substr($pag['page_text'], 8, 255)));
	}
В группе операторов
if ($pag['page_state'] == 1 && !$usr['isadmin'] && $usr['id'] != $pag['page_ownerid'])
{
	sed_log("Attempt to directly access an un-validated page", 'sec');
	header("Location: " . SED_ABSOLUTE_URL . sed_url('message', "msg=930", '', true));
	exit;
}
модуль определяет, что если входная страница имеет статус не утвержденной страницы, и что эта страница не юзера и что зашел не админ (модератор), то такую страницу читать нельзя (не положено).
Выводится сообщение Attempt to directly access an un-validated page
и производится перенаправление к загрузке модуля в SED_ABSOLUTE_URL для этого сайта это http_://www.cotonti.com т.е. в самое начало. НО, текущий процесс работы модуля идет! Оператор exit; прекращает его жизнь.
Теперь посмотрим на другой участок
if (mb_substr($pag['page_text'], 0, 6)=='redir:')
	{
	$redir = str_replace('redir:', '', trim($pag['page_text']));
	$sql = sed_sql_query("UPDATE $db_pages SET page_filecount=page_filecount+1 WHERE page_id='".$pag['page_id']."'");
	header("Location: " . SED_ABSOLUTE_URL . $redir);
	exit;
	}
Он похож, но не совсем. Смотрим первых 6 знаков в тексте. Если эти знаки команды (наше правило движка) равны слову redir: то мы отсекаем из текста эти знаки а получившуюся часть складываем с SED_ABSOLUTE_URL что мы имеем, мы имеем переход на тот модуль в движке который нам нужен. Браузер через PHP выполняет команду-оператор header. Текущий процесс обработки мы опять прекращаем exit; Этот метод имеет существенный недостаток - происходит перезагрузка всей системы движка, а не подгрузка части программного кода, например из другого модуля (т.е. не как плагина к готовому целому). Происходит замена всего модуля на другой.
Не надо обижаться - это обычный, не быстрый этап освоения профессии программиста. Инструкции по программированию готовят для тех, кто прежде всего, уже это делал не раз. И, следовательно, пережевка, мешает заострить внимание.

Gunslinger! Тут, в моем примере, есть и третий участок. (модуль page.inc.php) попробуйте разобраться, для начала, и вы откроете совсем необычную возможность движка это ...]]>
Cmt, 30 Oca 2010 01:09:49 -0000
Trustmaster
Модули и плагины рождают много путаницы, потому как в общем случае слова очень близкие по значению. Так что скорее всего модули придётся именовать как-то по-другому, например зонами (zones) или областями (areas). Но пока по привычке - модули - в Seditio/Cotonti это скрипты верхнего (корневого) уровня, реализующий некий фундаментальный функционал. Примеры: форумы, страницы, личные сообщения. Как правило, один модуль содержит несколько включаемых файлов (includes). Однако ни один модуль не может заведомо реализовать все возможные пожелания тех или иных пользователей, хотя бы потому, что все сайты разные и требуют разный функционал. Поэтому для каждой логически целостной части модуля имеются точки расширения - хуки. Вот к ним-то и подключаются плагины.

Есть ещё один момент: standalone части плагинов, которые отличаются от модулей только тем, что на корневом уровне используют модуль plug.php и отличаются от модулей меньшим объёмом кода (хотя бывают и плагины с исходниками по 300kB текста), а также тем, что кроме standalone в них всё-таки есть и части, использующие хуки других модулей. Модули же не зависят друг от друга.

Окончательно плагины и модули до сих пор не разведены по функциональности, а также не разорвана жёсткая связь базовых модулей с ядром, чтобы из них можно было собирать сайт как из кубиков конструктора.

С документацией беда, да. Стараемся хотя бы на англ. документировать основные моменты. Но возможности ограничены.]]>
Cmt, 30 Oca 2010 00:46:44 -0000
Gunslinger Sergey
Ваш вопрос меня поверг своей наивностью и вот почему: в вашем вопросе содержится ответ на то, что вам еще пока не "по зубам" работать с PHP.

Пока работабю и мир от этого не рухнул. И что общего имеет концепция построения движка по которой вообще и в принципе нет человеческой документации (в следствие чего и возникают подобные вопросы) с языком программирования я не совсем понимаю. И еще одно. С точки зрения програмного кода плагин по вашему не является тем же подключаемым модулем?

Сударь, я конечно польщен тем, что вы снизошли до пояснений полному профану. Премного благодарен. Я так понимаю вы совершенно не в курсе, что люди задают вопросы для того чтобы чему-то научиться?

В краткой форме: по нормальному без демонстративного выпендрежа ответить можно?

П.С.

Sergey, Вот видите? У нас даже старожилы не понимают разници а вы в мой адрес приговоры выдаете.]]>
Cmt, 30 Oca 2010 00:30:32 -0000
Sergeich Cmt, 30 Oca 2010 00:26:17 -0000 Sergey # Gunslinger : ГХм...
Народ, не обижайтесь, но ваши ответы иногда просто убивают :)
Ваш вопрос меня поверг своей наивностью и вот почему: в вашем вопросе содержится ответ на то, что вам еще пока не "по зубам" работать с PHP. Вообще-то модуль, это (в общем случае) самостоятельная, заранее определенная часть, которая загружается по правилам обращений с ссылками в интернет. Если взять форум, то вот это обращение http_://www.cotonti.com/forums.php т.е. вызывается модуль forums.php из корневой части сайта www.cotonti.com. После знака ? идут ключи, по которым модуль определяет что делать дальше.
Плагин, это пользовательская заплатка, которая подключается в модуле соответствующим образом, в соответствующим порядком и подключается к тому юзеру, которому предоставлено разрешение на то, чтобы воспользоваться этой заплаткой. Весь эффект основан на этой стандартной части модуля по подключению плагина:
/* === Hook === */
$extp = sed_getextplugins('page.download.first');
if (is_array($extp))
{ foreach($extp as $k => $pl) { include_once($cfg['plugins_dir'].'/'.$pl['pl_code'].'/'.$pl['pl_file'].'.php'); } }

В массиве $extp содержатся указания на плагины, перебирая эти указания подключаются соответствующие плагины. Каждый модуль, условно, разбит на законченные логические части - это скелет.
У такой части имеется наименование Hook (для примера это page.download.first - загрузи в странице первым) следовательно будут загружаться плагины помеченные как page.download.first . Однако, плагинов к одной части может быть подключено много, для этого массив $extp, предварительно, сортируется по порядку Order и имени для одинаковых порядков. Исполняются вначале самые меньшие значения. Далее, ответ на мое утверждение "вам еще пока не "по зубам" работать с PHP" следует вызов этого плагина. Фактически оператор include_once (единожды) загружает файл с кодом PHP. Имя и где его искать берутся как раз берутся из условий в массиве $extp и установок всего ресурса в целом ($cfg['plugins_dir']). Условия загрузки формируются при установке плагина, обработкой специальной части плагина Setup.
Надо знать, что PHP это интерпретатор, который наперед не знает, что будет дальше. PHP просто берет это файл плагина включает в текст модуля и интерпретирует. Если, в плагине будет свой механизм Hook, то это будет продолжено дальше, пока не будут исчерпаны все подключаемые плагины для данной части.
Пройдя последний оператор плагина, интерпретатор возвратиться к исходному модулю и продолжит обработку его операторов, до следующего Hook]]>
Cum, 29 Oca 2010 23:29:26 -0000
Gunslinger Народ, не обижайтесь, но ваши ответы иногда просто убивают :)


Еще раз: в чем разница между плагинами и модулями? Всего лиш в объеме кода???

А если разницы нет, то на кой икс здались модули? Или плагины...]]>
Cum, 29 Oca 2010 22:38:48 -0000
Sergeich Cum, 29 Oca 2010 21:19:40 -0000 Gunslinger Cum, 29 Oca 2010 21:05:16 -0000 Sergeich Cum, 29 Oca 2010 18:28:37 -0000 jcrush Cum, 29 Oca 2010 16:41:19 -0000 Aristei
Эмм или форум так прочно вшит в движок, что это не реально?]]>
Cum, 29 Oca 2010 16:24:50 -0000
Gunslinger Баномет. Хак сделан с целью после разбана возвращать автоматом юзера в ту группу в которой он был до бани. Правил файл двигла users.auth.ink.php Код хака:


1.
//Guns: ban system plugin hack
//	$sql = sed_sql_query("SELECT user_id, user_maingrp, user_banexpire, user_skin, user_theme, user_lang FROM $db_users WHERE user_password='$rmdpass' AND user_name='".sed_sql_prep($rusername)."'");
	$sql = sed_sql_query("SELECT user_id, user_maingrp, user_banexpire, user_skin, user_theme, user_lang, user_unban_group FROM $db_users WHERE user_password='$rmdpass' AND user_name='".sed_sql_prep($rusername)."'");
//Guns: End


2.

//Guns: ban system plugin hack
//			$sql = sed_sql_query("UPDATE $db_users SET user_maingrp='4' WHERE user_id={$row['user_id']}");
			$sql = sed_sql_query("UPDATE $db_users SET user_maingrp='".$row['user_unban_group']."' WHERE user_id={$row['user_id']}");
//Guns: End

Строки оригинального кода предварительно забиты коментариями для сохранности :)

Для установки плуга:

1. SQL запрос

ALTER TABLE sed_users ADD COLUMN user_unban_group int(11) unsigned NOT NULL default '0';
В добавленном поле таблицы хранится группа юзера в которой он был до бана.

2. Вышеописанный хак

3. Стандартный инсталл самого плуга через админку.

Модули самого плагина должны содержать комментарии. Вобщем жду замечаний и предложений. Просьба сильно не пинать. Все-таки первый блин самостоятельной выпечки :)

Тестировали работоспособность плагина трое: я, SunChase и еще один человек. Вроде все пашет хотя для уверенности статистики маловато :)

П.С.

При попытке загрузить архив с плугом в свой ПФП на сайте возник трабл. Выбивало сообщение об ошибке до тех пор пока не создал внутри ПФП папку и не залил плуг туда. В корень ну никак не хотело. Я что-то намудрил или это известный косяк?]]>
Cum, 29 Oca 2010 09:02:15 -0000
esclkm Для начала попробую начать с простого. Соединю эти плуги: расширенная статистика форума, подписка на темы, бан пользователей по аккаунту. это будет чрезвычайно полезно. но только объединяй плагины по профилю) так будет очень ползная наработка. Может и не совсем для всего. но это будет рельно удобно.

Hook=tools - тут смотри сам: если у тебя банальная настройка - то выноси в банальные настройки.
Но если глобальная работа с базами, сложные элементы, которые нельзя просто сохранить - то это то что надо

первый плагин он на то и первый плагин) дальше проще)
одно советую сразу накачай гору плагинов - чтобы смотреть как достигается тот или иной результат)

про аякс- не спеши. у нас все меняется. стабильный вариант функций аякса будет уже скоро.притом документированный)
плагин выкидывай и описывай словесно хак. оптимизировать поможем)]]>
Cum, 29 Oca 2010 06:11:38 -0000
Trustmaster Gunslinger:
Согласен. Это можно сотворить без хака админки? Если да, то каков принцип? Hook=tools]]>
Per, 28 Oca 2010 21:30:40 -0000
Gunslinger Dayver, Trustmaster принцип вроде бы понял. Единственное "но" - я в аджаксе разбираюсь как чебурашка в астрофизике :) Руки еще не дошли.

думаю так же может понадобится создать страницу в разделе "Инструменты" админки на которой могут размещаться более сложные элементы управления плагином нежели простые конфиги ...

Согласен. Это можно сотворить без хака админки? Если да, то каков принцип?

Для начала попробую начать с простого. Соединю эти плуги: расширенная статистика форума, подписка на темы, бан пользователей по аккаунту.

Легкий оффтоп:

Кстати, может быть плагин бана по аккаунту на заданный срок включить уже в коробку? Или как родной функционал движка? А то я нифига не представляю себе форум, на котором все пользователи на столько праведны, что никогда и никого банить не придется :) Утопия ИМХО. Плагин я уже давно сделал (правда в нем есть таки один хак). Может глянете код на предмет улучшения и оптимизации? Он работает и под Седитио и под Котонти. Говорю сразу, что это была моя первая доработка на ПХП, так, что там вполне возможна целая куча промахов и нерациональностей.]]>
Per, 28 Oca 2010 18:57:35 -0000
Sergeich ]]> Per, 28 Oca 2010 02:53:01 -0000 Dayver Per, 28 Oca 2010 00:57:58 -0000 Trustmaster Per, 28 Oca 2010 00:18:33 -0000 Gunslinger Dayver,
А можно и я таки выскажусь?
Вот в таком ключе не то что можно, а даже нужно.

По поводу твоего предложения - тоже вполне пиемлемый вариант. Вот только необходимо хорошенько продумать систему слияния всех плугов в один функционал. Или отработать методику, которая позворлит наименее геморно присоединить к подобному глобальному плагину новые поступления :) Может что посоветуеш на эту тему?]]>
Çrş, 27 Oca 2010 23:06:13 -0000
Dayver
Я не пытаюсь что либо доказать или вступить в спор - просто выдвинул идею (надеюсь хорошую)]]>
Çrş, 27 Oca 2010 08:23:16 -0000
Gunslinger Trustmaster БОЛЬШОЕ ЧЕЛОВЕЧЕСКОЕ СПАСИБО

П.С.

Просьба темку пока не закрывать. Возможно, всплывут еще вопросы.]]>
Sal, 26 Oca 2010 22:57:23 -0000
Trustmaster sql/cotonti-0.6.3.sql, ищем там "INSERT INTO `sed_config`", находим премеры запросов добавления конфигов. Кроме SQL нужно ещё обновить функцию восстановления дефолтных настроек. Находится она в system/functions.admin.php и называется sed_loadconfigmap().]]> Sal, 26 Oca 2010 22:50:37 -0000 Gunslinger jcrush говориш нормально форум сделан? Ок. Давай посмотрим. Берем коробочную версию кота и пробуем сделать следующее:

1. Прикрепи мне в теме заглавный пост

2. Мне необходимо забанить пользователя на 4 часа за флуд.

Распиши ка подробно как это сделать в коробочном варианте? Мой же плагин баномета плиз не предлагать. В офф плугинах такой примочки к двиглу нет. Я так понимаю это нафиг не нужная весч на форуме да?

Или это по твоему "финтифлюшки"?

Кроме того, все что вы назвали "рюшечками" и "финтифлюшками" является таковым ровно до тех пор пока не возникнет необходжимость. Над проектами с которыми я работаю все перечисленное ранее есть необходимостью. Почему - мое личное дело, и личное дело заказчика.

esclkm
Из своих замечаний: самые популярные сайты сейчас социальные сети
Социальные сети это вобще отдельная тема. http://stalker-portal.ru/ категорически непопулярный сайт да?. Кроме того см. сайты, указанные SunChase. Или у тебя в списке популярности только фкантакты и одноклассники?
Ну а если уж говорить о соцсетях то количество необходимых для этого доработок в котонти мягко говоря угнетает.

Trustmaster
Не стоит оно того.
Спасибо за совет но у меня есть свои причины подходить именно так. И не только у меня.

От хаков все ушли хотя бы потому, что их невозможно поддерживать от версии к версии, особенно на множестве сайтов.

Зависит от подхода. Если человек курочит движок так, что потом сам не может понять что и зачем делал то это его проблемы. У меня пока трудностей с обновлением не возникало, а хаков в ядре дофига.

Самый простой пример перечисленных мной "финтифлюшек" - геймерский сайт. Или такие сайты - лажа не достойная внимания по вашему?

Sergeich

По поводу приведенных тобой офф сайтов разработчиков форумов. Ты вообще заглядывал в настройки этих форумов в коробочном варианте? Форум Джумлы видел в режиме настройки (или он в список популярных не входит?) ? Если да, то покажи мне хотя бы 10% этих возможностей в коте. Даже такую "финтифлюшку" как подфорумы и то только в варианте котонти склепали относительно по-человечески. Или она тоже никому нафиг не нужна?


но сообщения о новичках и именинниках на форуме лично мне нафиг не нужно и я не понимаю кому оно вообще может быть нужно.

Вот мой сосед например не понимает почему имея жену и двух детей ему нельзя через день напиваться до белой горячки. Ну нипонимает и все тут. Лично его ведь это просто прет! Его дружки тоже не понимают чего жена убивается.

Точно! Нафига люди аж целый плагин для такой ненужной фиговины наваяли? Удивительно просто.

Кстати http://punbb.informer.com/forums/ - смотреть подвал страницы страницы




Короче к теме.


1. Я не просил оценивать мой подход и давать советы по идеологии. Почему я решил делать именно так - (как правильно заметил ранее Сергеич) мои личные проблемы.

Цитирую себя еще раз:

Еще раз повторюсь, что разделять мое видение ситуации не обязательно, просто если можете, то подскажите, как именно вставить все необходимое (новые пункты настроек) в админку. Остальное я сам в состоянии сделать.

то esclkm
Я не понимаю этой неосознанной тяги к сложному...
1. У меня пока все "тяги" вполне осознанны, а понимать их мотивацию тебя как бы никто не просит.
2.
мы не создаем системуу - сайт за 5 минут.
Угу. Пока получается сайт за полгода :)
3.
я же написал где беруться настройки.

Да? Процитируй свой ответ, где конкретно и четко пояснено как добавить в адлминку новую настройку. Мой вопрос был именно таков.

2. Народ я эту тему создавал чтобы получить грамотную техническую консультацию по моему вопросу, а не мурыжить на 5 листов вопросы идеологии построения форума. Если мне будет нужно мнение общественности по поводу рациональности моей затеи - я об этом спрошу. В контексте данной темы лирика в стиле "почему" "зачем" "и "ты неправильно подходиш" неуместна. Вопрос поставлен четко и ясно. Можете помочь - помогите конкретикой. Не можете или не хотите - проходите мимо темы. Тема претит религиозным взглядам админтима - закройте ее.]]>
Sal, 26 Oca 2010 22:31:00 -0000
SunChase Sal, 26 Oca 2010 21:30:29 -0000 esclkm Sal, 26 Oca 2010 21:18:52 -0000 SunChase # Kort : SunChase и Gunslinger, так вас же за руки никто не держит: работайте ручками, вы же умные ребята! А остальные дураки пусть пишут модули и плагины.
тоись возвращаемся к начальному вопросу к разработчикам :)

Короче нужен хак админки. Поясните плз как это делать
Такчто попрошу уточнить Где именно стоит копатся,а не ответы типа "ну там в папке core поищи".

Sergeich спасибо что поправил.]]>
Sal, 26 Oca 2010 21:00:42 -0000