vezunchik
Total posts: 11
22 Март 2016 22:14

Hi everybody!

I want to create module which shows last N records. Can somebody advice me or show example how can I get last records?

thanks!

Последние изменения: 16 Май 2018


Sergey
Total posts: 13,748
23 Март 2016 02:15

If you have Cobalt Records module insalled, then just create new module of this type and in parameters there will be option for that.


vezunchik
Total posts: 11
23 Март 2016 14:15

Hi Sergey, thanks for you answer.

Unfortunately at this stage of my project I can't afford to pay for additions. And except that I would like to explore more deeply this component. So I found next example:

$api = new CobaltApi();
$data = $api->records(
    $section_id, 
    $view_what, 
    $orderby, 
    $type_ids,
    $user_id,
    $category_id, 
    $limit, 
    $template,
    $client,
    $client_id,
    $lang,
    $ids
);

But it works for one section. Is there a solution for all sections at once?


Sergey
Total posts: 13,748
23 Март 2016 14:34

It is impossible to list articles from multiple section. Every section have to be considered as another extension. It is hard to mix articles from difefrent section. Every section have so different parameters, templates, that it is hard to get, how exactly articles have to be listed.


vezunchik
Total posts: 11
23 Март 2016 21:51

Ok, I got it. Next solution suits me:

public function getLastRecords($cnt)
    {
        require_once JPATH_ROOT . '/components/com_cobalt/models/records.php';

        $result = array();

        $db = JFactory::getDbo();
        $api = new CobaltApi();

        $query = $db->getQuery(true);
        $query->select($db->quoteName(array('id', 'title')));
        $query->from($db->quoteName('#__js_res_sections'));
        $query->where($db->quoteName('published') . ' = 1');
        $query->order('ordering ASC');
        $db->setQuery($query);

        $sections = $db->loadObjectList();

        foreach ($sections as $section) {

            $data = $api->records(
                $section->id,
                'all',
                'r.ctime ASC',
                array(),
                null,
                0,
                $cnt
            );

            if (isset($data['list']) && count($data['list'])) {
                $result[] = array(
                    'section' => $section,
                    'data' => $data
                );
            }

        }

        return $result;
    }

But I bumped into with a new issue. API method records() returns array, where one of its element is 'html' which contains html code generated from template located in components/com_cobalt/views/records/tmpl/default_list_default.php Is there any ways to override this template in my custom template directory?

Thanks for attention!


Sergey
Total posts: 13,748
24 Март 2016 02:53

One of the perameters of $api->records() is template. You can give a name there.

  1. Open section and edit parameters of any other template you like.
  2. Look page source and copy template name.

    2016-03-24_08-52-30

  3. Now use this as text for $tmpl parameter for records(). You do not need to select this template in section parameters. Just to see key. This is key for parameters. Every template may be configured differently for different section. So you need this key to get exact parameters.


vezunchik
Total posts: 11
24 Март 2016 20:42

No I mean about this functionality: link

Is there such a possibility?


Sergey
Total posts: 13,748
25 Март 2016 06:18

vezunchik Is there such a possibility?

Yes and no.

Difefrent Coablt section may display with difefrent template, although this is the same view. So in CObalt we have template manager. You create copy of any records list template and assigne it for section. You can also separately configure same template for every section and CObalt will load different settings for different section but physicaly it is the same template.

  1. Create copy of any list template in temmplate manger
  2. Edit section and edit your new template parametrs by first selectin that template in the list. then unselect it.
  3. Find key as I show in previous comment.
  4. Use it as parameter for $api->records()

vezunchik
Total posts: 11
31 Март 2016 14:03

But anyway this template located in Cobalt directory, not in directory where located all site templates? right?


Sergey
Total posts: 13,748
04 Апр 2016 15:53

RIght. Please read here about Cobalt template system.


jimie VIP
Total posts: 531
28 Апр 2016 15:15

Hello,

Have you managed to create that module ? Is it possible to share it please ?

Rgds


vezunchik
Total posts: 11
06 Май 2016 13:36

