Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”

0 Пользователей и 1 Гость просматривают эту тему.

*

diii3

  • ***
  • 154
  • +6/-0
    • Просмотр профиля
Здравствуйте! Подскажите, пожалуйста, можно ли сделать чтобы при выводе списка объектов категории каталога, они выводились по дате последнего добавления?

*

BaceH

  • ***
  • 141
  • +21/-0
    • Просмотр профиля
можно, можно кастомом, можно usel, вам что больше нравиться?

*

diii3

  • ***
  • 154
  • +6/-0
    • Просмотр профиля
спасибо за выбор) мне то, что проще сделать))

*

diii3

  • ***
  • 154
  • +6/-0
    • Просмотр профиля
так, что надо сделать-то?))

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
дата создания в объектах не сохраняется, так что можно отсортировать только по id , а так как id увеличивается постепенно, то можно сказать что, то что раньше создали имеет более ранний (меньший) id.

так как нельзя сделать сортировку usel результатов по id, то пишешь кастомный макрос,  который делает selector выборку с сортировкой по id

*

diii3

  • ***
  • 154
  • +6/-0
    • Просмотр профиля
я извиняюсь, но может есть пример? любой с этим selector?

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
в файле /classes/modules/catalog/__custom.php делаешь копию функции getObjectsList и вносишь туда сортировку по id/ В итоге у тебя получиться такой код в этом файле
<?php
abstract class __custom_catalog {
//TODO: Write here your own macroses

public function getObjectsListIdSort($template = "default", $path = false, $limit = false, $ignore_paging = false, $i_need_deep = 0) {
if($this->breakMe()) return;
if(!$template) $template = "default";

if (!$i_need_deep) $i_need_deep = intval(getRequest('param4'));
if (!$i_need_deep) $i_need_deep = 0;
$i_need_deep = intval($i_need_deep);
if ($i_need_deep === -1) $i_need_deep = 100;

$hierarchy = umiHierarchy::getInstance();

list($template_block, $template_block_empty, $template_block_search_empty, $template_line) = def_module::loadTemplates("tpls/catalog/{$template}.tpl", "objects_block", "objects_block_empty", "objects_block_search_empty", "objects_block_line");

$hierarchy_type_id = umiHierarchyTypesCollection::getInstance()->getTypeByName("catalog", "object")->getId();

$category_id = $this->analyzeRequiredPath($path);

if($category_id === false && $path != KEYWORD_GRAB_ALL) {
throw new publicException(getLabel('error-page-does-not-exist', null, $path));
}

$category_element = $hierarchy->getElement($category_id);

$per_page = ($limit) ? $limit : $this->per_page;
$curr_page = getRequest('p');
if($ignore_paging) $curr_page = 0;

$sel = new umiSelection;
$sel->setElementTypeFilter();
$sel->addElementType($hierarchy_type_id);

if($path != KEYWORD_GRAB_ALL) {
$sel->setHierarchyFilter();
$sel->addHierarchyFilter($category_id, $i_need_deep);
}


$sel->setPermissionsFilter();
$sel->addPermissions();

$hierarchy_type = umiHierarchyTypesCollection::getInstance()->getType($hierarchy_type_id);
$type_id = umiObjectTypesCollection::getInstance()->getBaseType($hierarchy_type->getName(), $hierarchy_type->getExt());

if($path === KEYWORD_GRAB_ALL) {
$curr_category_id = cmsController::getInstance()->getCurrentElementId();
} else {
$curr_category_id = $category_id;
}


if($path != KEYWORD_GRAB_ALL) {
$type_id = $hierarchy->getDominantTypeId($curr_category_id, $i_need_deep);
}

if(!$type_id) {
$type_id = umiObjectTypesCollection::getInstance()->getBaseType($hierarchy_type->getName(), $hierarchy_type->getExt());
}


if($type_id) {
$this->autoDetectOrders($sel, $type_id);
$this->autoDetectFilters($sel, $type_id);

if($this->isSelectionFiltered) {
$template_block_empty = $template_block_search_empty;
$this->isSelectionFiltered = false;
}
} else {
$sel->setOrderFilter();
$sel->setOrderByObjectId();
}

if($curr_page !== "all") {
$curr_page = (int) $curr_page;
$sel->setLimitFilter();
$sel->addLimit($per_page, $curr_page);
}

$result = umiSelectionsParser::runSelection($sel);
$total = umiSelectionsParser::runSelectionCounts($sel);

if(($sz = sizeof($result)) > 0) {
$block_arr = Array();

$lines = Array();
for($i = 0; $i < $sz; $i++) {
$element_id = $result[$i];
$element = umiHierarchy::getInstance()->getElement($element_id);

if(!$element) continue;

$line_arr = Array();
$line_arr['attribute:id'] = $element_id;
$line_arr['attribute:alt_name'] = $element->getAltName();
$line_arr['attribute:link'] = umiHierarchy::getInstance()->getPathById($element_id);
$line_arr['xlink:href'] = "upage://" . $element_id;
$line_arr['node:text'] = $element->getName();

$lines[] = $this->parseTemplate($template_line, $line_arr, $element_id);

templater::pushEditable("catalog", "object", $element_id);
umiHierarchy::getInstance()->unloadElement($element_id);
}

$block_arr['subnodes:lines'] = $lines;
$block_arr['numpages'] = umiPagenum::generateNumPage($total, $per_page);
$block_arr['total'] = $total;
$block_arr['per_page'] = $per_page;
$block_arr['category_id'] = $category_id;

if($type_id) {
$block_arr['type_id'] = $type_id;
}

return $this->parseTemplate($template_block, $block_arr, $category_id);
} else {
$block_arr['numpages'] = umiPagenum::generateNumPage(0, 0);
$block_arr['lines'] = "";
$block_arr['total'] = 0;
$block_arr['per_page'] = 0;
$block_arr['category_id'] = $category_id;

return $this->parseTemplate($template_block_empty, $block_arr, $category_id);;
}

}
};
?>

