Внедрение PHP-кода в материалы Joomla

Довольно часто возникает необходимость внедрить PHP-код в Joomla-материал (калькулятор, простая форма и т.п.), сделать это непосредственно из админки не получится (ибо все что мы вставляем в поля при создании материалов считается HTML-кодом).
Краткая инструкция "как это сделать":
1. Установить мамбот/плагин (в зависимости от версии Joomla) RD AddPHP für Joomla )), брать тут: http://www.run-digital.com/loesungen/open-source/addphp.html.
2. Сделать/найти/позаимствовать PHP-файл, закинуть его в, например, папку "php" в корне сервера.
3. В нужный материал вставить код вызова вашего файла: {rdaddphp file=php/file.php}.
4. Готово.

А здесь тестовый пример php-файла (единствееное на что годен этот код это складывать два int or float числа))):

<form action="абсолютный адрес страницы на которой оубликован php-код" method="post">
<table border=0 cellspacing=0 cellpadding=2>
	<tr>
		<td>
			Первое слагаемое:
		</td>
	</tr>
	<tr>
		<td>
			<input type="text" name="p" value="<?php echo $_REQUEST['p'] ?>"><br />
		</td>
	</tr>
	<tr>
		<td>
			Второе слагаемое:
		</td>
	</tr>
	<tr>
		<td>
			<input type="text" name="v" value="<?php echo $_REQUEST['v'] ?>"><br />
		</td>
	</tr>
	<tr>
		<td>
			<input type="submit" name="submit" value="Рассчитать"/>
		</td>
	</tr>
	<tr>
</table>
</form>
<?php
echo $_REQUEST['p'].'<br>';
echo $_REQUEST['v'].'<br>';
echo 'Сумма:' .($_REQUEST['p'] + $_REQUEST['v']);
?>

Для интересующихся полный код мамбота:

defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );
 
$_MAMBOTS->registerFunction( 'onPrepareContent', 'botAddPhp' );
 
 
function botAddPhp( $published, &$row, $mask=0, $page=0  ) {
	global $mosConfig_absolute_path;
 
 	// expression to search for
 	$regex = '/{(rdaddphp)\s*(.*?)}/i';
 
 	if (!$published ) {
		$row->text = preg_replace( $regex, '', $row->text );
		return;
	}
 
	// find all instances of mambot and put in $matches
	$matches = array();
	preg_match_all( $regex, $row->text, $matches, PREG_SET_ORDER );
 
	foreach ($matches as $elm) {
 
		parse_str( $elm[2], $args );
		$phpfile=@$args['file'];
		$output = "";
		if ( $phpfile ) {
			$phpfile = $mosConfig_absolute_path . '/' . $phpfile;
			if (file_exists($phpfile)) {
				ob_start();
				include($phpfile);
				$output .= ob_get_contents();
				ob_end_clean();
			} else {
				$output = "File: $phpfile don't exists"; 	
			}
		}
		$row->text = preg_replace($regex, $output, $row->text, 1);
 
	}
	return true;
}

Вот так вот коротенько, а сколько пользы :) .

Комментариев: 4

  • 02.13.10 Михаил:

    Огромное спасибо!!!
    Перепробовал огромное колличество компонентов и модулей для создания форм в Joomla.
    Это лучший вариант, очень прост в установке и в использовании (если есть, хотя бы минимальные знания языка PHP).
    Еще раз большое спасибо!

  • 05.11.10 Я тоже Михаил:

    Большое спасибо автору статьи. 2 дня искал, но вот и нашел.

  • 06.12.10 mega:

    А как вставлять код до тега body?
    Ведь это всё будет внутри странички. А как вставить код до начала ее исполнения . До Body 7?

  • 06.13.10 Кирилл:

    2mega:
    1. В темплейте(шаблоне) сайта.
    2. В темплейте(шаблоне) «вида» страницы (могу уточнить) для Joomla 1.5.

    А как вставить код до начала ее исполнения

    3. Плагин работающий по событию onPrepareContent?
    Или уточните вопрос, т.е. что именно хочется получить.


Добавление комментария:

Вы можете использовать эти теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">