Передача значения из дополнительного свойства информационного элемента в ТДС и XSL формы обратной связи
Добрый день! Есть информационная система со списком инфоэлементов. Нужно по клику на инфоэлемент передать методом POST значение дополнительного свойства данного элемента в поле модуля формы.
Для этого использую form
<xsl:template match="/informationsystem">
<form action="/Bid/" method="POST" class="dataRasp">
<xsl:apply-templates select="informationsystem_group" mode="groups"/>
<xsl:apply-templates select="informationsystem_item[informationsystem_group_id = 0]"/>
</form>
</xsl:template>
<xsl:template match="informationsystem_item">
<xsl:variable name="rasName" select="name"/>
<xsl:variable name="rasData" select="property_value[tag_name='rasData']/value"/>
<xsl:variable name="rasGroup" select="property_value[tag_name='rasGroup']/value"/>
<input type="hidden" name="rasName" value="{$rasName}" />
<input type="hidden" name="rasData" value="{$rasData}" />
<input type="hidden" name="rasGroup" value="{$rasGroup}" />
<div class="SheduleLink" onclick="location.href = '/Bid/'; return false">
<div class="case-table-cell v-middle w50 left">
<div class="item">
<div class="name"><xsl:value-of disable-output-escaping="yes" select="name"/></div>
<div class="desc"><xsl:value-of disable-output-escaping="yes" select="description"/></div>
</div>
</div>
<div class="case-table-cell v-middle w20 center name-style">
<xsl:if test="$rasData !=''">
<xsl:value-of disable-output-escaping="yes" select="property_value[tag_name='rasData']/value"/>
</xsl:if>
</div>
<div class="case-table-cell v-middle w10 center name-style">
<xsl:if test="$rasTime !=''">
<xsl:value-of disable-output-escaping="yes" select="property_value[tag_name='rasTime']/value"/>
</xsl:if>
</div>
<div class="case-table-cell v-middle w20 center name-style">
<xsl:if test="$rasPrice !=''">
<xsl:value-of disable-output-escaping="yes" select="property_value[tag_name='rasPrice']/value"/>
</xsl:if>
</div>
</div>
</xsl:template>
отправку значений делаю по событию клика
$('.SheduleLink').click(function(){
$('.dataRasp').submit();
});
В тдс формы принимаю данные значения и передаю в xsl формы
if (Core::moduleIsActive('form'))
{
$oForm = Core_Entity::factory('Form', Core_Array::get(Core_Page::instance()->libParams, 'formId'));
$Form_Controller_Show = new Form_Controller_Show($oForm);
if (isset($_POST['rasName']))
{
$rasName = $_POST['rasName'];
$Form_Controller_Show->addEntity(Core::factory('Core_Xml_Entity')->name('rasName')->value($rasName));
}
if (isset($_POST['rasData']))
{
$rasData = $_POST['rasData'];
$Form_Controller_Show->addEntity(Core::factory('Core_Xml_Entity')->name('rasData')->value($rasData));
}
if (isset($_POST['rasGroup']))
{
$rasGroup = $_POST['rasGroup'];
$Form_Controller_Show->addEntity(Core::factory('Core_Xml_Entity')->name('rasGroup')->value($rasGroup));
}
в xsl формы пытаюсь поставить полученные значения
<xsl:template match="form_field">
<!-- Не скрытое поле и не надпись -->
<xsl:if test="type != 7 and type != 8">
<div class="col-xs-12 col-sm-4">
<div class="caption">
<xsl:value-of select="caption" />
</div>
<div class="field">
<!-- Текстовые поля -->
<xsl:variable name="rasName" select="..//..//rasName"/>
<xsl:variable name="rasData" select="..//..//rasData"/>
<xsl:variable name="rasGroup" select="..//..//rasGroup"/>
<xsl:if test="type = 0 or type = 1 or type = 2">
<xsl:choose>
<xsl:when test="$rasName != '' and @id = '87'">
<input type="text" name="{name}" value="{$rasName}" size="{size}" >
<xsl:choose>
<!-- Поле для ввода пароля -->
<xsl:when test="type = 1">
<xsl:attribute name="type">password</xsl:attribute>
</xsl:when>
<!-- Поле загрузки файла -->
<xsl:when test="type = 2">
<xsl:attribute name="type">file</xsl:attribute>
</xsl:when>
<!-- Текстовое поле -->
<xsl:otherwise>
<xsl:attribute name="type">text</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="obligatory = 1">
<xsl:attribute name="class">required</xsl:attribute>
<xsl:attribute name="minlength">1</xsl:attribute>
<xsl:attribute name="title">Заполните поле <xsl:value-of select="caption" /></xsl:attribute>
</xsl:if>
</input>
</xsl:when>
<xsl:when test="$rasData != '' and @id = '88'">
<input type="text" name="{name}" value="{$rasData}" size="{size}" >
<xsl:choose>
<!-- Поле для ввода пароля -->
<xsl:when test="type = 1">
<xsl:attribute name="type">password</xsl:attribute>
</xsl:when>
<!-- Поле загрузки файла -->
<xsl:when test="type = 2">
<xsl:attribute name="type">file</xsl:attribute>
</xsl:when>
<!-- Текстовое поле -->
<xsl:otherwise>
<xsl:attribute name="type">text</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="obligatory = 1">
<xsl:attribute name="class">required</xsl:attribute>
<xsl:attribute name="minlength">1</xsl:attribute>
<xsl:attribute name="title">Заполните поле <xsl:value-of select="caption" /></xsl:attribute>
</xsl:if>
</input>
</xsl:when>
<xsl:when test="$rasGroup != '' and @id = '86'">
<input type="text" name="{name}" value="{$rasGroup}" size="{size}" >
<xsl:choose>
<!-- Поле для ввода пароля -->
<xsl:when test="type = 1">
<xsl:attribute name="type">password</xsl:attribute>
</xsl:when>
<!-- Поле загрузки файла -->
<xsl:when test="type = 2">
<xsl:attribute name="type">file</xsl:attribute>
</xsl:when>
<!-- Текстовое поле -->
<xsl:otherwise>
<xsl:attribute name="type">text</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="obligatory = 1">
<xsl:attribute name="class">required</xsl:attribute>
<xsl:attribute name="minlength">1</xsl:attribute>
<xsl:attribute name="title">Заполните поле <xsl:value-of select="caption" /></xsl:attribute>
</xsl:if>
</input>
</xsl:when>
<xsl:otherwise>
<input type="text" name="{name}" value="" size="{size}" >
<xsl:choose>
<!-- Поле для ввода пароля -->
<xsl:when test="type = 1">
<xsl:attribute name="type">password</xsl:attribute>
</xsl:when>
<!-- Поле загрузки файла -->
<xsl:when test="type = 2">
<xsl:attribute name="type">file</xsl:attribute>
</xsl:when>
<!-- Текстовое поле -->
<xsl:otherwise>
<xsl:attribute name="type">text</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="obligatory = 1">
<xsl:attribute name="class">required</xsl:attribute>
<xsl:attribute name="minlength">1</xsl:attribute>
<xsl:attribute name="title">Заполните поле <xsl:value-of select="caption" /></xsl:attribute>
</xsl:if>
</input>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
<!-- Радиокнопки -->
<xsl:if test="type = 3 or type = 9">
<xsl:apply-templates select="list/list_item" />
<label class="input_error" for="{name}" style="display: none">Выберите, пожалуйста, значение.</label>
</xsl:if>
<!-- Checkbox -->
<xsl:if test="type = 4">
<input type="checkbox" name="{name}">
<xsl:if test="checked = 1 or value = 1">
<xsl:attribute name="checked">checked</xsl:attribute>
</xsl:if>
</input>
</xsl:if>
<!-- Textarea -->
<xsl:if test="type = 5">
<textarea name="{name}" cols="{cols}" rows="{rows}" wrap="off">
<xsl:if test="obligatory = 1">
<xsl:attribute name="class">required</xsl:attribute>
<xsl:attribute name="minlength">1</xsl:attribute>
<xsl:attribute name="title">Заполните поле <xsl:value-of select="caption" /></xsl:attribute>
</xsl:if>
<xsl:value-of select="value" />
</textarea>
</xsl:if>
<!-- Список -->
<xsl:if test="type = 6">
<select name="{name}">
<xsl:if test="obligatory = 1">
<xsl:attribute name="class">required</xsl:attribute>
<xsl:attribute name="title">Заполните поле <xsl:value-of select="caption" /></xsl:attribute>
</xsl:if>
<option value="">...</option>
<xsl:apply-templates select="list/list_item" />
</select>
</xsl:if>
</div>
</div>
</xsl:if>
<!-- скрытое поле -->
<xsl:if test="type = 7">
<input type="hidden" name="{name}" value="{value}" />
</xsl:if>
<!-- Надпись -->
<xsl:if test="type = 8">
<div class="row">
<div class="caption"></div>
<div class="field">
<strong><xsl:value-of select="caption" /></strong>
</div>
</div>
</xsl:if>
<xsl:if test="position() mod 3=0">
<xsl:text disable-output-escaping="yes">
</div>
<div class="row">
</xsl:text>
</xsl:if>
</xsl:template>
Значения подставляются, но не корректно. Что-то я не учел))) может, кто-то делал что-то подобное, буду очень признателен за подсказку. Спасибо
Для этого использую form
<xsl:template match="/informationsystem">
<form action="/Bid/" method="POST" class="dataRasp">
<xsl:apply-templates select="informationsystem_group" mode="groups"/>
<xsl:apply-templates select="informationsystem_item[informationsystem_group_id = 0]"/>
</form>
</xsl:template>
<xsl:template match="informationsystem_item">
<xsl:variable name="rasName" select="name"/>
<xsl:variable name="rasData" select="property_value[tag_name='rasData']/value"/>
<xsl:variable name="rasGroup" select="property_value[tag_name='rasGroup']/value"/>
<input type="hidden" name="rasName" value="{$rasName}" />
<input type="hidden" name="rasData" value="{$rasData}" />
<input type="hidden" name="rasGroup" value="{$rasGroup}" />
<div class="SheduleLink" onclick="location.href = '/Bid/'; return false">
<div class="case-table-cell v-middle w50 left">
<div class="item">
<div class="name"><xsl:value-of disable-output-escaping="yes" select="name"/></div>
<div class="desc"><xsl:value-of disable-output-escaping="yes" select="description"/></div>
</div>
</div>
<div class="case-table-cell v-middle w20 center name-style">
<xsl:if test="$rasData !=''">
<xsl:value-of disable-output-escaping="yes" select="property_value[tag_name='rasData']/value"/>
</xsl:if>
</div>
<div class="case-table-cell v-middle w10 center name-style">
<xsl:if test="$rasTime !=''">
<xsl:value-of disable-output-escaping="yes" select="property_value[tag_name='rasTime']/value"/>
</xsl:if>
</div>
<div class="case-table-cell v-middle w20 center name-style">
<xsl:if test="$rasPrice !=''">
<xsl:value-of disable-output-escaping="yes" select="property_value[tag_name='rasPrice']/value"/>
</xsl:if>
</div>
</div>
</xsl:template>
отправку значений делаю по событию клика
$('.SheduleLink').click(function(){
$('.dataRasp').submit();
});
В тдс формы принимаю данные значения и передаю в xsl формы
if (Core::moduleIsActive('form'))
{
$oForm = Core_Entity::factory('Form', Core_Array::get(Core_Page::instance()->libParams, 'formId'));
$Form_Controller_Show = new Form_Controller_Show($oForm);
if (isset($_POST['rasName']))
{
$rasName = $_POST['rasName'];
$Form_Controller_Show->addEntity(Core::factory('Core_Xml_Entity')->name('rasName')->value($rasName));
}
if (isset($_POST['rasData']))
{
$rasData = $_POST['rasData'];
$Form_Controller_Show->addEntity(Core::factory('Core_Xml_Entity')->name('rasData')->value($rasData));
}
if (isset($_POST['rasGroup']))
{
$rasGroup = $_POST['rasGroup'];
$Form_Controller_Show->addEntity(Core::factory('Core_Xml_Entity')->name('rasGroup')->value($rasGroup));
}
в xsl формы пытаюсь поставить полученные значения
<xsl:template match="form_field">
<!-- Не скрытое поле и не надпись -->
<xsl:if test="type != 7 and type != 8">
<div class="col-xs-12 col-sm-4">
<div class="caption">
<xsl:value-of select="caption" />
</div>
<div class="field">
<!-- Текстовые поля -->
<xsl:variable name="rasName" select="..//..//rasName"/>
<xsl:variable name="rasData" select="..//..//rasData"/>
<xsl:variable name="rasGroup" select="..//..//rasGroup"/>
<xsl:if test="type = 0 or type = 1 or type = 2">
<xsl:choose>
<xsl:when test="$rasName != '' and @id = '87'">
<input type="text" name="{name}" value="{$rasName}" size="{size}" >
<xsl:choose>
<!-- Поле для ввода пароля -->
<xsl:when test="type = 1">
<xsl:attribute name="type">password</xsl:attribute>
</xsl:when>
<!-- Поле загрузки файла -->
<xsl:when test="type = 2">
<xsl:attribute name="type">file</xsl:attribute>
</xsl:when>
<!-- Текстовое поле -->
<xsl:otherwise>
<xsl:attribute name="type">text</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="obligatory = 1">
<xsl:attribute name="class">required</xsl:attribute>
<xsl:attribute name="minlength">1</xsl:attribute>
<xsl:attribute name="title">Заполните поле <xsl:value-of select="caption" /></xsl:attribute>
</xsl:if>
</input>
</xsl:when>
<xsl:when test="$rasData != '' and @id = '88'">
<input type="text" name="{name}" value="{$rasData}" size="{size}" >
<xsl:choose>
<!-- Поле для ввода пароля -->
<xsl:when test="type = 1">
<xsl:attribute name="type">password</xsl:attribute>
</xsl:when>
<!-- Поле загрузки файла -->
<xsl:when test="type = 2">
<xsl:attribute name="type">file</xsl:attribute>
</xsl:when>
<!-- Текстовое поле -->
<xsl:otherwise>
<xsl:attribute name="type">text</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="obligatory = 1">
<xsl:attribute name="class">required</xsl:attribute>
<xsl:attribute name="minlength">1</xsl:attribute>
<xsl:attribute name="title">Заполните поле <xsl:value-of select="caption" /></xsl:attribute>
</xsl:if>
</input>
</xsl:when>
<xsl:when test="$rasGroup != '' and @id = '86'">
<input type="text" name="{name}" value="{$rasGroup}" size="{size}" >
<xsl:choose>
<!-- Поле для ввода пароля -->
<xsl:when test="type = 1">
<xsl:attribute name="type">password</xsl:attribute>
</xsl:when>
<!-- Поле загрузки файла -->
<xsl:when test="type = 2">
<xsl:attribute name="type">file</xsl:attribute>
</xsl:when>
<!-- Текстовое поле -->
<xsl:otherwise>
<xsl:attribute name="type">text</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="obligatory = 1">
<xsl:attribute name="class">required</xsl:attribute>
<xsl:attribute name="minlength">1</xsl:attribute>
<xsl:attribute name="title">Заполните поле <xsl:value-of select="caption" /></xsl:attribute>
</xsl:if>
</input>
</xsl:when>
<xsl:otherwise>
<input type="text" name="{name}" value="" size="{size}" >
<xsl:choose>
<!-- Поле для ввода пароля -->
<xsl:when test="type = 1">
<xsl:attribute name="type">password</xsl:attribute>
</xsl:when>
<!-- Поле загрузки файла -->
<xsl:when test="type = 2">
<xsl:attribute name="type">file</xsl:attribute>
</xsl:when>
<!-- Текстовое поле -->
<xsl:otherwise>
<xsl:attribute name="type">text</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="obligatory = 1">
<xsl:attribute name="class">required</xsl:attribute>
<xsl:attribute name="minlength">1</xsl:attribute>
<xsl:attribute name="title">Заполните поле <xsl:value-of select="caption" /></xsl:attribute>
</xsl:if>
</input>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
<!-- Радиокнопки -->
<xsl:if test="type = 3 or type = 9">
<xsl:apply-templates select="list/list_item" />
<label class="input_error" for="{name}" style="display: none">Выберите, пожалуйста, значение.</label>
</xsl:if>
<!-- Checkbox -->
<xsl:if test="type = 4">
<input type="checkbox" name="{name}">
<xsl:if test="checked = 1 or value = 1">
<xsl:attribute name="checked">checked</xsl:attribute>
</xsl:if>
</input>
</xsl:if>
<!-- Textarea -->
<xsl:if test="type = 5">
<textarea name="{name}" cols="{cols}" rows="{rows}" wrap="off">
<xsl:if test="obligatory = 1">
<xsl:attribute name="class">required</xsl:attribute>
<xsl:attribute name="minlength">1</xsl:attribute>
<xsl:attribute name="title">Заполните поле <xsl:value-of select="caption" /></xsl:attribute>
</xsl:if>
<xsl:value-of select="value" />
</textarea>
</xsl:if>
<!-- Список -->
<xsl:if test="type = 6">
<select name="{name}">
<xsl:if test="obligatory = 1">
<xsl:attribute name="class">required</xsl:attribute>
<xsl:attribute name="title">Заполните поле <xsl:value-of select="caption" /></xsl:attribute>
</xsl:if>
<option value="">...</option>
<xsl:apply-templates select="list/list_item" />
</select>
</xsl:if>
</div>
</div>
</xsl:if>
<!-- скрытое поле -->
<xsl:if test="type = 7">
<input type="hidden" name="{name}" value="{value}" />
</xsl:if>
<!-- Надпись -->
<xsl:if test="type = 8">
<div class="row">
<div class="caption"></div>
<div class="field">
<strong><xsl:value-of select="caption" /></strong>
</div>
</div>
</xsl:if>
<xsl:if test="position() mod 3=0">
<xsl:text disable-output-escaping="yes">
</div>
<div class="row">
</xsl:text>
</xsl:if>
</xsl:template>
Значения подставляются, но не корректно. Что-то я не учел))) может, кто-то делал что-то подобное, буду очень признателен за подсказку. Спасибо
SNN
S.Nikol писал(а):
S.Nikol,
Видно ваша форма не отправляет POST судя по:
Когда вы пишите обратное:
Нужно по клику на инфоэлемент передать методом POST значение дополнительного свойства данного элемента в поле модуля формы.
S.Nikol,
Видно ваша форма не отправляет POST судя по:
<div class="SheduleLink" onclick="location.href = '/Bid/'; return false">
Когда вы пишите обратное:
$('.SheduleLink').click(function(){
$('.dataRasp').submit();
});
$('.dataRasp').submit();
});
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
здесь две обработки события, в первом случае
осуществляется переход на нужный узел с формой..
эта часть делает сабмит с отправкой
$('.SheduleLink').click(function(){
$('.dataRasp').submit();
});
нелогично, конечно.. просто код в режиме тэста пока)
вот так правильнее.. но проблема остается прежней(
$('.SheduleLink').click(function(){
$('.dataRasp').submit();
window.location = "/Bid/";
});
<div class="SheduleLink" onclick="location.href = '/Bid/'; return false">
осуществляется переход на нужный узел с формой..
эта часть делает сабмит с отправкой
$('.SheduleLink').click(function(){
$('.dataRasp').submit();
});
нелогично, конечно.. просто код в режиме тэста пока)
вот так правильнее.. но проблема остается прежней(
$('.SheduleLink').click(function(){
$('.dataRasp').submit();
window.location = "/Bid/";
});
SNN
S.Nikol писал(а):
Не согласен с Вами. Такое поведение не правильное:
Так как во первых будет POST запрос на узел "/Bid/" и перезагрузится страница. А это в свою очередь:
Даже не выполнится, так как произошла перезагрузка страницы.
Почему POST не обрабатывается для Формы если это модуль формы то посмотрите стандартный ТДС обработки формы, там увидите нечто такое:
В форме должна быть еще кнопка SUBMIT -> $oForm->button_name
вот так правильнее.. но проблема остается прежней(
Не согласен с Вами. Такое поведение не правильное:
$('.SheduleLink').click(function(){
$('.dataRasp').submit();
window.location = "/Bid/";
});
$('.dataRasp').submit();
window.location = "/Bid/";
});
Так как во первых будет POST запрос на узел "/Bid/" и перезагрузится страница. А это в свою очередь:
window.location = "/Bid/";
Даже не выполнится, так как произошла перезагрузка страницы.
Почему POST не обрабатывается для Формы если это модуль формы то посмотрите стандартный ТДС обработки формы, там увидите нечто такое:
if (!is_null(Core_Array::getPost($oForm->button_name)))
{
$Form_Controller_Show
->values($_POST + $_FILES)
// 0 - html, 1- plain text
->mailType(Core_Array::get(Core_Page::instance()->libParams, 'mailType'))
->mailXsl(
Core_Entity::factory('Xsl')->getByName(Core_Array::get(Core_Page::instance()->libParams, 'notificationMailXsl'))
)
->mailFromFieldName(Core_Array::get(Core_Page::instance()->libParams, 'emailFieldName'))
->process();
}
{
$Form_Controller_Show
->values($_POST + $_FILES)
// 0 - html, 1- plain text
->mailType(Core_Array::get(Core_Page::instance()->libParams, 'mailType'))
->mailXsl(
Core_Entity::factory('Xsl')->getByName(Core_Array::get(Core_Page::instance()->libParams, 'notificationMailXsl'))
)
->mailFromFieldName(Core_Array::get(Core_Page::instance()->libParams, 'emailFieldName'))
->process();
}
В форме должна быть еще кнопка SUBMIT -> $oForm->button_name
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
Авторизация