hi jimie,

do you mean my module with last cobalt records?


Sanu
Total posts: 19
10 Март 2018 15:07

Colleagues, share please the result


pepperstreet VIP
Total posts: 3,837
11 Март 2018 00:26

What about single purchase of Records module? ( $10 only! )


Sanu
Total posts: 19
12 Март 2018 14:57

Prompt please for beginners, in what file (or template) it is necessary to apply the function get Last Record ($cnt)? Do I need something special?

I also need to display the title of the last article from all sections


Sanu
Total posts: 19
13 Март 2018 09:58

Я попробывал переопределить модуль mod_articles_latest (правильно?) с функцией предложенной "vezunchik", но модуль во-первых ругается на свойство функции publik (страницу вообще не выводит, код ошибки 0 нав не о чем). А во-вторых не очень понятно, что в итоге отображать на странице: это - getLastRecords($cnt) echo $result; ?


Sanu
Total posts: 19
21 Март 2018 09:06

День добрый! Для отображения названия последней статьи из нескольких разделов у меня получился ниже следующий код. Но я не обращался на прямую в базу данных, вероятно так было бы правильнее. Пожалуйста подскажите как по id последней статьи (ее получить у меня удалось) выгрузить из бд title и url ? Спасибо!

<?php
    $list_id = array();
    $list_title = array();
    $list_url = array();
    $list_id_title = array();
    $list_id_url = array();

    $api = new CobaltApi();

    $sec = array(
        3,
        5,
        );

    foreach ($sec as $section)
    {
        $data = $api->records(
        $section, 
        $view_what, 
        'r.ctime DESC', 
        $type_ids, 
        $user_id,
        $cat_id, 
        $limit, 
        $tpl, 
        $client, 
        $client_id, 
        $lang, 
        $ids);

        foreach ($data['list'] as $item)
        {
            $list_id[] = $item->id;
            $list_title[] = $item->title;
            $list_url[] = $item->url;

            $list_id_title = array_combine($list_id, $list_title);
            $list_id_url = array_combine($list_id, $list_url);
        }
    }

    krsort($list_id_title);
    krsort($list_id_url);

    $id_title = array_shift($list_id_title);
    $id_url = array_shift($list_id_url);


printf('<a class="uk-width-auto sd-tech-plate  uk-padding uk-padding-remove-vertical " href="/%s">%s</a>', $id_url, $id_title);
?>

Sergey
Total posts: 13,748
04 Апр 2018 06:18

pepperstreet What about single purchase of Records module? ( $10 only! )

Single purchases are no longer available sinse PayPal gateway was changed to 2CO.

Guest Для отображения названия последней статьи из нескольких разделов у меня получился ниже следующий код

Одной статьи из нескольких разделов. Или по одной из каждого?

В вашем коде не прописаны айди типов. Лимим можно сразу поставить 1.


Sanu
Total posts: 19
17 Апр 2018 08:00

Необходимо получить одну статью из нескольких разделов - которая добавлена самой последней на сайт.

Про Лимит понятно. Не прописал $type_ids , а для чего в данном случае прописывать типы контента?


Sergey
Total posts: 13,748
17 Апр 2018 14:55

Sanu Про Лимит понятно. Не прописал $type_ids , а для чего в данном случае прописывать типы контента?

Потому что Кобальт не знает какие тыпы лежат в разделе. Может это многотиповый раздел, а вам нужна статья именно конкретного типа. Так что нужно обязательно указать тип.

Sanu Необходимо получить одну статью из нескольких разделов - которая добавлена самой последней на сайт.

Вот это я вообще не понял. Невозможно положить статью в несколько разделов сразу. Как же ее вытащить тогда?


Sanu
Total posts: 19
16 Май 2018 11:31

>

Вот это я вообще не понял. Невозможно положить статью в несколько разделов сразу. Как же ее вытащить тогда?

Есть несколько разных разделов с разнымы статьями. Так вот я хотел получить одну статью из этих всех разделов самую последнюю добавленную на сайт.

Работает на Cobalt