Revision 3 (by ahitrov@rambler.ru, 2010/03/24 15:19:32) The CORE
<& "/contenido/components/header.msn", title => $PROTOS->{$proto}->[0] &>



<br>
<table border="0" style="font-size:85%;" width="80%">
<tr>
<td width="10"></td>
<td>
<div style="font-size:130%;"><% $PROTOS->{$proto}->[0] %></div>
����� ������� ������� ������ "���������" � ������� ����������� 5-�� ������ �����. ������ �����������! ��������� ��� �� ������������ �� �����. ��� �������� ������-���� ����� ������ ������� ��� ���������� ������ ��� ��������.
<p>� �������� ����� ����������� ����� ���������� ��� ������ perl-����� �������. �� ���� ������ �� ����� ������ ������� ��� ������ �� ������� <a href="dump.html?proto=project" onclick="openWin('dump.html?proto=project','proto',800,600);return false">$project</a>, ������������� �� ������ ��������.
<p><% $PROTOS->{$proto}->[1] %>
</td>
</tr>

<tr><td height="20"></td></tr>

<form action="./options.html" method="post">
<input type="hidden" name="control_charset" value="��������">
<input type="hidden" name="proto" value="<% $proto %>">
<tr>
<td></td><td>

%# ### SECTION ALIAS ###############################
%	if ($proto eq 's_alias') {

<table border="0" width="60%">
<tr>
<th>��������</th>
<th>��������</th>
</tr>
%		if (ref($toopi) eq 'HASH')
%		{
%			for my $p (sort { $a cmp $b } (keys(%{ $toopi })))
%			{
<tr>
<td width="40%"><% $p %></td> 
<td>
<select style="width:100%;" name="option_<% $p %>">
<option></option>
<& "/contenido/components/select_index_tree.msn", selected => $toopi->{$p} &>
</select>
</td>
</tr>
%			}
%		}
%		for (1..5)
%		{
<tr>
<td width="40%"><input type="text" name="newoption_id_<% $_ %>" value=""></td> 
<td>
<select style="width:100%;" name="newoption_value_<% $_ %>">
<option></option>
<& "/contenido/components/select_index_tree.msn" &>
</select>
</tr>
%		}
</table>

%# ### DOCUMENTS ALIAS ###############################
<%DOC>
%	} elsif( $proto eq 'd_alias' ) {


	� ��������

<& "/contenido/components/obj_list_js.msn" &>
<table border="0" width="80%">
<tr>
<th>��������</th>
<th>��������</th>
</tr>
%		if (ref($toopi) eq 'HASH')
%		{
%			for my $p (sort { $a cmp $b } (keys(%{ $toopi })))
%			{
<tr valign="top">
<td width="25%"><% $p %></td> 
<td><& 
	"/contenido/components/_show_obj_list.msn",
		name  => 'newoption_value_'.$_,
		check => $toopi->{$p},
	
&></td>
</tr>
%			}
%		}
%		for (1..5)
%		{
<tr valign="top">
<td width="25%"><input type="text" name="newoption_id_<% $_ %>" value=""></td> 
<td><& "/contenido/components/_show_obj_list.msn" &></td>
</tr>
%		}
</table>
</%DOC>
%	} else {


<table border="0" width="60%">
<tr>
<th>��������</th>
<th>��������</th>
</tr>
%		if (ref($toopi) eq 'HASH')
%		{
%			for my $p (sort { $a cmp $b } (keys(%{ $toopi })))
%			{
<tr>
<td width="40%"><% $p %></td> 
<td><input type="text" style="width:100%;" name="option_<% $p %>" value="<% $toopi->{$p} %>"></td>
</tr>
%			}
%		}
%		for (1..5)
%		{
<tr>
<td width="40%"><input type="text" name="newoption_id_<% $_ %>" value=""></td> 
<td><input type="text" style="width:100%;" name="newoption_value_<% $_ %>" value=""></td>
</tr>
%		}
</table>

%	}

</td>
</tr>

