Вставка php через $buffer = preg_replace

12
manaz
На сайте с 13.12.2013
Offline
61
1397

Всем добрый день. Подскажите пожалуйста где я делаю ошибку...

Суть в том что я вставляю по тегу php

но у меня он после вставки получается не читабельным, а именно он читается как текст почему то.

Вот как я вставляю

тег </shcodes> вставляю в php скрипт


$buffer = JResponse::getBody();

$phpscript = "

<input type=text name=orders value=". $order_id .">
";


$buffer = preg_replace("/<\/shcodes>/", "\n\n" . $put . "\n\n" . $br . "\n\n" . $phpscript . "\n\n" . $jscript ."\n\n</shcodes>", $buffer);

JResponse::setBody($buffer);

return true;

но после этого если передаю к примеру <input type=text name=orders value=". $order_id .">

Но в исходном коде он выглядит так


<input type=text name=orders value=>

И value постой

Что я делаю не так, подскажите плиз.

S3
На сайте с 29.03.2012
Offline
366
#1

а что у вас отвечает за заполнение $order_id?

Лично я по этому куску кода ничего не вижу

---------- Добавлено 18.08.2016 в 12:46 ----------

manaz:
$buffer = preg_replace("/<\/shcodes>/", "\n\n" . $put . "\n\n" . $br . "\n\n" . $phpscript . "\n\n" . $jscript ."\n\n</shcodes>", $buffer);

мне кажется тут надо искать ошибку

Samail
На сайте с 10.05.2007
Offline
369
#2

$order_id откуда берётся? ...и значения атрибутов тега желательно в кавычки заключить.

manaz
На сайте с 13.12.2013
Offline
61
#3

Вот скрипт куда выводится мой php

место вывода мой тег </shcodes>


<?php

defined('_JEXEC') or die('Restricted access');
?>
<?php
if (count($this->orderlist) == 0) { ?>

<div class="box-bg login-box2 cart-view">
<h3 class="module-title"><?php echo vmText::_('COM_VIRTUEMART_ORDER_ANONYMOUS') ?></h3>
<div class="box-bg-indent">
<?php echo shopFunctionsF::getLoginForm(false,true); ?>
</div>
</div>
<?php } else {
?>
<div id="editcell" class="order-list">
<h1><?php echo JText::_('COM_VIRTUEMART_ORDERS_VIEW_DEFAULT_TITLE'); ?></h1>
<div class="order-items-box">
<div class="table-responsive">
<table class="table table-striped table-bordered table-hover">
<tr class="info">
<td>
<?php echo JText::_('COM_VIRTUEMART_ORDER_LIST_ORDER_NUMBER'); ?>
</td>
<td class="hidden-xs">
<?php echo JText::_('COM_VIRTUEMART_ORDER_LIST_CDATE'); ?>
</td>
<td class="hidden-xs">
<?php echo JText::_('COM_VIRTUEMART_ORDER_LIST_MDATE_MY'); ?>
</td>
<td>
<?php echo JText::_('COM_VIRTUEMART_ORDER_LIST_STATUS_MY'); ?>
</td>

<td>
<?php echo JText::_('COM_VIRTUEMART_ORDER_LIST_PODTVERGDENI'); ?>
</td>



<td>
<?php echo JText::_('COM_VIRTUEMART_DELIVERY_RPO'); ?>
</td>

<td>
<?php echo JText::_('COM_VIRTUEMART_ORDER_LIST_TOTAL'); ?>
</td>

<?php





$k = 0;
foreach ($this->orderlist as $row) {
$editlink = JRoute::_('index.php?option=com_virtuemart&view=orders&layout=details&order_number=' . $row->order_number, FALSE);
?>
<tr class="<?php echo "row$k"; ?>">$row->order_number
<td>
<span class="divice-name"><?php echo JText::_('COM_VIRTUEMART_ORDER_LIST_ORDER_NUMBER'); ?></span>
<a href="<?php echo $editlink; ?>"><?php echo ; ?></a>


</td>
<td class="hidden-xs">
<span class="divice-name"><?php echo JText::_('COM_VIRTUEMART_ORDER_LIST_CDATE'); ?></span>
<?php echo vmJsApi::date($row->created_on,'LC4',true); ?>
</td>
<td class="hidden-xs">
<?php echo vmJsApi::date($row->modified_on,'LC4',true); ?>
</td>
<td>
<span class="divice-name"><?php echo JText::_('COM_VIRTUEMART_ORDER_LIST_STATUS'); ?></span>
<?php echo ShopFunctions::getOrderStatusName($row->order_status); ?>
</td>

<td>




</shcodes>


</td>

<td>
<?php
if(!empty($row->order_track )){
//if ($row->order_track != NULL) {
echo "<span class=\"divice-name\">".JText::_('COM_VIRTUEMART_DELIVERY_RPO')."</span>";
echo $row->order_track;
}
?>
</td>

<td class="total">

<?php echo $this->currency->priceDisplay($row->order_total, $row->currency); ?>
</td>
</tr>
<?php
$k = 1 - $k;
}
?>
</table>
</div></div>
</div>
<?php } ?>

