Перейти к содержимому


Фотография
- - - - -

Отобразить теги которые использует автор

tag

Лучший Ответ CB9TOIIIA , 22 June 2016 - 21:52

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

 
afef9c53b6f5b97f1a407783366d3a1a.jpg
$querycounttagalltags = "SELECT  name FROM " . ZOO_TABLE_TAG ."";

//  Получаем все теги по полученным id материал
$tagsArraytagalltags = array_unique($this->app->table->tag->database->queryResultArray($querycounttagalltags));
//jbdump($tagsArraytagalltags,0,'Все теги');
//echo implode(', ', $tagsArraytagalltags);

foreach ($tagsArraytagalltags as $tag) {
    // jbdump($tagsArraytagalltags,0,'dsadasd');
    //jbdump($tag,0,'Тег и кол-во');

    $querycounttagalltagss = "SELECT COUNT(name) FROM " . ZOO_TABLE_TAG ." WHERE name = '$tag' GROUP BY name";
    $tagsArraytagalltagss = array_unique($this->app->table->tag->database->queryResultArray($querycounttagalltagss));

    //jbdump($tagsArraytagalltagss,0,'Всего тег был использован: ');

    echo '<a href="' . JRoute::_($this->app->route->tag($appId, $tag)) . '">' . $tag . '</a>' .' - '. $tagsArraytagalltagss[0].', ';
}

пашет :) Перейти к сообщению


  • Закрытая тема Тема закрыта
Сообщений в теме: 12

#1 CB9TOIIIA

CB9TOIIIA

Отправлено 10 June 2016 - 14:20

Всем привет! Как можно реализовать следующее:

Есть например 100 статей от 5 авторов.

 

1 пишет про еду: ставит теги, макароны, котлеты, борщ, суп

2 пишет про погоду: солнце, снег, лужи

3 пишет про одежду: рубашка, шорты

........

........

 

Суть в чем: как можно у автора например 1: вывести на его страничке (просто jbzoo item) - какие он использует теги в своих статьях?

 

Я так понимаю, можно узнать ID автора - далее по ID найти его статьи - далее у статей можно найти теги к ним... но потом как эту кашу переварить + убрать дубли + наиболее используемые показать например только...


  • 0

#2 Cheren-dow

Cheren-dow

Отправлено 11 June 2016 - 14:10

CB9TOIIIA, рабочее решение будет следующее:

$db     = JFactory::getDBO();
/**
 * Текущий юзер, если карточка юзера это материал тогда подставь значение где хранится id пользователя
 * Сделал пример от авторизованного.
 */
$user   = JFactory::getUser();
$userId = $user->get('id');
$appId  = 1;

//  Выбираем id всех объектов пользователя
$query = $db->getQuery(true);
$query
    ->select($db->quoteName('id'))
    ->from($db->quoteName(ZOO_TABLE_ITEM))
    ->where($db->quoteName('created_by') . ' = ' . $db->quote($userId));

$db->setQuery($query);
$itemIdsResult = $db->loadObjectList();

//  Собираем массив id материалов
$itemIds = array();
foreach ($itemIdsResult as $it) {
    $itemIds[] = $it->id;
}

$query = "SELECT name"
    ." FROM " . ZOO_TABLE_TAG
    ." WHERE item_id IN (" . implode(', ', $itemIds) . ")";

//  Получаем все теги по полученным id материал
$tagsArray = $this->app->table->tag->database->queryResultArray($query);

//   Убираем дубли и строим ссылку
$currentTags = array();
foreach ($tagsArray as $tag) {
    if (!in_array($tag, $currentTags)) {
        $currentTags[] = '<a href="' . JRoute::_($this->app->route->tag($appId, $tag)) . '">' . $tag . '</a>';
    }
}

echo implode(', ', $currentTags);

Главное id пользователя верный подставлять, что бы по его материалам искались теги.


  • 3
Изображение
 

#3 CB9TOIIIA

CB9TOIIIA

Отправлено 11 June 2016 - 15:29

Вроде отлично. Но дубли - дубли... я потом сделаю элемент в маркетплейс :)


  • 0

#4 Cheren-dow

Cheren-dow

Отправлено 11 June 2016 - 15:45

Но дубли - дубли

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


  • 0
Изображение
 

#5 CB9TOIIIA

CB9TOIIIA

Отправлено 11 June 2016 - 15:49

Вот так норм вариант? пашет:


//   Убираем дубли и строим ссылку
$currentTags = array();
$tagsArray = array_unique($tagsArray);

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

 