<tr><td height="20"></td></tr>
<tr><td></td><td>
<input type="submit" value="��������� ���������" style="font-size:13pt;font-weight:bold; height:40px;margin-bottom: 5px; background-color:#930300;color:#FFFFFF;">
<input type="hidden" name="save" value="1">
</td></tr>
</form>

</table>
</body>
</html>

<%ARGS>

	$proto => undef
	$save => undef

</%ARGS>
<%INIT>

	use vars qw($keeper $request $sect);
	my $PROTOS = {
		'colors' => ['�������������� �������� ����������','� ���� ���� �������� ��������� ��� ��������� ��������� ����������, �������� ���������, �������� ������ � �.�.'],
		'widths' => ['������','� ���� ���� �������� ����������� ��� ����������� ��������� ��������� ��������. ��� ������, �������, ���������� � �.�.'],
		'params' => ['�������������� ���������','� ���� ���� �������� ��������� ������������ ���������, �� ���������� � ������ ������.'],
		's_alias' => ['�������������� ������','����� ��������� ������ (������) ������������� ����������� ��������� ��������������-�����. ��� �������� ��� ����, ����� ��������� ������ ������������� ���������� � ����������� ���������������� ������'],
		'd_alias' => ['�������������� ����������','����� ��������� ���������� ������������� ����������� ��������� ��������������-�����. ��� �������� ��� ����, ����� ��������� ��������� � ����������� ���������������� ������'],
		'redirects' => ['�������� �����','����� ������������ ��������� (�� ���� ����������� � �� ��������). � �������� ��������� ��������� �������� ���, � � �������� �������� - ��� URI (<b>������� ��������� ���� /</b>, index.html ��������� �� ����).'],
	};

	my $toopi = $project->$proto();
	if ( ($save) && (exists($PROTOS->{$proto})) )
	{
		my $N = {};
		my $V = {};
		foreach my $p (keys(%ARGS))
		{
			if ($p =~ /^option_(.+)$/)
			{
				if ( (length($ARGS{'option_'.$1})<1) && (exists($toopi->{$1})) )
				{
					delete $toopi->{$1};
				} else {
					$toopi->{$1} = $ARGS{'option_'.$1};
				}
			} elsif ($p =~ /^newoption_id_(.+)$/)
			{
				$N->{$1} = $ARGS{'newoption_id_'.$1};
			} elsif ($p =~ /^newoption_value_(.+)$/)
			{
				$V->{$1} = $ARGS{'newoption_value_'.$1};
			}
		}
		foreach my $n (keys(%{ $N }))
		{
			next	if (length($N->{$n}) < 1);
			$toopi->{$N->{$n}} = $V->{$n};
		}

		$project->$proto($toopi);
		$project->store($keeper);

	} elsif ( $proto eq 's_alias' && not defined $save) {
		#warn Data::Dumper::Dumper($sect)."\n";
	}

</%INIT>

Небольшая справка по веткам

cnddist – контейнер, в котором хранятся все дистрибутивы всех библиотек и программных пакетов, которые использовались при построении различных версий Contenido. Если какой-то библиотеки в данном хранилище нет, инсталлятор сделает попытку "подтянуть" ее с веба (например, с CPAN). Если библиотека слишком старая, есть очень большая вероятность, что ее там уже нет. Поэтому мы храним весь хлам от всех сборок. Если какой-то дистрибутив вдруг отсутствует в cnddist - напишите нам, мы положим его туда.

koi8 – отмирающая ветка, чей код, выдача и все внутренние библиотеки заточены на кодировку KOI8-R. Вносятся только те дополнения, которые касаются внешнего вида и функционала админки, баги ядра, обязательные обновления портов и мелочи, которые легко скопипастить. В дальнейшем планируется полная остановка поддержки по данной ветке.

utf8 – актуальная ветка, заточенная под UTF-8.

Внутри каждой ветки: core – исходники ядра; install – скрипт установки инсталляции; plugins – плагины; samples – "готовые к употреблению" проекты, которые можно поставить, запустить и посмотреть, как они работают.