| Новости | FAQ | Авторы | Документация | В действии | Библиотека |
| Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
BeaVe 06.12.2007 12:24 / 06.12.2007 13:29
Из таблицы products улетело поле thread_id. Вместо него добавилось parents_ids, а nesting же осталось, т.к. оно еще используется когда отбираются параметры (для определения тех, которые находятся на самом высоком уровне).@getProducts[hshParams][hParams]
$hParams[^hash::create[$hshParams]]
$result[^table::sql{
SELECT
product_id,
product_type_id,
parent_id,
nesting,
parents_ids,
price,
currency_id
FROM
products
^if(def ^hParams.product_id.int(0)){
WHERE
products.product_id = ^hParams.product_id.int(0)
}
}]
#end @getProducts[]
@getProductsFields[hshParams]
$hParams[^hash::create[$hshParams]]
$result[^table::sql{
SELECT
product_field_id,
product_id,
parent_id,
name,
value
^if(def $hParams.SQL_SELECT){
, $hParams.SQL_SELECT
}
FROM
products_fields
^if(def $hParams.SQL_FROM){
, $hParams.SQL_FROM
}
^if(def $hParams.SQL_WHERE){
WHERE
$hParams.SQL_WHERE
}
}]
#end @getProductsFields[]
@parseProduct_by_ID[intProductID][tProduct;tProductsFields]
^if(^intProductID.int(0)){
$tProduct[^self.getProducts[
$.product_id(^intProductID.int(0))
]]
^if($tProduct){
$tProductsFields[^self.getProductsFields[
$.SQL_SELECT[nesting]
$.SQL_FROM[products]
$.SQL_WHERE[
products.product_id = products_fields.product_id AND
products.product_id IN ($tProduct.parents_ids)
]
]]
^self.printProduct[$tProduct][
$.tag_body[
^self.parseProductsFields[^tProductsFields.hash[parent_id];0]
]
]
}
}{
^throw[...]
}
#end @parseProduct_by_ID[]
@parseProductsFields[hshFields;intParentID][hFields;tFieldsNames;tFieldsByName;iMaxNesting;iOffset]
^if($hshFields.[$intParentID]){
# создаем hash с параметрами, отобранными по названию
$hFields[:hshFields.[$intParentID].hash[name][$.distinct[tables]]]
$tFieldsNames[^hFields._keys[name]]
# делаем обход параметров для отбора более подходящих (на основе уровня наследования - nesting)
^tFieldsNames.menu{
$tFieldsByName[$hFields.[$tFieldsNames.name]]
$iMaxNesting(0)
$iOffset(0)
^tFieldsByName.menu{
^if($tFieldsByName.nesting > $iMaxNesting){
$iMaxNesting($tFieldsByName.nesting)
$iOffset(^tFieldsByName.offset[])
}
}
^if($iMaxNesting){
^tFieldsByName.offset[set]($iOffset)
^self.printProductField[$tFieldsByName.fields;^if($hshFields.[$tFieldsByName.product_id]){^parseProductsFields[$hshFields;$tFieldsByName.product_id]}]
}
}
}
#end @parseProductsFields[]
@printProduct[altData;hshParams][hParams]
$hParams[^hash::create[$hshParams]]
$result[<product id="^altData.product_id.int(0)">
<price currency_id="^altData.currency_id.int(0)">$altData.price</price>
$hParams.tag_body
</product>]
#end @printProduct[]
@printProductField[altData;hshParams][hParams]
$hParams[^hash::create[$hshParams]]
$result[<$altData.name>$altData.value^if(def $hParams.tag_body){$hParams.tag_body}</$altData.name>]
#end @printProductField[]P.S.понятия не имею, на чем вы это пишите (в заголовке треда было 'OFF:')Можно просто "ты". Кстати, было уже про это...