Next Generation CMS :: Форум поддержки

Заинтересовала наша система? Тогда этот форум для Вас!

Вы не зашли.

#1 2012-01-14 21:10:55

t3s
Участник
Откуда планета The мля...
Зарегистрирован: 2009-04-09
Сообщений: 228
Рейтинг :   13 
Сайт

как получить категорию в плагине

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

		$cats_select = 'AND catid LIKE ';
		$cats_select .= db_squote('%'.$get_cats.'%');

но надеюсь что имеется готовый вариант для категорий


Проекты любой сложности. Качественно. Дорого.

Не в сети

#2 2012-01-14 21:17:09

Wolverine
Модератор
Откуда Домодедово
Зарегистрирован: 2008-10-13
Сообщений: 3,538
Рейтинг :   160 
Сайт

Re: как получить категорию в плагине

Я не понял вопроса neutral

Не в сети

#3 2012-01-14 21:18:19

t3s
Участник
Откуда планета The мля...
Зарегистрирован: 2009-04-09
Сообщений: 228
Рейтинг :   13 
Сайт

Re: как получить категорию в плагине

есть ли у движка готовая функция для вывода категорий?


Проекты любой сложности. Качественно. Дорого.

Не в сети

#4 2012-01-14 21:19:54

Wolverine
Модератор
Откуда Домодедово
Зарегистрирован: 2008-10-13
Сообщений: 3,538
Рейтинг :   160 
Сайт

Re: как получить категорию в плагине

Вывода где? В новостях? На главной? Вывода чего? ID, ссылок на категории, их названий?

Не в сети

#5 2012-01-14 21:38:25

t3s
Участник
Откуда планета The мля...
Зарегистрирован: 2009-04-09
Сообщений: 228
Рейтинг :   13 
Сайт

Re: как получить категорию в плагине

где - в плагине
чего - ид


Проекты любой сложности. Качественно. Дорого.

Не в сети

#6 2012-01-14 21:42:21

Wolverine
Модератор
Откуда Домодедово
Зарегистрирован: 2008-10-13
Сообщений: 3,538
Рейтинг :   160 
Сайт

Re: как получить категорию в плагине

Если ты говоришь про новостной фильтр, то переменная $SQLnews содержит весь список полей БД для конкретной новости. В том числе и поле catid.

Не в сети

#7 2012-01-14 21:44:02

Wolverine
Модератор
Откуда Домодедово
Зарегистрирован: 2008-10-13
Сообщений: 3,538
Рейтинг :   160 
Сайт

Re: как получить категорию в плагине

Или переменная $SYSTEM_FLAGS['news']['db.categories'] доступная везде

Не в сети

#8 2012-01-14 22:48:04

t3s
Участник
Откуда планета The мля...
Зарегистрирован: 2009-04-09
Сообщений: 228
Рейтинг :   13 
Сайт

Re: как получить категорию в плагине

catid это не совсем то - когда материал размещен в неск. категориях, то они выводятся в том порядке, в каком были нажаты "галочки" в админке
например 40,3,10 - "главная" которая мне нужна это 10

я могу взять такую новость, используя LIKE в запросе, как в первом посте - но во-первых это выполняется дольше, а во-вторых кроме категории 10 будет получена категория 100 или 110, и т.д. - т.е. все где имеется 10

блин, возможно плохо спрашиваю - мне нужно получить лишь те материалы, для которых категория с ид 10 является корневой
причем желательно не зависеть от того, что записано в catid - либо 40,3,10 либо 10,3,40 либо просто 10


$SYSTEM_FLAGS['news']['db.categories'] работает только в новостях? в страницах, созданных плагином ее использование возможно? или она не подойдет под мою задачу?

Изменено t3s (2012-01-14 22:49:40)


Проекты любой сложности. Качественно. Дорого.

Не в сети

#9 2012-01-14 23:39:38

Wolverine
Модератор
Откуда Домодедово
Зарегистрирован: 2008-10-13
Сообщений: 3,538
Рейтинг :   160 
Сайт

Re: как получить категорию в плагине

$SYSTEM_FLAGS['news']['db.categories'] содержит тоже, что и catid, доступна только на странице новости. Не подходит.

мне нужно получить лишь те материалы, для которых категория с ид 10 является корневой

во, теперь понял.

Сейчас ты хочешь сказать, что главная категория может быть в любом месте и не обязательно на первом? Если да, то это косяк, как по мне, главная должна быть первой обязательно.

Можно просто новостную организацию улучшить. Есть категории у которых есть дочки, при этом сами они не дочки, а сами по себе, они могут быть только главными.

