Статьи в нескольких категориях

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО

неправильно работает функция getArticlesCount

#1 31 декабря 2013 в 01:21
Не помню откуда ставил возможность для InstantCMS v1.9, чтобы статья была сразу в нескольких категориях.
Там вроде добавлял таблицу cms_content_cats (поля item_id, сategory_id, ordering) и вносились изменения в код в model.php в /components/content и др.файлах.
Работает. Размещает и выводит одну статью в нескольких категориях.

Но сейчас столкнулся с тем, что по-видимому неправильно работает функция:

  1. public function getArticlesCount($only_published=true) {
  2. $articles = array();
  3. $today = date("Y-m-d H:i:s");
  4. if ($only_published){
  5. $this->where("con.published = 1 AND con.pubdate <= '$today'
  6. AND (con.is_end=0 OR (con.is_end=1 AND con.enddate >= '$today'))");
  7. }
  8. $sql = "SELECT 1
  9. FROM cms_content con
  10. WHERE con.is_arhive = 0
  11. {$this->where}
  12. {$this->group_by}
  13. {$this->order_by}\n";
  14. $result = $this->inDB->query($sql);
  15. return $this->inDB->num_rows($result);
  16. }
так как в неё вроде изменения не вносились и она не учитывает количество всех статей, а учитывает статьи только из основной категории, из-за этого неправильно работает разбивка на страницы, не учитывает статьи во всех категориях, а учитывает только из основной, то есть
$total = $model->getArticlesCount(); — не получает правильное значение $total
и далее $pagebar = cmsPage::getPagebar($total, $page, $perpage, $pagelink); — не формирует разбивку на страницы, если статей больше чем $perpage, так как получает значение $total меньшее чем нужно.

Изменения в функции GetArticles там были такие:
было

  1. $sql = "SELECT con.*,
  2. con.pubdate as fpubdate,
  3. u.nickname as author,
  4. u.login as user_login
  5. FROM cms_content con
  6. LEFT JOIN cms_users u ON u.id = con.user_id
  7. WHERE con.category_id = '$category_id' AND con.published = 1 AND con.is_arhive = 0 AND con.pubdate <= '$today'
  8. AND (con.is_end=0 OR (con.is_end=1 AND con.enddate >= '$today'))
  9. ORDER BY con.".$orderby." ".$orderto."
  10. LIMIT ".(($page-1)*$perpage).", $perpage";
стало

  1. $sql = "SELECT
  2. con.*,
  3. con.pubdate AS fpubdate,
  4. u.nickname AS author,
  5. u.login AS user_login
  6. FROM
  7. cms_content con
  8. LEFT JOIN cms_content_cats cat
  9. ON con.id = cat.item_id
  10. LEFT JOIN cms_users u
  11. ON con.user_id = u.id
  12. WHERE
  13. con.published = 1
  14. AND con.is_arhive = 0
  15. AND (con.is_end=0 OR (con.is_end=1 AND con.enddate >= '$today' AND con.pubdate <= '$today'))
  16. AND (con.category_id=$category_id OR cat.category_id =$category_id)
  17. GROUP BY con.id
  18. ORDER BY con.".$orderby." ".$orderto."
  19. LIMIT ".(($page-1)*$perpage).", $perpage";

Вот нужно и в getArticlesCount как-то учесть и те статьи, указанные в таблице cms_content_cats, для которых эта категория не является основной.

Прошу помочь, готов работу оплатить WebMoney.
#2 31 декабря 2013 в 02:39
В общем вроде сделал, не уверен что правильно, вроде заработало.

в файле model.php в функции getArticlesCount добавил строчки после строки 9. FROM cms_content con
  1. LEFT JOIN cms_content_cats cat
  2. ON con.id = cat.item_id
чтобы считать статьи и из cms_content_cats

и в этом же файле функцию whereCatIs заменил на
  1. public function whereCatIs($category_id) {
  2. $this->where("con.category_id = {$category_id} OR cat.category_id = {$category_id}");
  3. }
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.