yii2-blog icon indicating copy to clipboard operation
yii2-blog copied to clipboard

Удаление тегов

Open nikdenly opened this issue 7 years ago • 3 comments
trafficstars

public static function removeTags($tags)
    {
        if(empty($tags))
            return;
        
        BlogTag::updateAllCounters(['frequency' => 1], 'name in ("' . implode ( '"," ', $tags) . '")');
        BlogTag::deleteAll('frequency <= 0');
    }

получается, что при удалении тега, частотность увеличивается на 1. А должна уменьшаться: ['frequency' => -1] Но даже в этом случае уменьшается только удин тег. Если удалить сразу два тега, то частотность уменьшится только у первого. Как решение, вызывать для каждого тега в foreach?

foreach ($tags as $tag) {
      BlogTag::updateAllCounters(['frequency' => -1], 'name in ("' . $tag . '")');
}

Кстати, плюсуется тоже только один тег.

nikdenly avatar Jun 25 '18 10:06 nikdenly

Да, систему тегов не трогали с момента их создания китайцем 3 года назад. надо исправлять. Если вдруг исправили, можете написать тут или пуллреквестить)

akiraz2 avatar Aug 03 '18 13:08 akiraz2

В функции public static function removeTags($tags) Вместо BlogTag::updateAllCounters(['frequency' => 1], 'name in ("' . implode ( '"," ', $tags) . '")'); Используем (с минусом) foreach ($tags as $tag) { BlogTag::updateAllCounters(['frequency' => -1], 'name in ("' . $tag . '")'); }

Аналогично в функции увеличения счетчика тэгов (сейчас не у компа, не помню название) Вместо BlogTag::updateAllCounters(['frequency' => 1], 'name in ("' . implode ( '"," ', $tags) . '")'); Используем (с плюсом) foreach ($tags as $tag) { BlogTag::updateAllCounters(['frequency' => 1], 'name in ("' . $tag . '")'); }

nikdenly avatar Aug 03 '18 14:08 nikdenly

Куда сложнее для меня оказалась вторая проблема с отсутствием фильтрации по тегу (нажал на тег - получил все записи с тегом). Пытался забирать из GET, но тогда почему-то это отрабатывается и в других ситуациях(

nikdenly avatar Aug 03 '18 14:08 nikdenly