Например, главная ID = 3. У дочки родитель эта категория и сама она имеет ID = 10. Тогда можно сделать запрос к таблице news_map и все новости с категорией ID = 3 и будут нужными тебе, гарантированно главные. То есть не допускать ситуацию, когда категория может быть и главной и дочкой одновременно.

Если это не подходит:

1. Если главная пляшет как сейчас, то в середине, то в начале, то только использовать LIKE, иначе никак. Только условие поменять, что рядом допускается только запятая, чтобы для 10 не попадало 110.

2. Если в двиге будет поправлено и главная будет первой, то LIKE можно облегчить, указав % один раз, после категории.

Не в сети

#10 2012-01-14 23:53:36

t3s
Участник
Откуда планета The мля...
Зарегистрирован: 2009-04-09
Сообщений: 228
Рейтинг :   13 
Сайт

Re: как получить категорию в плагине

если главная всегда будет первой - то можно и массивом, брать первый элемент - когда категорий много то должно быть быстрее чем LIKE
но сейчас получается маємо що маємо (с) - т.е. косяк...
во флудилке пытались сделать удобным для секретарш, а в данном случае это косяк подобной секретарши... или все-таки движка?

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


Проекты любой сложности. Качественно. Дорого.

Не в сети

#11 2012-01-14 23:59:01

Wolverine
Модератор
Откуда Домодедово
Зарегистрирован: 2008-10-13
Сообщений: 3,538
Рейтинг :   160 
Сайт

Re: как получить категорию в плагине

У тебя есть текстовая строка из категорий через запятую. Каким массивом? Какой первый элемент?

Не совсем понимаю как это возможно, надо проверить. То что произвольно категории могут записываться это да, а вот за порядком отмечания чекбоксов вряд ли кто-то следит...

Не в сети

#12 2012-01-15 00:04:25

vitaly
Администратор
Откуда Россия
Зарегистрирован: 2008-10-08
Сообщений: 2,823
Рейтинг :   118 

Re: как получить категорию в плагине

t3s, в SVN версии "главная категория" всегда стоит первой в поле catid.
Остальные (дополнительные) стоят в произвольном порядке.

Не в сети

#13 2012-01-15 00:18:04

t3s
Участник
Откуда планета The мля...
Зарегистрирован: 2009-04-09
Сообщений: 228
Рейтинг :   13 
Сайт

Re: как получить категорию в плагине

Wolverine, "текстовая строка через запятую" это и есть массив smile
конкретно в моем случае - мне нужно по-разному структурировать данные, в зависимости от того какая категория является корневой

если делать лайком - то мне придется делать два запроса, к примеру для первой части

$cats_1 = 'AND catid LIKE %10%'

и для второй

$cats_2 = 'AND catid LIKE %20%'

и соответственно выводить

а если родительская категория будет всегда первой - то делаю один запрос, и просто получаю catid, затем

$cats = explode(",", $row['catid']);

или так

$cats = explode(",", $row['catid']);
$cats = array_shift($cats);

и вывожу если $cats[0] = 10 первую часть, а если $cats[0] = 20 то вторую (во втором варианте соответственно сравниваю $cats)
специально не проверял, но по-моему так должно быть быстрее... во-первых сам запрос выполнится быстрее, а во вторых в случае с array_shift это не будет зависеть от кол-ва категорий, в которых находится данная новость




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

Изменено t3s (2012-01-17 00:11:28)


Проекты любой сложности. Качественно. Дорого.

Не в сети

#14 2012-01-15 00:33:31

vitaly
Администратор
Откуда Россия
Зарегистрирован: 2008-10-08
Сообщений: 2,823
Рейтинг :   118 

Re: как получить категорию в плагине

t3s, эээ... нет.
Главная - это та, которая в редактировании новостей помечена как "Категория".
Так что ты можешь найти все новости, для которых категория с id=10 является главной при помощи фильтра:

(catid like '10,%' or catid = '10')

Не в сети

#15 2012-01-15 00:49:27

t3s
Участник
Откуда планета The мля...
Зарегистрирован: 2009-04-09
Сообщений: 228
Рейтинг :   13 
Сайт

Re: как получить категорию в плагине

vitaly, получилось вот что:
допустим имеем вот такую структуру категорий
|- автомобили
|--легковые
|---седаны
новость изначально добавлена в "седаны" - т.е. именно эта категория в catid первая

косяк был замечен лишь на след. день - в итоге девушка поставила галочки в соотв. новостях напротив "легковые" и "автомобили", причем в каком порядке она ставила эти галочки - в таком порядке и стоит корневая (т.е. автомобили - она может быть после второй запятой, а может и после первой)