и не забываем прописать права на эту функцию то есть создаем файл  /classes/modules/catalog/permissions.custom.php в котором будет следующее содержимое
<?php
$permissions = Array(
'view' => Array('getObjectsListIdSort')
);
?>

после этого макрос udata://catalog/getObjectsListIdSort будет работать с такимиже параметрами и по той же логике что и getObjectsList, только основная сортировка будет у него по objectId

*

diii3

  • ***
  • 154
  • +6/-0
    • Просмотр профиля
Вы знаете, не работает, но сам код вроде рабочий. Когда подключаю функцию getObjectsListIdSort в вывод объектов каталога, то никакие объекты не выводятся. После этого пробую прописать сам код функции getObjectsList на место кода getObjectsListIdSort  в __custom.php, то же самое, может функция getObjectsListIdSort  не запускается? права установил как надо. Дальше пробую копировать ваш код вместо кода getObjectsList  в class.php, функция работает, но обратной сортировки нет......

*

BaceH

  • ***
  • 141
  • +21/-0
    • Просмотр профиля
покажите содержимое вашего  /classes/modules/catalog/__custom.php.
при вашем тестировании сортировка вообще не происходит? или происходит но не так как хотелось бы?

*

diii3

  • ***
  • 154
  • +6/-0
    • Просмотр профиля
вообще не происходит...

у меня в этом файле еще вами созданная функция добавления, а потом getObjectsListIdSort

