Работа с дополнительными свойствами в HostCMS v. 6
Помогите, пожалуйста, не получается вывести доп свойство группы.
Для товара понятно, Цитата:
а вот со свойством для группы не могу разобраться, само свойство типа строка создала, а вот что прописать в xsl шаблоне?
Для товара понятно, Цитата:
<xsl:value-of select="property_value[tag_name='name']/value"/>
а вот со свойством для группы не могу разобраться, само свойство типа строка создала, а вот что прописать в xsl шаблоне?
T2008 писал(а):
Тоже самое, что и для товара. Проверьте в XML у Вас идут значения свойств групп? Если нет, то передайте параметр:
а вот что прописать в xsl шаблоне?
Тоже самое, что и для товара. Проверьте в XML у Вас идут значения свойств групп? Если нет, то передайте параметр:
->groupsProperties(TRUE)
Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
alexander.egorov писал(а):
в xml я вижу текст, который хочу видеть на странице
Цитата:
в ТДС интернет магазина
Цитата:
но текста "привет" на странице нет..
Тоже самое, что и для товара. Проверьте в XML у Вас идут значения свойств групп? Если нет, то передайте параметр:
->groupsProperties(TRUE)
->groupsProperties(TRUE)
в xml я вижу текст, который хочу видеть на странице
Цитата:
<property_value id="6779">
<property_id>117</property_id>
<entity_id>706</entity_id>
<value>привет</value>
<property_dir_id>0</property_dir_id>
<tag_name>text</tag_name>
</property_value>
<property_id>117</property_id>
<entity_id>706</entity_id>
<value>привет</value>
<property_dir_id>0</property_dir_id>
<tag_name>text</tag_name>
</property_value>
в ТДС интернет магазина
Цитата:
$Shop_Controller_Show
->tags(TRUE)
->groupsProperties(TRUE)
->comments(TRUE)
->associatedItems(TRUE)
->modifications(TRUE);
->tags(TRUE)
->groupsProperties(TRUE)
->comments(TRUE)
->associatedItems(TRUE)
->modifications(TRUE);
но текста "привет" на странице нет..
Решено в поддержке.
Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
Совсем не могу понять как сохранить доп.свойство пользователя типа "список" .
<xsl:template match="properties/property/list/list_item">
<xsl:variable name="value_closet" select="value"/>
<xsl:choose>
<xsl:when test="/siteuser/property_value[tag_name = 'clothes_style' and value=$value_closet]/value != ''">
<td><p><input type="checkbox" id="c{position()}" name="property_68[]" value="{@id}" checked="checked"/> <label for="c{position()}"><xsl:value-of disable-output-escaping="yes" select="value"/></label></p></td>
</xsl:when>
<xsl:otherwise>
<td><p><input type="checkbox" id="c{position()}" name="property_68[]" value="{@id}"/> <label for="c{position()}"><xsl:value-of disable-output-escaping="yes" select="value"/></label></p></td>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="position() mod 3 = 0 and position() != last()">
<xsl:text disable-output-escaping="yes">
</tr>
<tr>
</xsl:text>
</xsl:if>
</xsl:template>
Вырезал со стандартной регистрации
// Дополнительные свойства
$oSiteuser_Property_List = Core_Entity::factory('Siteuser_Property_List', $oSiteuser->site_id);
$aProperties = $oSiteuser_Property_List->Properties->findAll();
foreach ($aProperties as $oProperty)
{
// Поле не скрытое
if ($oProperty->type != 10)
{
$aProperty_Values = $oProperty->getValues($oSiteuser->id);
count($aProperty_Values) == 0 && $aProperty_Values[0] = $oProperty->createNewValue($oSiteuser->id);
// Дополнительные свойства
switch ($oProperty->type)
{
case 0: // Int
case 3:
тут как мне кажется что-то нужно добавить
break;
2) Сразу попутный вопрос. Если второе доп.свойство пользователя типа "список". В форме он выводиться не селектом, а текстовым инпутом. Как можно проверить перед сохранением, что введенное значение в форме есть в списке свойства
<xsl:template match="properties/property/list/list_item">
<xsl:variable name="value_closet" select="value"/>
<xsl:choose>
<xsl:when test="/siteuser/property_value[tag_name = 'clothes_style' and value=$value_closet]/value != ''">
<td><p><input type="checkbox" id="c{position()}" name="property_68[]" value="{@id}" checked="checked"/> <label for="c{position()}"><xsl:value-of disable-output-escaping="yes" select="value"/></label></p></td>
</xsl:when>
<xsl:otherwise>
<td><p><input type="checkbox" id="c{position()}" name="property_68[]" value="{@id}"/> <label for="c{position()}"><xsl:value-of disable-output-escaping="yes" select="value"/></label></p></td>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="position() mod 3 = 0 and position() != last()">
<xsl:text disable-output-escaping="yes">
</tr>
<tr>
</xsl:text>
</xsl:if>
</xsl:template>
Вырезал со стандартной регистрации
// Дополнительные свойства
$oSiteuser_Property_List = Core_Entity::factory('Siteuser_Property_List', $oSiteuser->site_id);
$aProperties = $oSiteuser_Property_List->Properties->findAll();
foreach ($aProperties as $oProperty)
{
// Поле не скрытое
if ($oProperty->type != 10)
{
$aProperty_Values = $oProperty->getValues($oSiteuser->id);
count($aProperty_Values) == 0 && $aProperty_Values[0] = $oProperty->createNewValue($oSiteuser->id);
// Дополнительные свойства
switch ($oProperty->type)
{
case 0: // Int
case 3:
тут как мне кажется что-то нужно добавить
break;
2) Сразу попутный вопрос. Если второе доп.свойство пользователя типа "список". В форме он выводиться не селектом, а текстовым инпутом. Как можно проверить перед сохранением, что введенное значение в форме есть в списке свойства
Разбрался как сохранить доп.свойства
$oSiteuser_Property_List = Core_Entity::factory('Siteuser_Property_List', $oSiteuser->site_id);
$aProperties = $oSiteuser_Property_List->Properties->findAll();
foreach ($aProperties as $oProperty)
{
// Поле не скрытое
if ($oProperty->type != 10)
{
count($aProperty_Values) == 0 && $aProperty_Values[0] = $oProperty->createNewValue($oSiteuser->id);
// Дополнительные свойства
switch ($oProperty->type)
{
case 0: // Int
case 3:
if(is_array(Core_Array::getPost("property_{$oProperty->id}"))){
foreach($_POST["property_{$oProperty->id}"] as $prop){
$lProperty_Values=$oProperty->createNewValue($oSiteuser->id);
$lProperty_Values->value(intval($prop));
$lProperty_Values->save();
}
}
break;
...
Но все равно не пойму как решить задачу.
У меня открываеться форма с профилем пользователя и выводяться доп.свойства.
После сабмита формы, насколько я понимаю, старые данные пользователя должны очиститься, затем проверить существование элемента в списке формы и если данные верные, тогда сохранить доп. свойство. Пожалуйста, подскажите, как это реализовать?
Вот полный xsl
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:hostcms="http://www.hostcms.ru/"
exclude-result-prefixes="hostcms">
<xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="utf-8" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
<!-- Анкетные данные -->
<xsl:template match="/siteuser">
<div class="bg_box">
<div class="logo">
<p><a href="#"><img src="/images/site2/bg/logo.png" alt="" /></a></p>
</div>
<div class="bg_content">
<p class="title">Дополните свой профайл:</p>
<form method="POST" action="/users/profile/">
<table width="100%">
<tr>
<td>
<p><xsl:value-of select="properties/property[@id = 66]/name"/>:</p>
<p><input type="text" name="property_66" value="{property_value[tag_name = 'shoes_size']/value}"/></p>
</td>
<td width="190">
<p><xsl:value-of select="properties/property[@id = 67]/name"/>:</p>
<p><input type="text" name="property_67" value="{property_value[tag_name = 'size_clothes']/value}"/></p>
</td>
<tr>
<td>
<p>Страна:</p>
<p><input type="text" name="country" value="{country}"/></p>
</td>
<td width="190">
<p>Город:</p>
<p><input type="text" name="city" value="{city}"/></p>
</td>
</tr>
</tr>
</table>
<table width="100%">
<tr>
<td colspan="3">
<p>Выберите свой стиль:</p>
</td>
</tr>
<tr>
<xsl:apply-templates select="properties/property[@id=68]/list/list_item"/>
</tr>
</table>
<p align="center"><a href="#">Пропустить этот шаг</a>    <button name="apply" value="1">Далее</button></p>
</form>
</div>
</div>
</xsl:template>
<xsl:template match="properties/property/list/list_item">
<xsl:variable name="value_closet" select="value"/>
<xsl:choose>
<xsl:when test="/siteuser/property_value[tag_name = 'clothes_style' and value=$value_closet]/value != ''">
<td><p><input type="checkbox" id="c{position()}" name="property_68[]" value="{@id}" checked="checked"/> <label for="c{position()}"><xsl:value-of disable-output-escaping="yes" select="value"/></label></p></td>
</xsl:when>
<xsl:otherwise>
<td><p><input type="checkbox" id="c{position()}" name="property_68[]" value="{@id}"/> <label for="c{position()}"><xsl:value-of disable-output-escaping="yes" select="value"/></label></p></td>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="position() mod 3 = 0 and position() != last()">
<xsl:text disable-output-escaping="yes">
</tr>
<tr>
</xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
$oSiteuser_Property_List = Core_Entity::factory('Siteuser_Property_List', $oSiteuser->site_id);
$aProperties = $oSiteuser_Property_List->Properties->findAll();
foreach ($aProperties as $oProperty)
{
// Поле не скрытое
if ($oProperty->type != 10)
{
count($aProperty_Values) == 0 && $aProperty_Values[0] = $oProperty->createNewValue($oSiteuser->id);
// Дополнительные свойства
switch ($oProperty->type)
{
case 0: // Int
case 3:
if(is_array(Core_Array::getPost("property_{$oProperty->id}"))){
foreach($_POST["property_{$oProperty->id}"] as $prop){
$lProperty_Values=$oProperty->createNewValue($oSiteuser->id);
$lProperty_Values->value(intval($prop));
$lProperty_Values->save();
}
}
break;
...
Но все равно не пойму как решить задачу.
У меня открываеться форма с профилем пользователя и выводяться доп.свойства.
После сабмита формы, насколько я понимаю, старые данные пользователя должны очиститься, затем проверить существование элемента в списке формы и если данные верные, тогда сохранить доп. свойство. Пожалуйста, подскажите, как это реализовать?
Вот полный xsl
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:hostcms="http://www.hostcms.ru/"
exclude-result-prefixes="hostcms">
<xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="utf-8" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
<!-- Анкетные данные -->
<xsl:template match="/siteuser">
<div class="bg_box">
<div class="logo">
<p><a href="#"><img src="/images/site2/bg/logo.png" alt="" /></a></p>
</div>
<div class="bg_content">
<p class="title">Дополните свой профайл:</p>
<form method="POST" action="/users/profile/">
<table width="100%">
<tr>
<td>
<p><xsl:value-of select="properties/property[@id = 66]/name"/>:</p>
<p><input type="text" name="property_66" value="{property_value[tag_name = 'shoes_size']/value}"/></p>
</td>
<td width="190">
<p><xsl:value-of select="properties/property[@id = 67]/name"/>:</p>
<p><input type="text" name="property_67" value="{property_value[tag_name = 'size_clothes']/value}"/></p>
</td>
<tr>
<td>
<p>Страна:</p>
<p><input type="text" name="country" value="{country}"/></p>
</td>
<td width="190">
<p>Город:</p>
<p><input type="text" name="city" value="{city}"/></p>
</td>
</tr>
</tr>
</table>
<table width="100%">
<tr>
<td colspan="3">
<p>Выберите свой стиль:</p>
</td>
</tr>
<tr>
<xsl:apply-templates select="properties/property[@id=68]/list/list_item"/>
</tr>
</table>
<p align="center"><a href="#">Пропустить этот шаг</a>    <button name="apply" value="1">Далее</button></p>
</form>
</div>
</div>
</xsl:template>
<xsl:template match="properties/property/list/list_item">
<xsl:variable name="value_closet" select="value"/>
<xsl:choose>
<xsl:when test="/siteuser/property_value[tag_name = 'clothes_style' and value=$value_closet]/value != ''">
<td><p><input type="checkbox" id="c{position()}" name="property_68[]" value="{@id}" checked="checked"/> <label for="c{position()}"><xsl:value-of disable-output-escaping="yes" select="value"/></label></p></td>
</xsl:when>
<xsl:otherwise>
<td><p><input type="checkbox" id="c{position()}" name="property_68[]" value="{@id}"/> <label for="c{position()}"><xsl:value-of disable-output-escaping="yes" select="value"/></label></p></td>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="position() mod 3 = 0 and position() != last()">
<xsl:text disable-output-escaping="yes">
</tr>
<tr>
</xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Собственно вопрос, как оно работает в админке
1. Если изменить поле на текстовое для ввода, как проверить существование значение в списке и если верное, то сохранить
2. Как работает сохранение/удаление
1. Если изменить поле на текстовое для ввода, как проверить существование значение в списке и если верное, то сохранить
2. Как работает сохранение/удаление
1. Не совсем ясна связь поля ввода и списка. Опишите подробнее.
2. khusainov писал(а):
2. khusainov писал(а):
Как работает сохранение/удаление
- Тоже не ясно. Сохранение/удаление чего? Свойства, значения?
Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
1. Есть текстовый инпут. Пользователь вводит значение, проверяем есть ли такое значение в списке. Если есть, сохраняем, если нет, выводим сообщение об ошибке.
2. Ну как я понимаю, перед сохранением множественного списка, данные доп.свойства очищаются, затем только сохраняються. Вот я и спрашиваю как это работает в админке, потому что не могу найти где этот код реализован. Нужен как раз такой же функционал как в админке
2. Ну как я понимаю, перед сохранением множественного списка, данные доп.свойства очищаются, затем только сохраняються. Вот я и спрашиваю как это работает в админке, потому что не могу найти где этот код реализован. Нужен как раз такой же функционал как в админке
Вот почти решил топорным методом,
xsl-шаблон
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:hostcms="http://www.hostcms.ru/"
exclude-result-prefixes="hostcms">
<xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="utf-8" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
<!-- Анкетные данные -->
<xsl:template match="/siteuser">
<div class="bg_box">
<div class="logo">
<p><a href="#"><img src="/images/site2/bg/logo.png" alt="" /></a></p>
</div>
<div class="bg_content">
<xsl:if test="error/node()">
<SCRIPT type="text/javascript">
<xsl:comment>
<xsl:text disable-output-escaping="yes">
<![CDATA[
$(function() {
$('#error').dialog();
});
]]>
</xsl:text>
</xsl:comment>
</SCRIPT>
<div id="error">
<xsl:value-of disable-output-escaping="yes" select="error"/>
</div>
</xsl:if>
<p class="title">Дополните свой профайл:</p>
<form method="POST" action="/users/profile/">
<table width="100%">
<tr>
<td>
<p><xsl:value-of select="properties/property[@id = 66]/name"/>:</p>
<p><input type="text" name="property_66" value="{property_value[tag_name = 'shoes_size']/value}"/></p>
</td>
<td width="190">
<p><xsl:value-of select="properties/property[@id = 67]/name"/>:</p>
<p><input type="text" name="property_67" value="{property_value[tag_name = 'size_clothes']/value}"/></p>
</td>
<tr>
<td>
<p>Страна:</p>
<p><input type="text" name="country" value="{country}"/></p>
</td>
<td width="190">
<p>Город:</p>
<p><input type="text" name="city" value="{city}"/></p>
</td>
</tr>
</tr>
</table>
<table width="100%">
<tr>
<td colspan="3">
<p>Выберите свой стиль:</p>
</td>
</tr>
<tr>
<xsl:apply-templates select="properties/property[@id=68]/list/list_item"/>
</tr>
</table>
<p align="center"><a href="#">Пропустить этот шаг</a> <button name="apply" value="1">Далее</button></p>
</form>
</div>
</div>
</xsl:template>
<xsl:template match="properties/property/list/list_item">
<xsl:variable name="value_closet" select="value"/>
<xsl:choose>
<xsl:when test="/siteuser/property_value[tag_name = 'clothes_style' and value=$value_closet]/value != ''">
<td><p><input type="checkbox" id="c{position()}" name="property_68[]" value="{@id}" checked="checked"/> <label for="c{position()}"><xsl:value-of disable-output-escaping="yes" select="value"/></label></p></td>
</xsl:when>
<xsl:otherwise>
<td><p><input type="checkbox" id="c{position()}" name="property_68[]" value="{@id}"/> <label for="c{position()}"><xsl:value-of disable-output-escaping="yes" select="value"/></label></p></td>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="position() mod 3 = 0 and position() != last()">
<xsl:text disable-output-escaping="yes">
</tr>
<tr>
</xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Код динамической страницы
<?php
$XSLRegistration = Core_Array::get(Core_Page::instance()->libParams, 'XSLRegistration');
$oSiteuser = Core_Entity::factory('Siteuser')->getCurrent();
if(is_null($oSiteuser)){
header('Location: '.strval('/users/'));
}
$Siteuser_Controller_Show = new Siteuser_Controller_Show(
$oSiteuser
);
$error=0;
// Обновление данных или регистрация нового пользователя
if (Core_Array::getPost('apply'))
{
$oSiteuser->city = strval(Core_Array::getPost('city'));
$oSiteuser->country = strval(Core_Array::getPost('country'));
Core_QueryBuilder::delete('property_value_ints')
->lowPriority()
->quick()
->ignore()
->where('entity_id', '=', $oSiteuser->id)
->execute();
Core_QueryBuilder::delete('property_value_texts')
->lowPriority()
->quick()
->ignore()
->where('entity_id', '=', $oSiteuser->id)
->execute();
Core_QueryBuilder::delete('property_value_strings')
->lowPriority()
->quick()
->ignore()
->where('entity_id', '=', $oSiteuser->id)
->execute();
// Дополнительные свойства
$oSiteuser_Property_List = Core_Entity::factory('Siteuser_Property_List', $oSiteuser->site_id);
$aProperties = $oSiteuser_Property_List->Properties->findAll();
foreach ($aProperties as $oProperty)
{
// Поле не скрытое
if ($oProperty->type != 10)
{
$aProperty_Values = $oProperty->getValues($oSiteuser->id);
count($aProperty_Values) == 0 && $aProperty_Values[0] = $oProperty->createNewValue($oSiteuser->id);
// Дополнительные свойства
switch ($oProperty->type)
{
case 0: // Int
case 3:
if(($oProperty->id==66 || $oProperty->id==67) && isset($_POST["property_{$oProperty->id}"])){
$oList_Item = $aProperty_Values[0]->List_Item;
$aList_Item=$oList_Item->findAll();
$count=0;
foreach($aList_Item as $a){
if($a->value==$_POST["property_{$oProperty->id}"]){
$id=$a->id;
$count=1;
break;
}
}
if($count){
$aProperty_Values[0]->value(strval($id));
$aProperty_Values[0]->save();
}
else{
if($oProperty->id==66){
$Siteuser_Controller_Show->addEntity(
Core::factory('Core_Xml_Entity')
->name('error')->value('Неверный размер обуви.')
);
}
if($oProperty->id==67){
$Siteuser_Controller_Show->addEntity(
Core::factory('Core_Xml_Entity')
->name('error')->value('Неверный размер одежды.')
);
}
}
}
else {
if(isset($_POST["property_{$oProperty->id}"]) && is_array($_POST["property_{$oProperty->id}"])){
foreach($_POST["property_{$oProperty->id}"] as $prop){
$lProperty_Values=$oProperty->createNewValue($oSiteuser->id);
$lProperty_Values->value(intval($prop));
$lProperty_Values->save();
}
}
}
break;
case 5: // Information system
$aProperty_Values[0]->value(intval(Core_Array::getPost("property_{$oProperty->id}")));
$aProperty_Values[0]->save();
break;
case 1: // String
case 4: // Textarea
case 6: // Wysiwyg
$aProperty_Values[0]->value(strval(Core_Array::getPost("property_{$oProperty->id}")));
$aProperty_Values[0]->save();
break;
case 8: // Date
$date = strval(Core_Array::getPost("property_{$oProperty->id}"));
$date = Core_Date::date2sql($date);
$aProperty_Values[0]->value($date);
$aProperty_Values[0]->save();
break;
case 9: // Datetime
$datetime = strval(Core_Array::getPost("property_{$oProperty->id}"));
$datetime = Core_Date::datetime2sql($datetime);
$aProperty_Values[0]->value($datetime);
$aProperty_Values[0]->save();
break;
case 2: // File
$aFileData = Core_Array::getFiles("property_{$oProperty->id}");
if (!is_null($aFileData))
{
$aProperty_Values[0]->setDir(
$oSiteuser_Property_List->getDirPath($oSiteuser)
);
if (Core_File::isValidExtension($aFileData['name'], array('JPG', 'JPEG', 'GIF', 'PNG')))
{
// Удаление файла большого изображения
if ($aProperty_Values[0]->file)
{
$aProperty_Values[0]
->deleteLargeFile()
->deleteSmallFile();
}
$aProperty_Values[0]->save();
$aProperty_Values[0]->file = 'property_' . $aProperty_Values[0]->id . '.' . Core_File::getExtension($aFileData['name']);
$aProperty_Values[0]->file_name = $aFileData['name'];
try
{
$oSiteuser_Property_List->createPropertyDir($oSiteuser);
// Resize image
Core_Image::instance()->resizeImage($aFileData['tmp_name'], $oSiteuser->Site->max_size_load_image, $oSiteuser->Site->max_size_load_image, $aProperty_Values[0]->getLargeFilePath());
$aProperty_Values[0]->save();
}
catch (Exception $e) {
Core_Message::show($e->getMessage(), 'error');
};
}
}
break;
case 7: // Checkbox
$aProperty_Values[0]->value(is_null(Core_Array::getPost("property_{$oProperty->id}")) ? 0 : 1);
$aProperty_Values[0]->save();
break;
}
}
}
if(!$error)
$Siteuser_Controller_Show->go('/users/');
}
$Siteuser_Controller_Show->xsl(
Core_Entity::factory('Xsl')->getByName($XSLRegistration)
)
->properties(TRUE)
->show();
но, если есть ошибки заполнения данных, открываеться форма, но почему-то нет данных. При повторной загрузке страницы, данные в форме есть верные
xsl-шаблон
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:hostcms="http://www.hostcms.ru/"
exclude-result-prefixes="hostcms">
<xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="utf-8" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
<!-- Анкетные данные -->
<xsl:template match="/siteuser">
<div class="bg_box">
<div class="logo">
<p><a href="#"><img src="/images/site2/bg/logo.png" alt="" /></a></p>
</div>
<div class="bg_content">
<xsl:if test="error/node()">
<SCRIPT type="text/javascript">
<xsl:comment>
<xsl:text disable-output-escaping="yes">
<![CDATA[
$(function() {
$('#error').dialog();
});
]]>
</xsl:text>
</xsl:comment>
</SCRIPT>
<div id="error">
<xsl:value-of disable-output-escaping="yes" select="error"/>
</div>
</xsl:if>
<p class="title">Дополните свой профайл:</p>
<form method="POST" action="/users/profile/">
<table width="100%">
<tr>
<td>
<p><xsl:value-of select="properties/property[@id = 66]/name"/>:</p>
<p><input type="text" name="property_66" value="{property_value[tag_name = 'shoes_size']/value}"/></p>
</td>
<td width="190">
<p><xsl:value-of select="properties/property[@id = 67]/name"/>:</p>
<p><input type="text" name="property_67" value="{property_value[tag_name = 'size_clothes']/value}"/></p>
</td>
<tr>
<td>
<p>Страна:</p>
<p><input type="text" name="country" value="{country}"/></p>
</td>
<td width="190">
<p>Город:</p>
<p><input type="text" name="city" value="{city}"/></p>
</td>
</tr>
</tr>
</table>
<table width="100%">
<tr>
<td colspan="3">
<p>Выберите свой стиль:</p>
</td>
</tr>
<tr>
<xsl:apply-templates select="properties/property[@id=68]/list/list_item"/>
</tr>
</table>
<p align="center"><a href="#">Пропустить этот шаг</a> <button name="apply" value="1">Далее</button></p>
</form>
</div>
</div>
</xsl:template>
<xsl:template match="properties/property/list/list_item">
<xsl:variable name="value_closet" select="value"/>
<xsl:choose>
<xsl:when test="/siteuser/property_value[tag_name = 'clothes_style' and value=$value_closet]/value != ''">
<td><p><input type="checkbox" id="c{position()}" name="property_68[]" value="{@id}" checked="checked"/> <label for="c{position()}"><xsl:value-of disable-output-escaping="yes" select="value"/></label></p></td>
</xsl:when>
<xsl:otherwise>
<td><p><input type="checkbox" id="c{position()}" name="property_68[]" value="{@id}"/> <label for="c{position()}"><xsl:value-of disable-output-escaping="yes" select="value"/></label></p></td>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="position() mod 3 = 0 and position() != last()">
<xsl:text disable-output-escaping="yes">
</tr>
<tr>
</xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Код динамической страницы
<?php
$XSLRegistration = Core_Array::get(Core_Page::instance()->libParams, 'XSLRegistration');
$oSiteuser = Core_Entity::factory('Siteuser')->getCurrent();
if(is_null($oSiteuser)){
header('Location: '.strval('/users/'));
}
$Siteuser_Controller_Show = new Siteuser_Controller_Show(
$oSiteuser
);
$error=0;
// Обновление данных или регистрация нового пользователя
if (Core_Array::getPost('apply'))
{
$oSiteuser->city = strval(Core_Array::getPost('city'));
$oSiteuser->country = strval(Core_Array::getPost('country'));
Core_QueryBuilder::delete('property_value_ints')
->lowPriority()
->quick()
->ignore()
->where('entity_id', '=', $oSiteuser->id)
->execute();
Core_QueryBuilder::delete('property_value_texts')
->lowPriority()
->quick()
->ignore()
->where('entity_id', '=', $oSiteuser->id)
->execute();
Core_QueryBuilder::delete('property_value_strings')
->lowPriority()
->quick()
->ignore()
->where('entity_id', '=', $oSiteuser->id)
->execute();
// Дополнительные свойства
$oSiteuser_Property_List = Core_Entity::factory('Siteuser_Property_List', $oSiteuser->site_id);
$aProperties = $oSiteuser_Property_List->Properties->findAll();
foreach ($aProperties as $oProperty)
{
// Поле не скрытое
if ($oProperty->type != 10)
{
$aProperty_Values = $oProperty->getValues($oSiteuser->id);
count($aProperty_Values) == 0 && $aProperty_Values[0] = $oProperty->createNewValue($oSiteuser->id);
// Дополнительные свойства
switch ($oProperty->type)
{
case 0: // Int
case 3:
if(($oProperty->id==66 || $oProperty->id==67) && isset($_POST["property_{$oProperty->id}"])){
$oList_Item = $aProperty_Values[0]->List_Item;
$aList_Item=$oList_Item->findAll();
$count=0;
foreach($aList_Item as $a){
if($a->value==$_POST["property_{$oProperty->id}"]){
$id=$a->id;
$count=1;
break;
}
}
if($count){
$aProperty_Values[0]->value(strval($id));
$aProperty_Values[0]->save();
}
else{
if($oProperty->id==66){
$Siteuser_Controller_Show->addEntity(
Core::factory('Core_Xml_Entity')
->name('error')->value('Неверный размер обуви.')
);
}
if($oProperty->id==67){
$Siteuser_Controller_Show->addEntity(
Core::factory('Core_Xml_Entity')
->name('error')->value('Неверный размер одежды.')
);
}
}
}
else {
if(isset($_POST["property_{$oProperty->id}"]) && is_array($_POST["property_{$oProperty->id}"])){
foreach($_POST["property_{$oProperty->id}"] as $prop){
$lProperty_Values=$oProperty->createNewValue($oSiteuser->id);
$lProperty_Values->value(intval($prop));
$lProperty_Values->save();
}
}
}
break;
case 5: // Information system
$aProperty_Values[0]->value(intval(Core_Array::getPost("property_{$oProperty->id}")));
$aProperty_Values[0]->save();
break;
case 1: // String
case 4: // Textarea
case 6: // Wysiwyg
$aProperty_Values[0]->value(strval(Core_Array::getPost("property_{$oProperty->id}")));
$aProperty_Values[0]->save();
break;
case 8: // Date
$date = strval(Core_Array::getPost("property_{$oProperty->id}"));
$date = Core_Date::date2sql($date);
$aProperty_Values[0]->value($date);
$aProperty_Values[0]->save();
break;
case 9: // Datetime
$datetime = strval(Core_Array::getPost("property_{$oProperty->id}"));
$datetime = Core_Date::datetime2sql($datetime);
$aProperty_Values[0]->value($datetime);
$aProperty_Values[0]->save();
break;
case 2: // File
$aFileData = Core_Array::getFiles("property_{$oProperty->id}");
if (!is_null($aFileData))
{
$aProperty_Values[0]->setDir(
$oSiteuser_Property_List->getDirPath($oSiteuser)
);
if (Core_File::isValidExtension($aFileData['name'], array('JPG', 'JPEG', 'GIF', 'PNG')))
{
// Удаление файла большого изображения
if ($aProperty_Values[0]->file)
{
$aProperty_Values[0]
->deleteLargeFile()
->deleteSmallFile();
}
$aProperty_Values[0]->save();
$aProperty_Values[0]->file = 'property_' . $aProperty_Values[0]->id . '.' . Core_File::getExtension($aFileData['name']);
$aProperty_Values[0]->file_name = $aFileData['name'];
try
{
$oSiteuser_Property_List->createPropertyDir($oSiteuser);
// Resize image
Core_Image::instance()->resizeImage($aFileData['tmp_name'], $oSiteuser->Site->max_size_load_image, $oSiteuser->Site->max_size_load_image, $aProperty_Values[0]->getLargeFilePath());
$aProperty_Values[0]->save();
}
catch (Exception $e) {
Core_Message::show($e->getMessage(), 'error');
};
}
}
break;
case 7: // Checkbox
$aProperty_Values[0]->value(is_null(Core_Array::getPost("property_{$oProperty->id}")) ? 0 : 1);
$aProperty_Values[0]->save();
break;
}
}
}
if(!$error)
$Siteuser_Controller_Show->go('/users/');
}
$Siteuser_Controller_Show->xsl(
Core_Entity::factory('Xsl')->getByName($XSLRegistration)
)
->properties(TRUE)
->show();
но, если есть ошибки заполнения данных, открываеться форма, но почему-то нет данных. При повторной загрузке страницы, данные в форме есть верные
Авторизация