Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Передача данных в форму

00 голосов
6
Ситуация в следующем:
Когда товар заканчивается, появляется надпись (нет на складе). Сделал форму "обратной связи" с возможностью уточнения условий заказа с помощью iblock.element.add.form и привязал её к новому инфоблоку.
Вопрос: "Как передать данные с catalog.element, т.е. наименование товара, в строку формы?" Чтобы данные о товаре автоматически заполнялись в графе "Наименование товара".

Как я понимаю, необходимо указать при проверке условия в catalog.element
Код
<?if($arResult["CAN_BUY"]):?> //если товар есть в наличии, он помещается в корзину 
<?elseif((count($arResult["PRICES"]) > 0) || is_array($arResult["PRICE_MATRIX"])):?> // товара нет в наличии, ссылка на страницу формы. В каком виде её сделать, чтобы она передала наименование товара в форму?


Подскажите пожалуйста!

Вот рабочий пример на стороннем сайте - http://www.powerbatt.ru/forms/zero_quantity.php?&ID=261793&Typer=68

Заранее спасибо!
спросил 03 Сен, 13 от mefhm78 (120 баллов)

6 Ответы

00 голосов
формируй ссылку на "форму обратной связи" с передачей переменных в которых ты укажешь ID или NAME товара, например
Код
<? $linkform="http://1.ru/form.php?%$%NAME=".$arResult["NAME"];
echo "<a href='$linkform'>Форма</a>";?>

а в форме при открытии наименование товара = $NAME.

$arResult["NAME"] - это примерно, может в твоем случае немного по другому написать надо будет, смотря по контексту.
ответил 03 Сен, 13 от hipiro (280 баллов)
00 голосов
Можно воспользоваться глобальным массивом php $_POST, внести в него данные, а потом использовать в форме.
ответил 26 Ноя, 13 от Kiuas (640 баллов)
00 голосов
Цитата
Сергей Курбатов пишет:
формируй ссылку на "форму обратной связи" с передачей переменных в которых ты укажешь ID или NAME товара, например

Код
<? $linkform="http://1.ru/form.php?%$%NAME=".$arResult["NAME"];

echo "<a href='$linkform'>Форма</a>";?>


а в форме при открытии наименование товара = $NAME.



$arResult["NAME"] - это примерно, может в твоем случае немного по другому написать надо будет, смотря по контексту.


Сергей спасибо большое!
В catalog.element ссылку поставил, данные вроде передаются.

Но когда залез править форму, немного попал в ступор.
Привожу дефолтный код компоненты. Буду очень признателен, если подскажите, как можно наименование товара подключить к самой форме. Мои попытки пока не увенчались успехом. Спасибо!

Код
<?
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
?>
<?
//echo "<pre>Template arParams: "; print_r($arParams); echo "</pre>";
//echo "<pre>Template arResult: "; print_r($arResult); echo "</pre>";
//exit();
?>

<?if (count($arResult["ERRORS"])):?>
   <?=ShowError(implode("<br />", $arResult["ERRORS"]))?>
<?endif?>
<?if (strlen($arResult["MESSAGE"]) > 0):?>
   <?=ShowNote($arResult["MESSAGE"])?>
