Вопрос по коду PHP

D
На сайте с 28.06.2008
Offline
1101
429

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

Изначально код плагина кнопок был такой

<?php defined('_JEXEC') or die('Restricted access');

jimport('joomla.plugin.plugin');

class plgSystemShare extends JPlugin
{
var $content = null;

function onBeforeCompileHead()
{
$doc = JFactory::getDocument();
$buffer = $doc->getBuffer('component');

if(preg_match('/<!-- share -->/', $buffer))
{
$doc->addStyleSheet('/media/css/style.css');
$doc->addScript('/media/js/script.js');
$this->content = '<ul class="share-button">
<li class="share-button-vk"><span class="share-icon"></span></li>
<li class="share-button-twitter"><span class="share-icon"></span></li>
<li class="share-button-odnoklassniki"><span class="share-icon"></span></li>
<li class="share-button-moimir"><span class="share-icon"></span></li></ul>';
}
}

function onAfterRender()
{
if(!empty($this->content))
{
$content = JResponse::getBody();
$content = str_replace('<!-- share -->', $this->content, $content);

JResponse::setBody($content);
}
}
}

Если я хочу сделать несколько наборов, например так

        
if(preg_match('/<!-- share -->/', $buffer))
{
$doc->addStyleSheet('/media/style.css');
$doc->addScript('/media/js/script.js');
$this->content = 'НАБОР №1';
}
if(preg_match('/<!-- share2 -->/', $buffer))
{
$doc->addStyleSheet('/media/style.css');
$doc->addScript('/media/js/script.js');
$this->content = 'НАБОР №2';
}

то как в код

 $content = str_replace('<!-- share -->', $this->content, $content);

правильно добавить <!-- share2 -->, <!-- share3 --> и т.д. ?

ДП
На сайте с 23.11.2009
Offline
203
#1


$content = preg_replace('/<!-- share\d*? -->/i', $this->content, $content);

как-то так. Только надо за пробелами следите между share и цифрой.

Либо же если блоков не много - так и пишите несколько строк:


$content = str_replace('<!-- share -->', $this->content, $content);
$content = str_replace('<!-- share2 -->', $this->content, $content);
$content = str_replace('<!-- share3 -->', $this->content, $content);

В таком случае если будет несколько блоков на странице - все заменятся.

S1
На сайте с 17.04.2011
Offline
79
#2
Дикий пионер:

$content = preg_replace('/<!-- share\d*? -->/i', $this->content, $content);

как-то так. Только надо за пробелами следите между share и цифрой.

Чтобы за пробелами не следить:


$content = preg_replace('/<!--\s{0,5}share\d*?\s{0,5}-->/i', $this->content, $content);

... тогда пробелов может быть от 0 до 5.

D
На сайте с 28.06.2008
Offline
1101
#3

<!-- share\d*? --> вот так вообще не сработало, хоть и за пробелами следил, а вот так

$content = str_replace('<!-- share -->', $this->content, $content);

$content = str_replace('<!-- share2 -->', $this->content, $content);

$content = str_replace('<!-- share3 -->', $this->content, $content);

все ок, спс!

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий