Russian TYPO3 community

Russian TYPO3 community (http://forum.typo3.ru/index.php)
-   TypoScript практикум (http://forum.typo3.ru/forumdisplay.php?f=27)
-   -   Подсчет и вывод записей в текущей категории средствами typoscript (http://forum.typo3.ru/showthread.php?t=9461)

thebat 09.05.2011 17:50

Подсчет и вывод записей в текущей категории средствами typoscript
 
И так начну описывать задачу.
Есть три категории новостей в этих трёх категориях есть по несколько десятков записей новостей.
Вывод на странице делается базовыми средствами расширения. Вставил элемент контента "tt_news", код вывода "LATES", количество строк 3

На выводе имеем:
==================
[Категория 1]
[Заголовок 1]
[короткое описание 1]
-----------------------
[Категория 2]
[Заголовок 2]
[короткое описание 2]
-----------------------
[Категория 3]
[Заголовок 3]
[короткое описание 3]
==================
Все записи >>>

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

plugin.tt_news.categoryTitles_stdWrap.wrap = | [Количество записей]

Для начало записал TS во так:
displayLatest {
categoryTitles_stdWrap {
append = CONTENT
append {
stdWrap.numRows {
table = tt_news [таблица с записами]
select.pidInList = 1 [место где есть записи]
}
}
}
category_stdWrap.wrap = |
}

На выводе имеем:
-----------------------
[Категория 3] [Количество записей]
[Заголовок 3]
[короткое описание 3]
==================
Все записи >>>

Все кажется хорошо, но возле каждой категории одинаковое количество записей подсчитанных и выведенных из [место где есть записи]. В то время как к каждой категории привязано резное количество записей.

Стал вопрос, как вывести количество записей привязных к текущей категории выведенных в списке последних записей?

К примеру вот так:
==================
[Категория 1] [Количество записей 10]
[Заголовок 1]
[короткое описание 1]
-----------------------
[Категория 2] [Количество записей 45]
[Заголовок 2]
[короткое описание 2]
-----------------------
[Категория 3] [Количество записей 5]
[Заголовок 3]
[короткое описание 3]
==================
Все записи [Количество записей 60] >>>

Понимаю, что нужно воспользоваться свойством "andWhere" или "where", но как не знаю?

Есть у кого либо какие то идеи?

thebat 15.05.2011 18:12

..., и так стало понятно, что вариантов пока нет! Может кто направит в нужное русло?

-=UncleByte=- 16.05.2011 01:20

А описанный в TSRef select для CONTENT не подойдет разве? В нем как раз есть и where и andwhere.

thebat 16.05.2011 01:48

Да, я знаю об этих свойствах, но не могу построить подходящую конструкцию (запрос) и не знаю как их можно использовать в моем случае?

-=UncleByte=- 16.05.2011 02:25

Логично делать запрос к таблице новостей с условиями типа категория = 1 и новость не удалена и не спрятана:
Что-то типа
Код:

SELECT *
FROM `tt_news`
WHERE `deleted` =0
AND `hidden` =0
AND `category` =2


thebat 16.05.2011 22:58

Не выходит что-то у меня. Может давайте сложим в месте эту конструкцию?
К примеру:
=========
10 = CONTENT
10 {
table = tt_news # таблица с записями новостей
select {
selectFields = ??? # здесь не ясно что... возможно выделить столбец "category"
join = ??? # с этим я не знаю что делать
where = tt_news.deleted = 0 AND tt_news.hidden = 0 # учитывать все записи у кого 0 (то есть видна и не удалена), а если 1 и другое, то не учитывать.
andWhere {
dataWrap = tt_news.category = {field:uid} # текущая категория ...???
}
}
}

-=UncleByte=- 17.05.2011 03:12

Насколько я понимаю для подсчета нужно использовать count(*). Т.е. сгруппировать по полю category и потом посчитать по нему же. Как-то так.

thebat 17.05.2011 09:53

Отлично..., теперь у нас есть во это:

10 = CONTENT
10 {
table = tt_news # таблица с записями новостей
select {
pidInList = 1 # место где содержатся записи
selectFields = count(*) # выделить все записи в таблице "tt_news"
where = tt_news.deleted = 0 AND tt_news.hidden = 0 # учитывать все записи у кого 0 (то есть видна и не удалена), а если 1 и другое, то не учитывать.
andWhere {
dataWrap = tt_news.category = {field:uid} # текущая категория ...???
}
groupBy = tt_news.category # группировать по категории ...правильно ли?
}
}

Первое, нужно же определить текущую категорию и наверное составить условия ..., если совпадаю текущая категория с выделенной (найденной) в таблицей, то посчитать и показать возле текущей категории..., правильно ли я мыслю?

-=UncleByte=- 17.05.2011 12:21

Мне так кажется что не нужно каждый раз указывать полное имя таблица.поле, т.е. получается что-то типа:
Код:

10 = CONTENT
10 {
  table = tt_news
  select {
    pidInList = 1
    selectFields = count (*) category
    where = NOT deleted AND NOT hidden
    groupBy = category
...
  }
}

Вот что должно быть на месте многоточия я пока еще не думал и не придумал.

thebat 17.05.2011 18:39

Нет, мы не там копаем.

Я обследовал таблицу "tt_new" и заметил, что поле "category" не содержит "uid" категории, выходит, что мы не можем таким образом отфильтровать записи определенной категории и вывести их количество.

Это означает, что нам надо взяться за таблицу "tt_news_cat"


Часовой пояс GMT +4, время: 17:05.

Работает на vBulletin® версия 3.8.1.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot