• Модуль: iblock
  • Путь к файлу: ~/bitrix/modules/iblock/lib/propertyindex/indexer.php
  • Класс: BitrixIblockPropertyIndexIndexer
  • Вызов: Indexer::getSectionIndexEntries
protected function getSectionIndexEntries(Element $element)
{
	$result = array(
		1 => array( //Section binding
			array("VALUE" => 0, "VALUE_NUM" => 0.0)
		)
	);

	foreach ($this->getFilterProperty(Storage::DICTIONARY) as $propertyId)
	{
		$facetId = $this->storage->propertyIdToFacetId($propertyId);
		$result[$facetId] = array();
		$propertyValues = $element->getPropertyValues($propertyId);
		foreach ($propertyValues as $value)
		{
			$value = intval($value);
			$result[$facetId][$value] = array(
				"VALUE" => $value,
				"VALUE_NUM" => 0.0,
			);
		}
	}

	foreach ($this->getFilterProperty(Storage::STRING) as $propertyId)
	{
		$facetId = $this->storage->propertyIdToFacetId($propertyId);
		$result[$facetId] = array();
		$propertyValues = $element->getPropertyValues($propertyId);
		foreach ($propertyValues as $value)
		{
			$valueId = $this->dictionary->getStringId($value);
			$result[$facetId][$valueId] = array(
				"VALUE" => $valueId,
				"VALUE_NUM" => 0.0,
			);
		}
	}

	foreach ($this->getFilterProperty(Storage::NUMERIC) as $propertyId)
	{
		$facetId = $this->storage->propertyIdToFacetId($propertyId);
		$result[$facetId] = array();
		$propertyValues = $element->getPropertyValues($propertyId);
		foreach ($propertyValues as $value)
		{
			$value = doubleval($value);
			$result[$facetId][md5($value)] = array(
				"VALUE" => 0,
				"VALUE_NUM" => $value,
			);
		}
	}

	foreach ($this->getFilterProperty(Storage::DATETIME) as $propertyId)
	{
		$facetId = $this->storage->propertyIdToFacetId($propertyId);
		$result[$facetId] = array();
		$propertyValues = $element->getPropertyValues($propertyId);
		foreach ($propertyValues as $value)
		{
			//Save date only based on server time.
			$timestamp = MakeTimeStamp($value, "YYYY-MM-DD HH:MI:SS");
			$value = date('Y-m-d', $timestamp);
			$timestamp = MakeTimeStamp($value, "YYYY-MM-DD");
			$valueId = $this->dictionary->getStringId($value);
			$result[$facetId][$valueId] = array(
				"VALUE" => $valueId,
				"VALUE_NUM" => $timestamp,
			);
		}
	}

	foreach ($this->getFilterPrices() as $priceId)
	{
		$facetId = $this->storage->priceIdToFacetId($priceId);
		$result[$facetId] = array();
		$elementPrices = $element->getPriceValues($priceId);
		if ($elementPrices)
		{
			foreach ($elementPrices as $currency => $priceValues)
			{
				$currencyId = $this->dictionary->getStringId($currency);
				foreach ($priceValues as $price)
				{
					$result[$facetId][$currencyId.":".$price] = array(
						"VALUE" => $currencyId,
						"VALUE_NUM" => $price,
					);
				}
			}
		}
	}

	return array_filter($result, "count");
}