вывожу



$buffer = JResponse::getBody();

$phpscript = "
<button onclick='statusUp(".$i->id.",this)' class='btn off btn-success btn-sm'>".JText::_('COM_VIRTUEMART_STATUS_POLUCHEN')."</button>
<input type=text name=orders value=". $row->order_number .">
";

$buffer = preg_replace("/<\/shcodes>/", "\n\n" . $ps . "\n\n" . $br . "\n\n" . $phpscript . "\n\n" . $jscript ."\n\n</shcodes>", $buffer);

JResponse::setBody($buffer);

return true;

получается через тег я вставляю в сам цыкл foreach

но нечего не выводится

пробовал принтовать

<input type=text name=orders value=". print_r($row->order_number) .">
, принт почему то <input type=text name=orders value=1>

выводится только

---------- Добавлено 18.08.2016 в 14:02 ----------

получается если вывожу через буферизацию то php как не в теле что ли получается, и из за этого он не читаемый. Но почему...

---------- Добавлено 18.08.2016 в 15:26 ----------

пробую вывести принт по другому


$buffer = JResponse::getBody();

$buffer = preg_replace('#(<shcodes[^\>]*?>)#ism', print_r($row->order_number), $buffer);

JResponse::setBody($buffer);

return true;

скрипт где выводится мой тег


<?php

defined('_JEXEC') or die('Restricted access');
?>
<?php
if (count($this->orderlist) == 0) { ?>

<div class="box-bg login-box2 cart-view">
<h3 class="module-title"><?php echo vmText::_('COM_VIRTUEMART_ORDER_ANONYMOUS') ?></h3>
<div class="box-bg-indent">
<?php echo shopFunctionsF::getLoginForm(false,true); ?>
</div>
</div>
<?php } else {
?>
<div id="editcell" class="order-list">
<h1><?php echo JText::_('COM_VIRTUEMART_ORDERS_VIEW_DEFAULT_TITLE'); ?></h1>
<div class="order-items-box">
<div class="table-responsive">
<table class="table table-striped table-bordered table-hover">
<tr class="info">
<td>
<?php echo JText::_('COM_VIRTUEMART_ORDER_LIST_ORDER_NUMBER'); ?>
</td>
<td class="hidden-xs">
<?php echo JText::_('COM_VIRTUEMART_ORDER_LIST_CDATE'); ?>
</td>
<td class="hidden-xs">
<?php echo JText::_('COM_VIRTUEMART_ORDER_LIST_MDATE_MY'); ?>
</td>
<td>
<?php echo JText::_('COM_VIRTUEMART_ORDER_LIST_STATUS_MY'); ?>
</td>

<td>
<?php echo JText::_('COM_VIRTUEMART_ORDER_LIST_PODTVERGDENI'); ?>
</td>


<!--solopov добавил Р*РџРћ-->
<td>
<?php echo JText::_('COM_VIRTUEMART_DELIVERY_RPO'); ?>
</td>

<td>
<?php echo JText::_('COM_VIRTUEMART_ORDER_LIST_TOTAL'); ?>
</td>

<?php
$k = 0;
foreach ($this->orderlist as $row) {
$editlink = JRoute::_('index.php?option=com_virtuemart&view=orders&layout=details&order_number=' . $row->order_number, FALSE);
?>
<tr class="<?php echo "row$k"; ?>">
<td>
<span class="divice-name"><?php echo JText::_('COM_VIRTUEMART_ORDER_LIST_ORDER_NUMBER'); ?></span>
<a href="<?php echo $editlink; ?>"><?php echo $row->order_number; ?></a>
</td>
<td class="hidden-xs">
<span class="divice-name"><?php echo JText::_('COM_VIRTUEMART_ORDER_LIST_CDATE'); ?></span>
<?php echo vmJsApi::date($row->created_on,'LC4',true); ?>
</td>
<td class="hidden-xs">
<?php echo vmJsApi::date($row->modified_on,'LC4',true); ?>
</td>
<td>
<span class="divice-name"><?php echo JText::_('COM_VIRTUEMART_ORDER_LIST_STATUS'); ?></span>
<?php echo ShopFunctions::getOrderStatusName($row->order_status); ?>
</td>

<td>
<span class="divice-name"><?php echo JText::_('COM_VIRTUEMART_ORDER_LIST_PODTVERGDENI'); ?></span>



<shcodes>
</td>

<td>
<?php
if(!empty($row->order_track )){
//if ($row->order_track != NULL) {
echo "<span class=\"divice-name\">".JText::_('COM_VIRTUEMART_DELIVERY_RPO')."</span>";
echo $row->order_track;
}
?>
</td>

<td class="total">

<?php echo $this->currency->priceDisplay($row->order_total, $row->currency); ?>
</td>
</tr>
<?php
$k = 1 - $k;
}
?>
</table>
</div></div>
</div>
<?php } ?>

