Вход • Регистрация

Количество комментариев

  • 28 декабря 2014 г.
  • Подскажите как вывести количество комментариев у товаров? Для версии 5,2 нашел, а для 5,4 информации нету. Может кто подскажет?
  • 24 января 2015 г. , редакция: 24 января 2015 г.
  • Вопрос к знатокам, в статье количество комментариев выводится.
    Добавил следующий запрос
    Код
    $this->result["comments_cnt"] = DB::query_result("SELECT COUNT(id) FROM {comments} WHERE module_name='clauses' AND element_id=%d AND trash='0'", $row["id"] );
    в модель в функцию function id(); Здесь все обрабатывается верно.

    Теперь стоит задача вывести количество комментариев в анонсе, и тут у меня засада; Тот же запрос добавляю в модель в функцию function list_category_elements_query В результате при выводе количество комментариев получаю 0. И висит ошибка что не передано значение в $row["id"]. Если прописать принудительно id страницы, то количество комментов выводистя. Вопрос, как передать значение в $row["id"]?

    Хотя если посмотреть массив через
    Код
    print_r($result["rows"]);
    , то там видно что id имеет значение
    • 24 января 2015 г.
    • всю функцию покажите
      • 24 января 2015 г.
      • Код
        private function list_category_elements_query($time, $cat_ids)
        {
        $rows = DB::query_range_fetch_all(
        "SELECT e.id, e.[name], e.timeedit, e.[anons], e.cat_id, e.site_id, e.created FROM {clauses} AS e"
        .($this->diafan->_users->role_id ? " LEFT JOIN {access} AS a ON a.element_id=e.id AND a.module_name='clauses' AND a.element_type='element'" : "")
        ." INNER JOIN {clauses_category_rel} AS r ON e.id=r.element_id AND r.cat_id IN (%s)"
        ." WHERE e.[act]='1' AND e.trash='0' AND e.created<%d"
        ." AND e.date_start<=%d AND (e.date_finish=0 OR e.date_finish>=%d)"
        ." AND (e.access='0'"
        .($this->diafan->_users->role_id ? " OR e.access='1' AND a.role_id=".$this->diafan->_users->role_id : '')
        .")"
        ." GROUP BY e.id ORDER BY e.sort DESC, e.id DESC",
        implode(',', $cat_ids), $time, $time, $time,
        $this->diafan->_paginator->polog, $this->diafan->_paginator->nastr
        );

        $this->result["comments_cnt"] = DB::query_result("SELECT COUNT(id) FROM {comments} WHERE module_name='clauses' AND element_id=%d AND trash='0'", $row["id"] );

        return $rows;


        }
  • 24 января 2015 г. , редакция: 24 января 2015 г.
  • Для тех кто тоже захочет вывести количество комментариев в анонсе, рабочий код. (не рабочий)

    Код
    private function list_category_elements_query($time, $cat_ids)
    {
    $rows = DB::query_range_fetch_all(
    "SELECT e.id, e.[name], e.timeedit, e.[anons], e.cat_id, e.site_id, e.created FROM {clauses} AS e"
    .($this->diafan->_users->role_id ? " LEFT JOIN {access} AS a ON a.element_id=e.id AND a.module_name='clauses' AND a.element_type='element'" : "")
    ." INNER JOIN {clauses_category_rel} AS r ON e.id=r.element_id AND r.cat_id IN (%s)"
    ." WHERE e.[act]='1' AND e.trash='0' AND e.created<%d"
    ." AND e.date_start<=%d AND (e.date_finish=0 OR e.date_finish>=%d)"
    ." AND (e.access='0'"
    .($this->diafan->_users->role_id ? " OR e.access='1' AND a.role_id=".$this->diafan->_users->role_id : '')
    .")"
    ." GROUP BY e.id ORDER BY e.sort DESC, e.id DESC",
    implode(',', $cat_ids), $time, $time, $time,
    $this->diafan->_paginator->polog, $this->diafan->_paginator->nastr
    );

    $this->result["comments_cnt"] = DB::query_result("SELECT COUNT(id) FROM {comments} WHERE module_name='clauses' AND element_id=%d AND trash='0'", $rows[0]["id"] );
    return $rows;
    }
    • 24 января 2015 г.
    • не может этот код быть рабочим.
      то есть он работать будет, наверное, но н правильно.
      $row[0] - это лишь первая запись, вам скорее всего нужно количество по всем ?
      • 24 января 2015 г.
      • Мне нужно количество по конкретной записи, те на странице если выводится 10 анонсов, то нужно чтобы считалось у каждой записи сколько комментариев и выводилось. Сейчас так и делается.
        • 24 января 2015 г.
        • Да действительно криво работает:(
          • 24 января 2015 г. , редакция: 24 января 2015 г.
          • private function list_category_elements_query($time, $cat_ids)
            {
            $rows = DB::query_range_fetch_all(
            "SELECT e.id, e.[name], e.timeedit, e.[anons], e.cat_id, e.site_id, e.created, count(c.id) as cnt FROM {clauses} AS e"
            .($this->diafan->_users->role_id ? " LEFT JOIN {access} AS a ON a.element_id=e.id AND a.module_name='clauses' AND a.element_type='element'" : "")
            ." INNER JOIN {clauses_category_rel} AS r ON e.id=r.element_id AND r.cat_id IN (%s)"
            ." INNER JOIN {comments} с on c.element_id=e.id" // новая строка
            ." WHERE e.[act]='1' AND e.trash='0' AND e.created<%d"
            ." AND c.trash='0' AND c.module_name='clauses'" // новая строка
            ." AND e.date_start<=%d AND (e.date_finish=0 OR e.date_finish>=%d)"
            ." AND (e.access='0'"
            .($this->diafan->_users->role_id ? " OR e.access='1' AND a.role_id=".$this->diafan->_users->role_id : '')
            .")"
            ." GROUP BY e.id ORDER BY e.sort DESC, e.id DESC",
            implode(',', $cat_ids), $time, $time, $time,
            $this->diafan->_paginator->polog, $this->diafan->_paginator->nastr
            );

            return $rows;
            }

            примерно так.
            к rows[*]["cnt"] будет чего надо, если нигде не ошибся
  • 24 января 2015 г.
  • Если во вьюху сунуть
    Код
    $comments_cnt = DB::query_result("SELECT COUNT(id) FROM {comments} WHERE module_name='clauses' AND element_id=%d AND trash='0'", $row["id"] );
    и вывести $comments_cnt, то отрабатывает все отлично. Но во вьюхе не хочется обращаться к БД, хостелось бы через модель вывести.
    А в ней засада, не передается $row["id"]
    • 26 января 2015 г.
    • А почему "не хочется"? Какая разница? Это ж Ваш проект.

      Если в модельку идти, то то же самое, только все данные передаются через result.
      Где-нибудь в цикле набиваете массив $comments_cnt
      Затем перед закрытием функции, где присваиваются всякие $this->result["***"] приписываете
      $this->result["comments_cnt"] = $comments_cnt;

      А во вьюхе уже рядом со всеми result забираете

Новости

  • 18 июня
  • В сборке большое обновление demo-шаблона, дополнительная защита от спама, улучшение YML-импорта и еще много важного и интересного.
  • 24 апреля
  • В новой сборке совершили революцию в структурировании кастомизированной информации в шаблонах, добавили авторегистрацию пользователей, усовершенствовали защиту от спама, актуализировали накопительную скидку, а также улучшили производительность и стабильность работы системы.
  • 12 января
  • После выхода сборки 7.1 мы выпустили уже три патча, в каждом из которых улучшаем административную часть сайта. Сборка DIAFAN.CMS 7.1.3 уже доступна к установке. 

Форум