UMIhelp

Разработка дополнительного функционала => Custom макросы => Тема начата: niakriss от 26 Ноября 2012, 12:46:21

Название: выборка дат
Отправлено: niakriss от 26 Ноября 2012, 12:46:21
Здравствуйте. Написала макрос для выборки дат. Но он выбирает даты всех новостей типа Новости. А мне надо, чтобы выбирал тип по id для моего типа данных новостей..
вот такой код:
А после того как перевела в json стал выдавать тольо 1 дату.. последнюю...  как сделать чтоб массив выдавал?

public function NewsDates()
{
$pages = new selector('pages');
$pages->types('hierarchy-type')->name('news', 'item');

$pages->where('publish_time')->eqmore(time());
//$pages->getFormattedDate("d.m.Y");
foreach($pages as $page)
echo "{$page->publish_time}\n";
$date = $page->publish_time;
$date->getFormattedDate("Y-m-d");
return json_encode($date->getFormattedDate("Y-m-d"));
}

пробовала вместо name('news', 'item'); ставить id(120);
но все равно не помогает(( выдает ошибку((( помогите, пожалуйста.....
Название: Re:выборка дат
Отправлено: Iolanta от 26 Ноября 2012, 15:52:51
Вот здесь кажется выбирали по $typeId
http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/primery_ispolzovaniya_vozmozhnostej_api/perenos_dannyh/
может поможет     
        $sel = new selector("pages");
    $sel->types('object-type')->id($typeId);
    $pages = $sel->result();
Название: Re:выборка дат
Отправлено: niakriss от 26 Ноября 2012, 16:01:20
а разве так можно? выборку "страниц" делать.. а тип "объекта" в выборке ставить..
ну  я все же попробовала так... ошибку выдает...
Название: Re:выборка дат
Отправлено: Iolanta от 26 Ноября 2012, 16:13:24
не уверена что за число 120 (наверное тип данных новостей в шаблоне данных)
http://umihelp.ru/notes/vsegda_putayu_hierarchytypeid_i_objecttypeid/ видимо нужен второй вариант и тогда выборка 
 $sel->types('object-type')->id(120); по идее правильная, ошибку какую пишет?
Название: Re:выборка дат
Отправлено: niakriss от 26 Ноября 2012, 16:39:18
прошу прощения.. видимо где то символ не так написала.. перепечатала и заработала эта строчка...
но с выводом массива так и осталась проблема(
Название: Re:выборка дат
Отправлено: Iolanta от 26 Ноября 2012, 17:22:16
не факт, что заработает, но надо добавить в общий массив страницы, кот. вышли после выборки, а дату можно и xslt вывести
   public function NewsDates()
   {
      $sel = new selector('pages');
      $sel->types('hierarchy-type')->name('news', 'item');
      $sel->types('object-type')->id(120);
      $sel->where('publish_time')->eqmore(time());
      $pages = $sel->result();
      foreach($pages as $page)

         $date = $page->publish_time;
         $date->getFormattedDate("Y-m-d");
         
         $template = "default";
         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"); 
         $block_arr = Array();
         $lines = Array();
         
         foreach($pages as $page){
            $line_arr = Array();
               $line_arr['attribute:id'] =  $page->id;
            $line_arr['attribute:link'] = umiHierarchy::getInstance()->getPathById($page->id);
               $line_arr['xlink:href'] = "upage://" . $page->id;
               $line_arr['node:text'] = $page->name; 
            $lines[] = self::parseTemplate($template_line, $line_arr, $page->id);
         }
         $block_arr['subnodes:lines'] = $lines;
         return $this->parseTemplate($template_block, $block_arr,0);
   }
если проверка пройдет
 http://umi.site.com/udata://custom/NewsDates/udata/lines/item
то останется только вывести в xslt как-нибудь так

   <xsl:apply-templates select="document('udata://custom/NewsDates/')/udata/lines/item" mode="mylist"/>
   
   <xsl:template match="item" mode="mylist">
      <xsl:variable name="pdate" select="document(concat('upage://', @id, '.publish_time'))/udata/property/value/@unix-timestamp" disable-output-escaping="yes"/>
     <xsl:value-of select="document(concat('udata://system/convertDate/', $pdate, '/(d.m.Y)'))/udata" />
   </xsl:template>
Название: Re:выборка дат
Отправлено: niakriss от 27 Ноября 2012, 09:50:49
что то не так.. буду разбираться))) спасибо
Название: Re:выборка дат
Отправлено: niakriss от 27 Ноября 2012, 11:09:32
сделала так... теперь все работает))) спасибо))
	public function NewsDate()
{
$sel = new selector('pages');
      $sel->types('object-type')->id(120);
      $sel->where('publish_time')->eqmore(time());
      $pages = $sel->result();
      foreach($pages as $page)

         $block_arr = Array();
         $lines = Array();
         $template_line = null;
         foreach($pages as $page){
            $line_arr = Array();
               $line_arr['attribute:id'] =  $page->id;
            $line_arr['attribute:link'] = umiHierarchy::getInstance()->getPathById($page->id);
               $line_arr['xlink:href'] = "upage://" . $page->id;
               $line_arr['node:text'] = $page->name;
            $lines[] = def_module::parseTemplate($template_line, $line_arr);
         }
         $block_arr['subnodes:lines'] = $lines;
         return $this->parseTemplate($template_block, $block_arr);

}
Название: Re:выборка дат
Отправлено: niakriss от 27 Ноября 2012, 14:14:37
а может кто еще знает как результат этого макроса в ява скрипт можно запихнуть?
Название: Re:выборка дат
Отправлено: admin от 28 Ноября 2012, 22:46:43
прописать в шаблоне, например

<script	type="text/javascript">
var oTable   = <xsl:value-of select="result/page/@pageId"/>;
var oDataSet = null;

$(document).ready(function() {
//...

</ script >

можно еще для верности содержимое тега script обвернуть <![CDATA[ .... ]]>
Название: Re:выборка дат
Отправлено: niakriss от 29 Ноября 2012, 11:02:46
ага... уже так и сделала..)))