<?endif?>
<form name="iblock_add" action="<?=POST_FORM_ACTION_URI?>" method="post" enctype="multipart/form-data">

   <?=bitrix_sessid_post()?>

   <?if ($arParams["MAX_FILE_SIZE"] > 0):?><input type="hidden" name="MAX_FILE_SIZE" value="<?=$arParams["MAX_FILE_SIZE"]?>" /><?endif?>

   <table class="data-table">
      <thead>
         <tr>
            <td colspan="2">&nbsp;</td>
         </tr>
      </thead>
      <?if (is_array($arResult["PROPERTY_LIST"]) && count($arResult["PROPERTY_LIST"] > 0)):?>
      <tbody>
         <?foreach ($arResult["PROPERTY_LIST"] as $propertyID):?>
            <tr>
               <td><?if (intval($propertyID) > 0):?><?=$arResult["PROPERTY_LIST_FULL"][$propertyID]["NAME"]?><?else:?><?=!empty($arParams["CUSTOM_TITLE_".$propertyID]) ? $arParams["CUSTOM_TITLE_".$propertyID] : GetMessage("IBLOCK_FIELD_".$propertyID)?><?endif?><?if(in_array($propertyID, $arResult["PROPERTY_REQUIRED"])):?><span class="starrequired">*</span><?endif?></td>
               <td>
                  <?
                  //echo "<pre>"; print_r($arResult["PROPERTY_LIST_FULL"]); echo "</pre>";
                  if (intval($propertyID) > 0)
                  {
                     if (
                        $arResult["PROPERTY_LIST_FULL"][$propertyID]["PROPERTY_TYPE"] == "T"
                        &&
                        $arResult["PROPERTY_LIST_FULL"][$propertyID]["ROW_COUNT"] == "1"
                     )
                        $arResult["PROPERTY_LIST_FULL"][$propertyID]["PROPERTY_TYPE"] = "S";
                     elseif (
                        (
                           $arResult["PROPERTY_LIST_FULL"][$propertyID]["PROPERTY_TYPE"] == "S"
                           ||
                           $arResult["PROPERTY_LIST_FULL"][$propertyID]["PROPERTY_TYPE"] == "N"
                        )
                        &&
                        $arResult["PROPERTY_LIST_FULL"][$propertyID]["ROW_COUNT"] > "1"
                     )
                        $arResult["PROPERTY_LIST_FULL"][$propertyID]["PROPERTY_TYPE"] = "T";
                  }
&
ответил 07 Март, 14 от mefhm78 (120 баллов)
00 голосов
как я понял передать наименование нужно в первое поле для ввода текста (которое с возможностью прокрутки)?
ответил 28 Июнь, 14 от hipiro (280 баллов)
00 голосов
Цитата
Сергей Курбатов пишет:
как я понял передать наименование нужно в первое поле для ввода текста (которое с возможностью прокрутки)?


Передать необходимо в любое текстовое поле, желательно в поле Наименование товара. По всей вероятности надо будет сделать условие. Как сделать передачу наименования хотя бы в любое поле формы? Главное чтобы человеку, перейдя с ссылки товара, не пришлось заново писать наименование товара. Я так понимаю в дефолтном шаблоне описываются все возможные варианты полей. Поэтому и попал в ступор.

Вообще хочу получить подобный результат:
http://www.powerbatt.ru/forms/zero_quantity.php?&ID=261793&Typer=68

Спасибо!
ответил 28 Окт, 14 от mefhm78 (120 баллов)
00 голосов
по пунктам начну,
1. ссылку формирую с переменной $nametovar (-она будет глобальной и поэтому что бы наверняка не совпала с другими) и уберем из ссылки часть %$% - в нашем случае не нужна она (даже вредна будет)
Код
<? $linkform="http://1.ru/form.php?nametovar=".$arResult["NAME"]; 
echo "<a href='$linkform'>Форма</a>";?>

2. В начале файла шаблона что вы опубликовали объявляем переменную GLOBAL $nametovar
Код
<? GLOBAL $nametovar;?>
<?
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
........

3.Далее ниже уже в самой форме находим поле для ввода строки примерно 120 строка(скорее всего в вашем случае именно оно используется) и вписываем вместо <?=$value?>
наш код:
Код
<?=$value; if ($propertyID=="ABCDEF") echo $nametovar;?>

и в составе всего кода будет так это выглядеть(это примерно 120 строка кода):
Код
..........
<input type="text" name="PROPERTY[<?=$propertyID?>][<?=$i?>]" size="25" value="<?=$value; if ($propertyID=="ABCDEF") echo $nametovar;?>" />
<? if($arResult["PROPERTY_LIST_FULL"][$propertyID]["USER_TYPE"] == "DateTime"):?>
<?            $APPLICATION->IncludeCom.......... 

При этом ADCDEF меняем на ID своего свойства "Наименование товара" - думаю в вашем случае это будет номер 23, 44 и т.п. (тот что указан в настройках инфблока в настройке свойств, в первом столбике).
В итоге будет проверятся имя ID свойства для которого используется это поле (а оно по циклу для разных своств используется) и если оно используется для свойства "Наименование товара" то туда добавляется переданная в адресе переменная.
ответил 25 Фев, 15 от hipiro (280 баллов)

Похожие вопросы

0 голосов
2 ответов
спросил 16 Окт, 13 от Veet (120 баллов)
0 голосов
4 ответов
спросил 09 Янв, 14 от MonikA (120 баллов)
0 голосов
4 ответов
0 голосов
1 ответ
0 голосов
9 ответов