parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

pre-результат

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