<?php
   abstract class __custom_catalog {
      //TODO: Write here your own macroses
      
      public function addCatalogObjectCust() {
         $hierarchy = umiHierarchy::getInstance();
         $hierarchyTypes = umiHierarchyTypesCollection::getInstance();
         $objectTypes = umiObjectTypesCollection::getInstance();
         $cmsController = cmsController::getInstance();
         $parent_id = (int) getRequest('param0');
         $object_type_id = (int) getRequest('param1');
         $title = htmlspecialchars(trim(getRequest('title')));
         $parentElement = $hierarchy->getElement($parent_id);
         $tpl_id      = $parentElement->getTplId();
         $domain_id   = $parentElement->getDomainId();
         $lang_id   = $parentElement->getLangId();
         $hierarchy_type_id = $hierarchyTypes->getTypeByName("catalog", "object")->getId();
         if(!$object_type_id) {
            $object_type_id = $objectTypes->getBaseType("catalog", "object");
         }

         $object_type = $objectTypes->getType($object_type_id);
         if($object_type->getHierarchyTypeId() != $hierarchy_type_id) {
            exit($object_type->getHierarchyTypeId().'='.$hierarchy_type_id);
            $this->errorNewMessage("Object type and hierarchy type doesn't match");
            $this->errorPanic();
         }
         $element_id = $hierarchy->addElement($parent_id, $hierarchy_type_id, $title, $title, $object_type_id, $domain_id, $lang_id, $tpl_id);
         permissionsCollection::getInstance()->setDefaultPermissions($element_id);
         
         $element = $hierarchy->getElement($element_id, true);
         $element->setIsActive(true);
         $element->setIsVisible(false);
         $element->setName($element_id);
         $element->setAltName($element_id);
         
         $data = $cmsController->getModule("data");
         if($data instanceof def_module) {
            $object_id = $element->getObjectId();
            $data->saveEditedObject($object_id, true);
         }
         $element->getObject()->commit();
         $element->commit();
         $parentElement->setUpdateTime(time());
         $parentElement->commit();
         
         
   /*      //отправка письма менеджеру   
         $email_from = 'info@umihelp.ru';//regedit::getInstance()->getVal("//settings/email_from");
         $fio_from = 'admin';//regedit::getInstance()->getVal("//settings/fio_from");

         $admin_email = 'admin@umihelp.ru';//regedit::getInstance()->getVal("//settings/admin_email");

         $someMail = new umiMail();
         $someMail->addRecipient($admin_email);
         $someMail->setFrom($email_from, $fio_from);
         $someMail->setSubject("Add new page on site");
         $someMail->setContent($mail_content);
         $someMail->commit();
         $someMail->send();*/
         
         
         
         
        $Name = "vladcity33.ru"; //senders name
          $email = "info@vladcity33.ru"; //senders e-mail adress
          $recipient = "vladcity33@mail.ru"; //recipient
          $mail_body = "Add new object on site! Category ID = $parent_id . Object ID = $element_id"; //mail body
          $subject = "Add new object on site"; //subject
          $header = "From: ". $Name . " <" . $email . ">\r\n"; //optional headerfields
 

          if(mail($recipient, $subject, $mail_body, $header)){
          return true;
          } else {
          return false;
          }   
      
         
         
         
         if($is_xslt) {
            return Array("node:result" => "ok");
         } else {
            if($element->getIsActive()) {
               $referer_url = $hierarchy->getPathById($element_id);
            } else {
               $referer_url = getServer('HTTP_REFERER');
            }
            $this->redirect($referer_url);
         }
      }
      
      
      
      
      
      
      
      
      
      
      
      public function getObjectsListIdSort($template = "default", $path = false, $limit = false, $ignore_paging = false, $i_need_deep = 0) {
         if($this->breakMe()) return;
         if(!$template) $template = "default";

         if (!$i_need_deep) $i_need_deep = intval(getRequest('param4'));
         if (!$i_need_deep) $i_need_deep = 0;
         $i_need_deep = intval($i_need_deep);
         if ($i_need_deep === -1) $i_need_deep = 100;
         
         $hierarchy = umiHierarchy::getInstance();

         list($template_block, $template_block_empty, $template_block_search_empty, $template_line) = def_module::loadTemplates("tpls/catalog/{$template}.tpl", "objects_block", "objects_block_empty", "objects_block_search_empty", "objects_block_line");

         $hierarchy_type_id = umiHierarchyTypesCollection::getInstance()->getTypeByName("catalog", "object")->getId();

         $category_id = $this->analyzeRequiredPath($path);
         
         if($category_id === false && $path != KEYWORD_GRAB_ALL) {
            throw new publicException(getLabel('error-page-does-not-exist', null, $path));
         }

         $category_element = $hierarchy->getElement($category_id);

         $per_page = ($limit) ? $limit : $this->per_page;
         $curr_page = getRequest('p');
         if($ignore_paging) $curr_page = 0;

         $sel = new umiSelection;
         $sel->setElementTypeFilter();
         $sel->addElementType($hierarchy_type_id);
         
         if($path != KEYWORD_GRAB_ALL) {
            $sel->setHierarchyFilter();
            $sel->addHierarchyFilter($category_id, $i_need_deep);
         }
         

         $sel->setPermissionsFilter();
         $sel->addPermissions();

         $hierarchy_type = umiHierarchyTypesCollection::getInstance()->getType($hierarchy_type_id);
         $type_id = umiObjectTypesCollection::getInstance()->getBaseType($hierarchy_type->getName(), $hierarchy_type->getExt());
         
         if($path === KEYWORD_GRAB_ALL) {
            $curr_category_id = cmsController::getInstance()->getCurrentElementId();
         } else {
            $curr_category_id = $category_id;
         }
         
         
         if($path != KEYWORD_GRAB_ALL) {
            $type_id = $hierarchy->getDominantTypeId($curr_category_id, $i_need_deep);
         }
         
         if(!$type_id) {
            $type_id = umiObjectTypesCollection::getInstance()->getBaseType($hierarchy_type->getName(), $hierarchy_type->getExt());
         }


         if($type_id) {
            $this->autoDetectOrders($sel, $type_id);
            $this->autoDetectFilters($sel, $type_id);
            
            if($this->isSelectionFiltered) {
               $template_block_empty = $template_block_search_empty;
               $this->isSelectionFiltered = false;
            }
         } else {
            $sel->setOrderFilter();
            $sel->setOrderByObjectId();
         }

         if($curr_page !== "all") {
            $curr_page = (int) $curr_page;
            $sel->setLimitFilter();
            $sel->addLimit($per_page, $curr_page);
         }

         $result = umiSelectionsParser::runSelection($sel);
         $total = umiSelectionsParser::runSelectionCounts($sel);
         
         if(($sz = sizeof($result)) > 0) {
            $block_arr = Array();

            $lines = Array();
            for($i = 0; $i < $sz; $i++) {
               $element_id = $result[$i];
               $element = umiHierarchy::getInstance()->getElement($element_id);

               if(!$element) continue;

               $line_arr = Array();
               $line_arr['attribute:id'] = $element_id;
               $line_arr['attribute:alt_name'] = $element->getAltName();
               $line_arr['attribute:link'] = umiHierarchy::getInstance()->getPathById($element_id);
               $line_arr['xlink:href'] = "upage://" . $element_id;
               $line_arr['node:text'] = $element->getName();

               $lines[] = $this->parseTemplate($template_line, $line_arr, $element_id);

               templater::pushEditable("catalog", "object", $element_id);
               umiHierarchy::getInstance()->unloadElement($element_id);
            }

            $block_arr['subnodes:lines'] = $lines;
            $block_arr['numpages'] = umiPagenum::generateNumPage($total, $per_page);
            $block_arr['total'] = $total;
            $block_arr['per_page'] = $per_page;
            $block_arr['category_id'] = $category_id;
            
            if($type_id) {
               $block_arr['type_id'] = $type_id;
            }

            return $this->parseTemplate($template_block, $block_arr, $category_id);
         } else {
            $block_arr['numpages'] = umiPagenum::generateNumPage(0, 0);
            $block_arr['lines'] = "";
            $block_arr['total'] = 0;
            $block_arr['per_page'] = 0;
            $block_arr['category_id'] = $category_id;
            
            return $this->parseTemplate($template_block_empty, $block_arr, $category_id);;
         }

      }
      
      
      
      
      
      
      
      
      
      
   };