но главной должна быть категория "автомобили"... хз - если это единичная хотелка то наверно не стоит ничего менять - просто попрошу девушку пощелкать (думаю что пощелкать один раз ради прироста скорости навсегда можно)
но если подобную хотелку несложно сделать в движке - то может есть смысл? ведь таких девушек может быть много...

Изменено t3s (2012-01-15 00:50:13)


Проекты любой сложности. Качественно. Дорого.

Не в сети

#16 2012-01-15 01:07:24

vitaly
Администратор
Откуда Россия
Зарегистрирован: 2008-10-08
Сообщений: 2,823
Рейтинг :   118 

Re: как получить категорию в плагине

t3s, а как у тебя выглядит меню категорий при редактировании новостей?
В рабочей (SVN) версии оно выглядит так:
60983c5501784aa7b8a2e260be4ca530.png

и тут главная категория чётко отделена от остальных.
Что-то "спутать" можно только в одном случае - если при создании новости не задать главную, а все категории прописать в качестве "дополнительной". Тогда действительно - главной автоматически назначится первая попавшаяся категория.

Так что скорее косяком можно назвать возможность задать только дополнительные (без главной) категории и фишку движка, которая в этой ситуацией главной назначает первую попавшуюся категорию (в каком виде двиг получит POST запрос от браузера, в таком категория и назначится).

Не в сети

#17 2012-01-15 01:15:10

t3s
Участник
Откуда планета The мля...
Зарегистрирован: 2009-04-09
Сообщений: 228
Рейтинг :   13 
Сайт

Re: как получить категорию в плагине

выглядет так же, SVN880

там не спутано - там главной задана та которая касалась конкретно новости, как в примере с автомобилями
т.е. если новости были добавлены в "седаны" - вот она и стала главной...


Проекты любой сложности. Качественно. Дорого.

Не в сети

#18 2012-01-15 01:20:13

vitaly
Администратор
Откуда Россия
Зарегистрирован: 2008-10-08
Сообщений: 2,823
Рейтинг :   118 

Re: как получить категорию в плагине

t3s, ничего не понял sad
Ты имеешь в виду про результаты апгрейда с более старых версий, когда "главной" стала первая категория из списка?

Напиши ещё раз - в чём суть предложения (по доработке).

Не в сети

#19 2012-01-15 01:54:49

t3s
Участник
Откуда планета The мля...
Зарегистрирован: 2009-04-09
Сообщений: 228
Рейтинг :   13 
Сайт

Re: как получить категорию в плагине

нет, это не результат апгрейда - 0.93 ставилась изначально

пример структуры я указывал выше, девушка позакидывала новости сразу в конечные категории, дополнительно ничего не помечалось (т.е. главными стали "седаны", "кроссоверы" и т.д.)
на след. день эти же новости были подредактированы - просто поставились галочки для других категорий... т.е. если новость была в "седанах" - то она стала в "седанах", "легковых" и "автомобилях" - но главной (т.е. та которая в выпадающем меню - она в catid первая) все равно осталась "седаны"

чтобы было понятнее - попробуй добавить что-то, допустим в "финансовые", сохранить - а затем при редактировании новости поставь галочку напротив "плагины"

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

хотя тут хз если честно - непонятно как быть когда структура категорий будет отличаться от той что в примере, возможно кому-то такая хотелка как раз помешает

Изменено t3s (2012-01-15 01:56:51)


Проекты любой сложности. Качественно. Дорого.

Не в сети

#20 2012-01-15 02:50:56

vitaly
Администратор
Откуда Россия
Зарегистрирован: 2008-10-08
Сообщений: 2,823
Рейтинг :   118 

Re: как получить категорию в плагине

Всё, теперь понял о чём речь smile
"Главная категория" в твоём случае - это родительская категория в твоей структуре и ничего более.
Тут действительно реализация твоей хотелки может и помешать, всё очень зависит от структуры сайта.

Теперь, если я тебя правильно понял, тебе нужно найти все новости из категории "седаны" или даже "легковые".
Тут тебе поможет таблица ng_news_map, в ней прописаны все новости, которые находятся в нужной тебе категории и поиск с её помощью (с последующим join'ом таблицы ng_news) действительно может значительно уменьшить время исполнения SQL запроса (при достаточном объёме новостей).

Не в сети

#21 2012-01-15 10:37:01

Wolverine
Модератор
Откуда Домодедово
Зарегистрирован: 2008-10-13
Сообщений: 3,538
Рейтинг :   160 
Сайт

Re: как получить категорию в плагине

t3s, понял, я думал ты про какие-то хитрые оптимизации запроса.

Не в сети

Подвал раздела

Работает на FluxBB