дубли тегов - ну повторы tag :)



//  Выбираем id всех объектов пользователя
$query = $db->getQuery(true);
$query
    ->select($db->quoteName('id'))
    ->from($db->quoteName(ZOO_TABLE_ITEM))
    ->where($db->quoteName('created_by') . ' = ' . $db->quote($userId));

$db->setQuery($query);
$itemIdsResult = $db->loadObjectList();

//  Собираем массив id материалов
$itemIds = array();
foreach ($itemIdsResult as $it) {
    $itemIds[] = $it->id;
}

$query = "SELECT name"
    ." FROM " . ZOO_TABLE_TAG
    ." WHERE item_id IN (" . implode(', ', $itemIds) . ")";

//  Получаем все теги по полученным id материал
$tagsArray = $this->app->table->tag->database->queryResultArray($query);

//   Убираем дубли и строим ссылку
$currentTags = array();
$tagsArray = array_unique($tagsArray);

foreach ($tagsArray as $tag) {
    if (!in_array($tag, $currentTags)) {

        $currentTags[] = '<a href="' . JRoute::_($this->app->route->tag($appId, $tag)) . '">' . $tag . '</a>';
    }
}

echo implode(', ', $currentTags);
echo ' '.count($currentTags);

  • 0

#6 Cheren-dow

Cheren-dow

Отправлено 11 June 2016 - 18:18

CB9TOIIIA, вот так по идее не должно быть дублей:

//  Выбираем id всех объектов пользователя
$query = $db->getQuery(true);
$query
    ->select($db->quoteName('id'))
    ->from($db->quoteName(ZOO_TABLE_ITEM))
    ->where($db->quoteName('created_by') . ' = ' . $db->quote($userId));

$db->setQuery($query);
$itemIdsResult = $db->loadObjectList();

//  Собираем массив id материалов
$itemIds = array();
foreach ($itemIdsResult as $it) {
    $itemIds[] = $it->id;
}

$query = "SELECT name"
    ." FROM " . ZOO_TABLE_TAG
    ." WHERE item_id IN (" . implode(', ', $itemIds) . ")";

//  Получаем все теги по полученным id материал
$tagsArray = array_unique($this->app->table->tag->database->queryResultArray($query));

$currentTags = array();
foreach ($tagsArray as $tag) {
    $currentTags[] = '<a href="' . JRoute::_($this->app->route->tag($appId, $tag)) . '">' . $tag . '</a>';
}

echo implode(', ', $currentTags);

Сообщение отредактировал Cheren-dow: 11 June 2016 - 18:18

  • 2
Изображение
 

#7 CB9TOIIIA

CB9TOIIIA

Отправлено 11 June 2016 - 21:16

Вроде пашет :) Спасибо, раз тема тегов: "количество текстов связанных с тегом" - т.е. кол-во статей сколько раз он ВООБЩЕ был использован, такое есть или нет?


  • 0

#8 Cheren-dow

Cheren-dow

Отправлено 11 June 2016 - 22:17

Вроде пашет Спасибо, раз тема тегов: "количество текстов связанных с тегом" - т.е. кол-во статей сколько раз он ВООБЩЕ был использован, такое есть или нет?

Готового нет, сделать можно, нужно запросы делать в БД. По аналогии но только для столбца name использовать оператор LIKE.

fuj6_200x0.png  


  • 2
Изображение
 

#9 Cheren-dow

Cheren-dow

Отправлено 11 June 2016 - 22:22

Запрос на произвольный тег для получения количества:

j87r_200x0.png


  • 2
Изображение
 

#10 CB9TOIIIA

CB9TOIIIA

Отправлено 12 June 2016 - 14:54

$querycounttag = "SELECT COUNT(name) FROM " . ZOO_TABLE_TAG ."  WHERE name = 'МОЙ_ТЕГ';";

$tagsArraytag = $this->app->table->tag->database->queryResultArray($querycounttag);
jbdump($tagsArraytag,0,'МОЙ_ТЕГ');
echo implode(', ', $tagsArraytag);

Потом подумаю как получить все теги (или нужны ли все теги мне) - потом уже кол-во посчитать :)

 

Вообще у меня просили типо сколько раз автора использовал теги (но я так понимаю такой инфы вообще нет) - или же выборку  Автор: Даша - тег: котлеты  - отобразить статьи Даши с тегом котлеты... такое же нереально? или как-то можно.


  • 0





Темы с аналогичным тегами tag

Click to return to top of page in style!