но выводится не понятная цифра 1


<tr class="row0">
<td>
<span class="divice-name">Номер заказа</span>
<a href="/index.php?option=com_virtuemart&view=orders&layout=details&order_number=8T8T089&Itemid=133">8T8T089</a>
</td>
<td class="hidden-xs">
<span class="divice-name">Дата заказа</span>
2016-08-13 </td>
<td class="hidden-xs">
2016-08-16 </td>
<td>
<span class="divice-name">Статус заказа</span>
Оплачен </td>

<td>
<span class="divice-name">Получение заказа</span>



1
</td>

<td>
</td>

<td class="total">

5600,56 € </td>
</tr>

хотя если в сам скрипт вставляю принт print_r($row->order_number) то выводится номер заказа, какая то лобуда получается...

---------- Добавлено 18.08.2016 в 15:53 ----------

даже если вставлять сразу после <body> тоже не пашет и не читается как php



$buffer = JResponse::getBody();


$buffer = preg_replace('#(<body[^\>]*?>)#ism', '\\1<?php var_dump($params);?>', $buffer);
id="proofreader_highlighter_end" /></body>', $buffer);




JResponse::setBody($buffer);

}

return true;

и почемуто читается как текст что ли... вот в исходном коде как выглядит


</head>
<body class="site com_virtuemart view-orders layout-list no-task itemid-133 fluid"><?php var_dump($params);?>
<!-- Body -->
manaz
На сайте с 13.12.2013
Offline
61
#4

Может хоть какие то у кого есть мысли что может быть не так?

Aisamiery
На сайте с 12.04.2015
Offline
319
#5

Все гениальное - просто. Учите язык с которым работаете.

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

print_r($data, true)


---------- Добавлено 18.08.2016 в 23:54 ----------

manaz:
Что я делаю не так, подскажите плиз.


$buffer = JResponse::getBody();

// Обратим внимание что появились одиночные кавычки
$phpscript = '<input type=text name="orders" value="'. $order_id .'">'; // Тут $order_id у вас пустой, переменная не объявлена

// Заменим на
$phpscript = '<input type=text name="orders" value="'. gettype ($order_id) .'">'; // будет value="NULL" скорее всего


$buffer = preg_replace("/<\/shcodes>/", "\n\n" . $put . "\n\n" . $br . "\n\n" . $phpscript . "\n\n" . $jscript ."\n\n</shcodes>", $buffer);

JResponse::setBody($buffer); // Тут сохраняем строку, а не буфер результат ob_start, по этому у вас и нет данных, потому что они улетают в поток вывода

return true;
Разработка проектов на Symfony, Laravel, 1C-Bitrix, UMI.CMS, OctoberCMS
manaz
На сайте с 13.12.2013
Offline
61
#6

Добрый день, скажите пожалуйста... почему же все таки NULL


$phpscript = '<input type=text name="orders" value="'. gettype ($row->virtuemart_order_id) .'">'; // будет value="NULL" скорее всего

переменная объявлена в том скрипте куда вставляется $row->virtuemart_order_id

вот


