Source for file ProductList.class.php
Documentation is available at ProductList.class.php
* Содержит класс ProductList
* @copyright ColoCall 2006
* Выводит список продуктов для заданного раздела
* @param Document $document
public function __construct($name, $module, Document $document, array $params = null) {
parent::__construct($name, $module, $document, $params);
$descendants = array_keys(Sitemap::getInstance()->getTree()->getNodeById($id)->getDescendants()->asList(false));
$id = array_merge(array($id), $descendants);
$this->setParam('onlyCurrentLang', true);
* Добавлен параметр smapID
* Поле producer_id в списке должно выводиться как текст
* @return DATADescription
if($producerIDFD = $result->getFieldDescriptionByName('producer_id')) {
$result->addFieldDescription($fd);
* Для поля producer_id вместо ключа выводится значение а ключ пишется в аттрибут
$result = parent::createData();
if ($producerIDField = $result->getFieldByName('producer_id')) {
array('producer_id','producer_name', 'producer_segment'),
array('producer_id'=> $producerIDField->getData())
for ($i = 0; $i < $result->getRowCount(); $i++ ) {
if($producerIDField && ($producerID = $producerIDField->getRowData($i))){
$producerIDField->setRowProperty($i, 'producerID', $producerID);
$producerIDField->setRowProperty($i, 'producer_segment', $producerData[$producerID]['producer_segment']);
$producerIDField->setRowData($i, $producerData[$producerID]['producer_name']);
if ($smapID = $result->getFieldByName('smap_id')) {
$smapInfo = $sitemap->getDocumentInfo($smapID->getRowData($i));
$smapID->setRowProperty($i, 'smap_segment', $sitemap->getURLByID($smapID->getRowData($i)));
$smapID->setRowData($i, $smapInfo['Name']);
* Добавляет значение product_price(если есть в перечне полей
if ($this->getAction()== 'search' && isset ($_GET[self::SEARCH_FIELD_NAME])) {
$searchData = explode(' ', $_GET[self::SEARCH_FIELD_NAME]);
while ($str = current($searchData)) {
$searchString .= ' (product_name like "%'. $str. '%" OR product_description_rtf LIKE "%'. $str. '%") ';
$currentCurrency = $converter->getCurrent();
$res = $this->dbh->selectRequest(
'SELECT product_id, product_price, curr_id '.
'FROM shop_product_external_properties e '.
'LEFT JOIN shop_products p ON p.product_code = e.product_code '.
'$row', 'return $row["product_id"];'
foreach ($result as $key => $row) {
$result[$key]['product_price'] = $converter->format(
$res[$row['product_id']]['product_price'],
$res[$row['product_id']]['curr_id']),
protected function view() {
$this->setType(self::COMPONENT_TYPE_FORM);
$this->document->componentManager->getComponentByName('breadCrumbs')->addCrumb('',$this->getData()->getFieldByName('product_name')->getRowData(0));
//Получаем параметры и их значения
//Сначала - набор параметров
$res = $this->dbh->selectRequest(
'SELECT pp.pp_id, pp_name, pp_type, pp_value FROM `shop_product_params` pp '.
'LEFT JOIN shop_product_params_translation ppt ON ppt.pp_id = pp.pp_id '.
'LEFT JOIN shop_products p On p.pt_id = pp.pt_id '.
'LEFT JOIN shop_product_param_values pv On pv.pp_id = pp.pp_id AND pv.product_id = p.product_id '.
'WHERE p.product_id = %s AND lang_id = %s',
$paramName = 'product_param_'. $row['pp_id'];
//Для каждого параметра создаем FieldDescription
$paramFD->setType($row['pp_type']);
$paramF = new Field('product_param_'. $row['pp_id']);
$paramF->setData($row['pp_value']);
$this->getData()->addField($paramF);
if ($component = $this->document->componentManager->getComponentByName('productDivisions')) {
if ($component = $this->document->componentManager->getComponentByName('manufacturers')) {
$f = new Field('product_images');
$images = $this->dbh->selectRequest(
'SELECT spu.product_id, upl_path, upl_name FROM share_uploads su '.
'LEFT JOIN `shop_product_uploads` spu ON spu.upl_id = su.upl_id '.
'WHERE product_id IN ('. implode(',', $data->getFieldByName('product_id')->getData()). ')'
foreach($images as $row){
$productID = $row['product_id'];
if(!isset ($imageData[$productID]))
$imageData[$productID] = array();
for ($i = 0; $i < $data->getRowCount(); $i++ ) {
if(isset ($imageData[$data->getFieldByName('product_id')->getRowData($i)])){
$localData->load($imageData[$data->getFieldByName('product_id')->getRowData($i)]);
$dataDescription->addFieldDescription($fd);
$dataDescription->addFieldDescription($fd);
$dataDescription->addFieldDescription($fd);
$f->setRowData($i, $builder->getResult());
* Выводит список продуктов определенного производителя в данной группе
list ($producerInfo) = $this->dbh->select('shop_producers', array('producer_id', 'producer_name'), array('producer_segment' => $producerSegment));
$this->document->componentManager->getComponentByName('breadCrumbs')->addCrumb('0', $producerInfo['producer_name'], $producerSegment);
if ($component = $this->document->componentManager->getComponentByName('productDivisions')) {
if ($component = $this->document->componentManager->getComponentByName('manufacturers')) {
* Переписан родительский метод
* Для метода showManufacturer изменяет принцип получения actionParams
if ($recordsPerPage > 0) {
if ($this->getAction() == 'showManufacturerProducts') {
if (isset ($actionParams[$paramNum])) {
$page = intval($actionParams[$paramNum]);
$this->pager->setCurrentPage($page);
* Добавлена паенль поиска товаров
public function build() {
$result = parent::build();
if ($this->getType() == self::COMPONENT_TYPE_LIST ) {
$result->documentElement->insertBefore($this->buildSearchForm(), $result->documentElement->childNodes->item(0));
//inspect($this->getActionParams());
$result = $this->doc->createElement('searchform');
$result->setAttribute('title', $this->translate('TXT_SEARCH_CATALOGUE'));
$result->setAttribute('action', 'search-results');
$field = $this->doc->createElement('search_field', (isset ($_GET[self::SEARCH_FIELD_NAME]))? $_GET[self::SEARCH_FIELD_NAME]: '');
$field->setAttribute('action_title', $this->translate('BTN_SEARCH'));
$field->setAttribute('name', self::SEARCH_FIELD_NAME);
$result->appendChild($field);
* Выводит результаты поиска
$this->document->componentManager->getComponentByName('breadCrumbs')->addCrumb();
if ($component = $this->document->componentManager->getComponentByName('productDivisions')) {
|