Вы не зашли.
Страницы 1
для урлов есть удобная функция newsGenerateLink() - которая позволяет не париться, когда обьект находится в нескольких категориях
а есть ли что-то подобное для категорий? обьект находится в нескольких категориях, нужно получить и сравнить корневые категории...
а то пока что делаю так
$cats_select = 'AND catid LIKE ';
$cats_select .= db_squote('%'.$get_cats.'%');
но надеюсь что имеется готовый вариант для категорий
Проекты любой сложности. Качественно. Дорого.
Не в сети
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)
Проекты любой сложности. Качественно. Дорого.
Не в сети
$SYSTEM_FLAGS['news']['db.categories'] содержит тоже, что и catid, доступна только на странице новости. Не подходит.
мне нужно получить лишь те материалы, для которых категория с ид 10 является корневой
во, теперь понял.
Сейчас ты хочешь сказать, что главная категория может быть в любом месте и не обязательно на первом? Если да, то это косяк, как по мне, главная должна быть первой обязательно.
Можно просто новостную организацию улучшить. Есть категории у которых есть дочки, при этом сами они не дочки, а сами по себе, они могут быть только главными.
Например, главная ID = 3. У дочки родитель эта категория и сама она имеет ID = 10. Тогда можно сделать запрос к таблице news_map и все новости с категорией ID = 3 и будут нужными тебе, гарантированно главные. То есть не допускать ситуацию, когда категория может быть и главной и дочкой одновременно.
Если это не подходит:
1. Если главная пляшет как сейчас, то в середине, то в начале, то только использовать LIKE, иначе никак. Только условие поменять, что рядом допускается только запятая, чтобы для 10 не попадало 110.
2. Если в двиге будет поправлено и главная будет первой, то LIKE можно облегчить, указав % один раз, после категории.
Не в сети
если главная всегда будет первой - то можно и массивом, брать первый элемент - когда категорий много то должно быть быстрее чем LIKE
но сейчас получается маємо що маємо (с) - т.е. косяк...
во флудилке пытались сделать удобным для секретарш, а в данном случае это косяк подобной секретарши... или все-таки движка?
ок, тогда не буду изобретать костыли и обьясню это тем кто будет заполнять - но в список пожеланий к движку данный момент думаю нужно добавить, т.к. сейчас категории хранятся в том порядке в котором были помечены чекбоксы в админке
Проекты любой сложности. Качественно. Дорого.
Не в сети
У тебя есть текстовая строка из категорий через запятую. Каким массивом? Какой первый элемент?
Не совсем понимаю как это возможно, надо проверить. То что произвольно категории могут записываться это да, а вот за порядком отмечания чекбоксов вряд ли кто-то следит...
Не в сети
Wolverine, "текстовая строка через запятую" это и есть массив
конкретно в моем случае - мне нужно по-разному структурировать данные, в зависимости от того какая категория является корневой
если делать лайком - то мне придется делать два запроса, к примеру для первой части
$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)
Проекты любой сложности. Качественно. Дорого.
Не в сети
t3s, эээ... нет.
Главная - это та, которая в редактировании новостей помечена как "Категория".
Так что ты можешь найти все новости, для которых категория с id=10 является главной при помощи фильтра:
(catid like '10,%' or catid = '10')
Не в сети
vitaly, получилось вот что:
допустим имеем вот такую структуру категорий
|- автомобили
|--легковые
|---седаны
новость изначально добавлена в "седаны" - т.е. именно эта категория в catid первая
косяк был замечен лишь на след. день - в итоге девушка поставила галочки в соотв. новостях напротив "легковые" и "автомобили", причем в каком порядке она ставила эти галочки - в таком порядке и стоит корневая (т.е. автомобили - она может быть после второй запятой, а может и после первой)
но главной должна быть категория "автомобили"... хз - если это единичная хотелка то наверно не стоит ничего менять - просто попрошу девушку пощелкать (думаю что пощелкать один раз ради прироста скорости навсегда можно)
но если подобную хотелку несложно сделать в движке - то может есть смысл? ведь таких девушек может быть много...
Изменено t3s (2012-01-15 00:50:13)
Проекты любой сложности. Качественно. Дорого.
Не в сети
t3s, а как у тебя выглядит меню категорий при редактировании новостей?
В рабочей (SVN) версии оно выглядит так:
и тут главная категория чётко отделена от остальных.
Что-то "спутать" можно только в одном случае - если при создании новости не задать главную, а все категории прописать в качестве "дополнительной". Тогда действительно - главной автоматически назначится первая попавшаяся категория.
Так что скорее косяком можно назвать возможность задать только дополнительные (без главной) категории и фишку движка, которая в этой ситуацией главной назначает первую попавшуюся категорию (в каком виде двиг получит POST запрос от браузера, в таком категория и назначится).
Не в сети
выглядет так же, SVN880
там не спутано - там главной задана та которая касалась конкретно новости, как в примере с автомобилями
т.е. если новости были добавлены в "седаны" - вот она и стала главной...
Проекты любой сложности. Качественно. Дорого.
Не в сети
t3s, ничего не понял
Ты имеешь в виду про результаты апгрейда с более старых версий, когда "главной" стала первая категория из списка?
Напиши ещё раз - в чём суть предложения (по доработке).
Не в сети
нет, это не результат апгрейда - 0.93 ставилась изначально
пример структуры я указывал выше, девушка позакидывала новости сразу в конечные категории, дополнительно ничего не помечалось (т.е. главными стали "седаны", "кроссоверы" и т.д.)
на след. день эти же новости были подредактированы - просто поставились галочки для других категорий... т.е. если новость была в "седанах" - то она стала в "седанах", "легковых" и "автомобилях" - но главной (т.е. та которая в выпадающем меню - она в catid первая) все равно осталась "седаны"
чтобы было понятнее - попробуй добавить что-то, допустим в "финансовые", сохранить - а затем при редактировании новости поставь галочку напротив "плагины"
суть предложения - сделать подобное невозможным, т.е. чтобы пользователь просто не смог выбрать главной дочернюю категорию ("легковые" или "седаны" в примере)
либо если выбрал - то чтобы корневая категория автоматом становилась первой (это если так будет проще)
хотя тут хз если честно - непонятно как быть когда структура категорий будет отличаться от той что в примере, возможно кому-то такая хотелка как раз помешает
Изменено t3s (2012-01-15 01:56:51)
Проекты любой сложности. Качественно. Дорого.
Не в сети
Всё, теперь понял о чём речь
"Главная категория" в твоём случае - это родительская категория в твоей структуре и ничего более.
Тут действительно реализация твоей хотелки может и помешать, всё очень зависит от структуры сайта.
Теперь, если я тебя правильно понял, тебе нужно найти все новости из категории "седаны" или даже "легковые".
Тут тебе поможет таблица ng_news_map, в ней прописаны все новости, которые находятся в нужной тебе категории и поиск с её помощью (с последующим join'ом таблицы ng_news) действительно может значительно уменьшить время исполнения SQL запроса (при достаточном объёме новостей).
Не в сети
Страницы 1