@timers

Как брать только первую цифру ID категории?

Делаю карту сайта, столкнулся с проблемой, сам код:
function get_modul1($table, $xml)
    {
        global $db;
        $lastmod = date("Y-m-d");

        $cats = $db->super_query('select id, options from ' . PREFIX . '_' . $table . '_options where type="category"', true);
        $posts = $db->super_query('select alt_name, category from ' . PREFIX . '_' . $table . '_post where approve="1"', true);
        $postsCat = [];

        foreach ($posts as $post) {
            $postsCat[$post['category']][] = $post['alt_name'];
        }
        unset($posts);


        $table .= '/';

        $loc = $this->home . $table;
        $xml .= $this->get_xml($loc, $lastmod);
        foreach ($cats as $cat) {
            $cat_alt = explode('|||alt_name=', $cat['options'])[1];
            $cat_alt = explode('|||', $cat_alt)[0];

            $loc = $this->home . $table . $cat_alt . '/';
            $xml .= $this->get_xml($loc, $lastmod);
            foreach ($postsCat[$cat['id']] as $post) {
                $loc = $this->home . $table . $cat_alt . '/' . $post . '/';
		
                $xml .= $this->get_xml($loc, $lastmod);
            }
        }
        return $xml;
    }


Делаю карту сайта, все категории выводятся нормально, а вот с постами проблема, посты добавлены в несколько категорий: 12,23,34,35,55 и тд. Когда код хочет сформировать урл возникает трабл, т.к. он ищет именно категорию например 12, а когда делает запрос в посте 12,23,34,35,55 и тд. и таким образом он не может определить в какой категории пост.

Мне нужно чтобы урл формировался по первой категории, а остальные категории что идут после запятой не принимались во внимание.
  • Вопрос задан
  • 67 просмотров
Решения вопроса 1
@timers Автор вопроса
foreach ($posts as $post) {
        $postFirstCat = explode(',', $post['category'])[0];
	$postsCat[$postFirstCat][] = $post['alt_name'];
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Насколько я понял, вы храните список категорий в одном поле через запятую. Это изначально неверный подход, противоречащий 3 нормальной форме, кроме того больше приносящий вреда и гемора чем профита. Кажущаяся "простота" такого подхода (как видно из вашего примера) оборачивается проблемами как только нужно применить логику чуть сложнее "выбрал-показал". Скорее всего при такой структуре самым "хорошим" решением будут циклы с запросами, что само по себе уже кошмарный говнокод.

Как вариант решения конкретно этой задачи - можно так:

foreach ($posts as $post) {
    $postsCat[trim(explode(',', $post['category'])[0])][] = $post['alt_name'];
}
unset($posts);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Zelo Москва
от 130 000 руб.
Amigoweb Магнитогорск
от 40 000 до 70 000 руб.