Короткие теги

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Joseph Jevelin
Сообщения: 339
Зарегистрирован: 2012.01.06, 22:07

Короткие теги

Сообщение Joseph Jevelin »

Есть тег "W". Если искать материалы по этому тегу (демо-блог), то выводятся все, что имеют букву "W" в столбце "tags". Кто-нибудь находил решение этого дела?

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

Код: Выделить всё

if(isset($_GET['tag']))
{
    $tag=$mTag->searchName($_GET['tag']);

    if($tag===null)
        throw new CHttpException(404,'Запрошенная страница не существует.');
    else
        $criteria->addSearchCondition('tags',$tag);
} 

Код: Выделить всё

$dataProvider=new CActiveDataProvider('Post',array(
    'pagination'=>array(
        'pageSize'=>Yii::app()->controller->module->content_page_size,
    ),
    'criteria'=>$criteria,
)); 
andrew911
Сообщения: 60
Зарегистрирован: 2011.05.30, 23:45

Re: Короткие теги

Сообщение andrew911 »

Код: Выделить всё

PostController.php

public function actionIndex()
{
.....
    
if(isset($_GET['tag']))
    $criteria->addSearchCondition('tags',$_GET['tag']);
 
addSearchCondition посмотрите как работает метод.
Joseph Jevelin
Сообщения: 339
Зарегистрирован: 2012.01.06, 22:07

Re: Короткие теги

Сообщение Joseph Jevelin »

Забыл, чуть-чуть модифицировал)

К сожалению, API не помогло...

Суть поиска - искать абсолютно любое совпадение в столбце таблицы. Но, мне это не подходит. Мне нужно по полным словам.
Вытащить всю строку, разделить на массив (значения без запятых) и addCondition?
Аватара пользователя
because
Сообщения: 689
Зарегистрирован: 2010.09.30, 22:01

Re: Короткие теги

Сообщение because »

что такое короткие и полные теги ? как вы их разделили ?
RTFM !
Joseph Jevelin
Сообщения: 339
Зарегистрирован: 2012.01.06, 22:07

Re: Короткие теги

Сообщение Joseph Jevelin »

etc.
Тема:
Q (журнал)
Описание:
Q — британский музыкальный журнал-ежемесячник с тиражом 130 179 (на июнь 2007 года), основанный в 1986 году Марком Элленом (англ. Mark Ellen) и Дэвидом Хепуортом (англ. David Hepworth)...
Теги:
Q, Марк Эллен, Дэвид Хепуорт
В БД соответственно title, discription, tags (q, mark ellen, david hepworth). При поиске по тегу "q", в выборку будет входить не только данный материал, но и публикации, в тегах которых есть хотя бы одна буква "q".

Первый тег - короткий. Два последние - наоборот (длинные слова).
chelishchevi
Сообщения: 86
Зарегистрирован: 2011.11.03, 15:34
Откуда: Калининград

Re: Короткие теги

Сообщение chelishchevi »

Странные желания какие-то.
Добавляйте проверку на пробел и другие разделители, например, через регулярные выражения в СУБД или хранимые процедуры.

Либо добавьте в структуру таблицы тега свойство, определяющее короткость.
Joseph Jevelin
Сообщения: 339
Зарегистрирован: 2012.01.06, 22:07

Re: Короткие теги

Сообщение Joseph Jevelin »

chelishchevi писал(а):Странные желания какие-то.
Добавляйте проверку на пробел и другие разделители, например, через регулярные выражения в СУБД или хранимые процедуры.

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

А как это поможет при поиске мне нужного тега?
БД. Поиск совпадений в post.tags по q, которое имеет в tag.length = 1. Или, видимо я не понимаю чего-то)
Аватара пользователя
Ryadnov
Сообщения: 456
Зарегистрирован: 2010.06.20, 00:38
Откуда: Санкт-Петербург

Re: Короткие теги

Сообщение Ryadnov »

А такое решение вам чем не приглянулось? https://github.com/yiiext/taggable-behavior
andrew911
Сообщения: 60
Зарегистрирован: 2011.05.30, 23:45

Re: Короткие теги

Сообщение andrew911 »

$criteria->addSearchCondition('tags',$_GET['tag']);
ищет как LIKE, вам надо всего лишь поменять критерий на строгое равенство
Joseph Jevelin
Сообщения: 339
Зарегистрирован: 2012.01.06, 22:07

Re: Короткие теги

Сообщение Joseph Jevelin »

andrew911 писал(а):$criteria->addSearchCondition('tags',$_GET['tag']);
ищет как LIKE, вам надо всего лишь поменять критерий на строгое равенство
Значение = Значение в столбце? В таком случае выводит лишь те материалы, где столбец tags заполнен лишь одним заданным тегом.

Например:
id=1; tags="joseph jevelin, andrew911"
id=2; tags = "andrew911"
id=3; tags = "e"
id=4; tags = "e, ryadnov"

При поиске по тегу "e" (строгое равенство) на выводе будет материал с айдишником 3. А мне нужны 3 и 4. Сейчас выводит все четыре, по этому примеру)
Аватара пользователя
because
Сообщения: 689
Зарегистрирован: 2010.09.30, 22:01

Re: Короткие теги

Сообщение because »

теги можно хранить в отдельной таблице, на каждый тег - отдельная запись
RTFM !
Joseph Jevelin
Сообщения: 339
Зарегистрирован: 2012.01.06, 22:07

Re: Короткие теги

Сообщение Joseph Jevelin »

Ryadnov, because, спасибо! О тегах, которые привязаны к айдишнику материала - думал. Но, у меня уже порядка 150 записей. Не хотелось бы полностью архитектуру переделывать... Но, видимо, других вариантов у меня нет)
andrew911
Сообщения: 60
Зарегистрирован: 2011.05.30, 23:45

Re: Короткие теги

Сообщение andrew911 »

Joseph Jevelin писал(а): Значение = Значение в столбце? В таком случае выводит лишь те материалы, где столбец tags заполнен лишь одним заданным тегом.

Например:
id=1; tags="joseph jevelin, andrew911"
id=2; tags = "andrew911"
id=3; tags = "e"
id=4; tags = "e, ryadnov"

При поиске по тегу "e" (строгое равенство) на выводе будет материал с айдишником 3. А мне нужны 3 и 4. Сейчас выводит все четыре, по этому примеру)
А, извиняюсь, забыл как там устроено.
Там, имхо, неоптимально сделано, поэтому я переделывал под отдельную таблицу с тегом.

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

Но вариант с отдельной таблицей гибче и удобнее - можно запрсото переименовывать например тег и тп.
Ответить