<?php
$k = 0;
foreach ($this->orderlist as $row) {
$editlink = JRoute::_('index.php?option=com_virtuemart&view=orders&layout=details&order_number=' . $row->order_number, FALSE);
?>
<tr class="<?php echo "row$k"; ?>">
<td>
<span class="divice-name"><?php echo JText::_('COM_VIRTUEMART_ORDER_LIST_ORDER_NUMBER'); ?></span>
<a href="<?php echo $editlink; ?>"><?php echo $row->order_number; ?></a>
</td>
<td class="hidden-xs">
<span class="divice-name"><?php echo JText::_('COM_VIRTUEMART_ORDER_LIST_CDATE'); ?></span>
<?php echo vmJsApi::date($row->created_on,'LC4',true); ?>
</td>
<td class="hidden-xs">
<?php echo vmJsApi::date($row->modified_on,'LC4',true); ?>
</td>
<td>
<span class="divice-name"><?php echo JText::_('COM_VIRTUEMART_ORDER_LIST_STATUS'); ?></span>
<?php echo ShopFunctions::getOrderStatusName($row->order_status); ?>
</td>

<td>
<span class="divice-name"><?php echo JText::_('COM_VIRTUEMART_ORDER_LIST_PODTVERGDENI'); ?></span>
<?php

//print_r($row->virtuemart_order_id);

?>
</shcodes>

</td>

<td>
<?php

}
?>

Я пытаюсь через буфер вставить в сам цикл foreach ($this->orderlist as $row) {

вставляю print_r($row->virtuemart_order_id);

получаю цифру 1

Как применит другой параметр print_r($data,true) не пойму

если вывожу $phpscript = '<input type=text name="orders" value="'. gettype ($row->virtuemart_order_id) .'">'; // будет value="NULL" скорее всего

то получаю NULL

Aisamiery
На сайте с 12.04.2015
Offline
319
#7
manaz:
Добрый день, скажите пожалуйста... почему же все таки NULL

переменная объявлена в том скрипте куда вставляется $row->virtuemart_order_id

NULL потому что переменной $order_id не существует и её нет в том коде что вы привели, даже ctrl+f не находит. У вас есть переменная $row->virtuemart_order_id

Про второй параметр в вашем случае нужно написать

print_r($row->virtuemart_order_id, true)

чтобы получить результат функции

manaz
На сайте с 13.12.2013
Offline
61
#8

Да, но все ровно пустой параметр...


$buffer = JResponse::getBody();

// Обратим внимание что появились одиночные кавычки
//$phpscript = '<input type=text name="orders" value="'. $order_id .'">'; // Тут $order_id у вас пустой, переменная не объявлена

// Заменим на
$phpscript = '<input type=text name="orders" value="'. print_r($row->virtuemart_order_id, true) .'">'; // будет value="NULL" скорее всего


$buffer = preg_replace("/<\/shcodes>/", "\n\n" . $str . "\n\n" . $br . "\n\n" . $phpscript . "\n\n" . $jscript ."\n\n</shcodes>", $buffer);

JResponse::setBody($buffer); // Тут сохраняем строку, а не буфер результат ob_start, по этому у вас и нет данных, потому что они улетают в поток вывода

return true;

сейчас в исходном коде вот

<input type=text name="orders" value="">

K
На сайте с 17.05.2016
Offline
25
#9

Долго смотрел и не понял откуда order_id должен взяться?


$editlink = JRoute::_('index.php?option=com_virtuemart&view=orders&layout=details&order_number=' . $row->order_number, FALSE);

Какого-то GET не хватает либо этот $order_id должен сам произвестись?

Проверенная видеореклама (https://goo.gl/vhomjx) для любых сайтов Нормальные пацаны покупают и продают сайты здесь (https://goo.gl/nKv5Vk)
manaz
На сайте с 13.12.2013
Offline
61
#10
knak:
Мне одному кажется, что не хватает какого-то


$order_id = $_GET['order_id'];


...и к preg_replace это не имеет отношения? 😕

Вам это кажется. Нет в скриптах не какого $order_id , есть $virtuemart_order_id

И отношение как раз к буферизации, так как переменная вставляется из вне

---------- Добавлено 19.08.2016 в 13:36 ----------

то есть плагином вставляется переменная $virtuemart_order_id в цикл foreach ($this->orderlist as $row) { в скрипте списков всех заказов.

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

---------- Добавлено 19.08.2016 в 13:42 ----------

Она есть в $row

если посмотрите выше немного то увидите цикл


<?php
$k = 0;
foreach ($this->orderlist as $row) {
12

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