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

Довольно часто возникает необходимость внедрить PHP-код в Joomla-материал (калькулятор, простая форма и т.п.), сделать это непосредственно из админки не получится (ибо все что мы вставляем в поля при создании материалов считается HTML-кодом).
Краткая инструкция «как это сделать»:
1. Установить мамбот/плагин (в зависимости от версии Joomla) RD AddPHP fur 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;
}

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

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

  • 13.02.2010 Михаил:

    Огромное спасибо!!!

    Перепробовал огромное колличество компонентов и модулей для создания форм в Joomla.

    Это лучший вариант, очень прост в установке и в использовании (если есть, хотя бы минимальные знания языка PHP).

    Еще раз большое спасибо!

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

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

  • 12.06.2010 mega:

    А как вставлять код до тега body?

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

  • 13.06.2010 Кирилл:

    2mega:

    1. В темплейте(шаблоне) сайта.

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

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

    3. Плагин работающий по событию onPrepareContent?

    Или уточните вопрос, т.е. что именно хочется получить.

  • 27.02.2011 Никита:

    Отдуши Дружище)))очень пригодилось)) огромное спасибо!!!

  • 10.04.2011 Марина:

    у меня вот такая проблема: установила этот плагин, все сделала по инструкциям, а скрипт не выполняется просто белую страничку показывает, при чем если просто писать echo 'hello, world' все работает. может кто сталкивался, помогите пожалуйста

    • 10.04.2011 Кирилл:

      если просто писать echo ‘hello, world’ все работает

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

        модуль Mod PHP исполняет мой код, а плагин не хочет. но все равно спасибо =))

        я нашла другой плагин DirectPHP plugin, который позволяет писать php команды прямо в статье и испоняет их. если кому нужно www.kksou.com/php-gtk2/Jo...gin.php#download

        • 10.04.2011 Кирилл:

          Ок, и вам спасибо за дополнительные варианты вставки кода php.

        • 14.04.2012 Шаркович:

          Мариночка, спасибо, прям поцеловать тебя готов)

          • 15.04.2012 Марина:

            )))) рада помочь

  • 21.08.2011 Мебельщик:

    Спасибо, то что искал...

  • 19.09.2011 Шаркович:

    Автор, я тебя люблю!

  • 25.09.2011 Шаркович:

    Когда делаю занесение данных в таблицу мускула на русском языке, то в базу заносятся квадратики) простите за нубский вопрос: как исправить?

    • 26.09.2011 Кирилл:

      Предположительно вбиваете в форму символы в одной кодировке, а база в другой, попробуйте поюзать функцию iconv или как-то по-другому проверить кодировки.

  • 28.09.2011 Killa:

    Добрый день! Вставляю Ваш код с помощью AddPHP в материал, когда нажимаю рассчитать выдает ошибку: Not Found

    The requested URL /test/пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ php-пїЅпїЅпїЅ was not found on this server.

    Скадите это ошибка из-за кодировки или в чем дело?

    • 28.09.2011 Кирилл:

      ошибка из-за кодировки

      Скорее всего, попробуйте назвать php-файл латиницей, если это уже так проверить читаемость его имени на сервере.


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

 css.php