?>

*

BaceH

  • ***
  • 141
  • +21/-0
    • Просмотр профиля
попробуйте так:
			public function getObjectsListIdSort($template = "default", $path = false, $limit = false, $ignore_paging = false, $i_need_deep = 0, $field_id = false, $asc = true) {

if($this->breakMe()) return;
if(!$template) $template = "default";

if (!$i_need_deep) $i_need_deep = intval(getRequest('param4'));
if (!$i_need_deep) $i_need_deep = 0;
$i_need_deep = intval($i_need_deep);
if ($i_need_deep === -1) $i_need_deep = 100;

$hierarchy = umiHierarchy::getInstance();

list($template_block, $template_block_empty, $template_block_search_empty, $template_line) = def_module::loadTemplates("catalog/".$template, "objects_block", "objects_block_empty", "objects_block_search_empty", "objects_block_line");

$hierarchy_type_id = umiHierarchyTypesCollection::getInstance()->getTypeByName("catalog", "object")->getId();

$category_id = $this->analyzeRequiredPath($path);

if($category_id === false && $path != KEYWORD_GRAB_ALL) {
throw new publicException(getLabel('error-page-does-not-exist', null, $path));
}

$category_element = $hierarchy->getElement($category_id);

$per_page = ($limit) ? $limit : $this->per_page;
$curr_page = getRequest('p');
if($ignore_paging) $curr_page = 0;

$sel = new umiSelection;
$sel->setElementTypeFilter();
$sel->addElementType($hierarchy_type_id);

if($path != KEYWORD_GRAB_ALL) {
$sel->setHierarchyFilter();
$sel->addHierarchyFilter($category_id, $i_need_deep);
}

$sel->setPermissionsFilter();
$sel->addPermissions();

$hierarchy_type = umiHierarchyTypesCollection::getInstance()->getType($hierarchy_type_id);
$type_id = umiObjectTypesCollection::getInstance()->getBaseType($hierarchy_type->getName(), $hierarchy_type->getExt());


if($path === KEYWORD_GRAB_ALL) {
$curr_category_id = cmsController::getInstance()->getCurrentElementId();
} else {
$curr_category_id = $category_id;
}


if($path != KEYWORD_GRAB_ALL) {
$type_id = $hierarchy->getDominantTypeId($curr_category_id, $i_need_deep, $hierarchy_type_id);
}

if(!$type_id) {
$type_id = umiObjectTypesCollection::getInstance()->getBaseType($hierarchy_type->getName(), $hierarchy_type->getExt());
}


if($type_id) {
$this->autoDetectOrders($sel, $type_id);
$this->autoDetectFilters($sel, $type_id);

if($this->isSelectionFiltered) {
$template_block_empty = $template_block_search_empty;
$this->isSelectionFiltered = false;
}
} else {
$sel->setOrderFilter();
$sel->setOrderByName();
}

if($curr_page !== "all") {
$curr_page = (int) $curr_page;
$sel->setLimitFilter();
$sel->addLimit($per_page, $curr_page);
}

if($field_id) {
if (is_numeric($field_id)) {
$sel->setOrderByProperty($field_id, $asc);
} else {
if ($type_id) {
$field_id = umiObjectTypesCollection::getInstance()->getType($type_id)->getFieldId($field_id);
if ($field_id) {
$sel->setOrderByProperty($field_id, $asc);
} else {
$sel ->setOrderByOrd($asc);
}
} else {
$sel ->setOrderByOrd($asc);
}
}
}
else {
$sel->setOrderFilter();
$sel->setOrderByObjectId(false);
}


$result = umiSelectionsParser::runSelection($sel);
$total = umiSelectionsParser::runSelectionCounts($sel);

if(($sz = sizeof($result)) > 0) {
$block_arr = Array();

$lines = Array();
for($i = 0; $i < $sz; $i++) {
$element_id = $result[$i];
$element = umiHierarchy::getInstance()->getElement($element_id);

if(!$element) continue;

$line_arr = Array();
$line_arr['attribute:id'] = $element_id;
$line_arr['attribute:alt_name'] = $element->getAltName();
$line_arr['attribute:link'] = umiHierarchy::getInstance()->getPathById($element_id);
$line_arr['xlink:href'] = "upage://" . $element_id;
$line_arr['node:text'] = $element->getName();

$lines[] = $this->parseTemplate($template_line, $line_arr, $element_id);

templater::pushEditable("catalog", "object", $element_id);
umiHierarchy::getInstance()->unloadElement($element_id);
}

$block_arr['subnodes:lines'] = $lines;
$block_arr['numpages'] = umiPagenum::generateNumPage($total, $per_page);
$block_arr['total'] = $total;
$block_arr['per_page'] = $per_page;
$block_arr['category_id'] = $category_id;

if($type_id) {
$block_arr['type_id'] = $type_id;
}

return $this->parseTemplate($template_block, $block_arr, $category_id);
} else {
$block_arr['numpages'] = umiPagenum::generateNumPage(0, 0);
$block_arr['lines'] = "";
$block_arr['total'] = 0;
$block_arr['per_page'] = 0;
$block_arr['category_id'] = $category_id;

return $this->parseTemplate($template_block_empty, $block_arr, $category_id);;
}

}

и проверьте данные вывода xml по запросу :
http://ваш_сайт/udata/catalog/getObjectsListIdSort//ид_категории_с товаром/10/0

*

diii3

  • ***
  • 154
  • +6/-0
    • Просмотр профиля
Спасибо большое!! Это я опять начудил) Права не правильно добавил) Все работает!!

*

diii3

  • ***
  • 154
  • +6/-0
    • Просмотр профиля
Черт, теперь не работает добавление объекта каталога)....

*

diii3

  • ***
  • 154
  • +6/-0
    • Просмотр профиля
Извиняюсь, все работает! Спасибо еще раз!!