| Новости | 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:')Можно просто "ты". Кстати, было уже про это...