CodeIgniter извлекает определенные данные из контроллера в представлении - PullRequest
2 голосов
/ 10 января 2012

Итак, в основном я пытаюсь получить список категорий из базы данных и поместить его в переменную с именем $ data ['category'].

В представлении я перечисляю это, просто используя оператор foreach (). Все идет нормально. Хотя некоторые категории имеют подкатегории (не все). Теперь я добавил в базу данных строку «is_direct» (имеет подкатегории или нет), которая показывает, есть ли у категории подкатегории.

Теперь я хочу перечислить эти подкатегории, если они существуют.

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

private function show_header($template='default',$page_name='default')
{
    // Get the categories.
    $data['categories']     = $this->CI->ws_category->get_categories();

    // Display the header.
    $this->CI->load->view("templates/".$template."/template/header",$data);
}

Этот метод вызывает метод get_categories (), который показан ниже (простая активная запись).

public function get_categories()
{
    // Prepare the SQL query.
    $this->db->select('*');
    $this->db->from(APP_PREFIX.'categories');
    $this->db->order_by('name_clean');

    // Execute the query.
    $query = $this->db->get();

    // Get the results from the query.
    $result = $query->result_array();

    // Return the array with data.
    return $result;
}

А под видом вы можете видеть, куда подменю пойдет.

<?php

    // Loop through all the categories.
    foreach ($categories as $item):

?>
<li class='nav_link <?php ($item['is_direct'] == '1' ? 'nav_subcats' : ''); ?>'>
    <a href='<?php echo base_url().'category/'.$item['category_id'].'-'.$item['name_clean'].'.html';?>' class='nav_main_link'><?php echo $item['name']; ?></a>
    <?php

        // In case subcategories are present.
        if ($item['is_direct'] != '1')
        {
    ?>
    <div class='nav_submenu'>
        <ul>
            <li><a href='#' class='nav_sub_link'>submenu item</a></li>
        </ul>
    </div>
    <?php
        }
    ?>
</li>
<?php
    // End the loop.
    endforeach;

?>

Может ли кто-нибудь мне помочь? Спасибо.

1 Ответ

3 голосов
/ 10 января 2012

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

public function get_categories_and_subcategories()
{
    // Prepare the SQL query.
    $this->db->select('*');
    $this->db->from(APP_PREFIX.'categories');
    $this->db->order_by('name_clean');

    // Execute the query.
    $query = $this->db->get();

    // Get the results from the query.
    $result = $query->result_array();

    // Get subcategories
    for ($i = 0; $i < count($result); $i++) {

        // Check if subcategory
        if ($result[$i]['is_direct']) {

            // Query for subcategories - made up for demonstrational purposes
            $query = $this->db->query("SELECT * FROM subcategories WHERE parent_id='".$result[$i]['id']."'");

            // Add subcategories to category item
            $result[$i]['subcategories'] = $query->result_array();

        } else {

            $result[$i]['subcategories'] = array();

        }

    }

    // Return the array with data.
    return $result;
}

Затем в представлении:

<li class='nav_link <?php ($item['is_direct'] == '1' ? 'nav_subcats' : ''); ?>'>
    <a href='<?php echo base_url().'category/'.$item['category_id'].' '.$item['name_clean'].'.html';?>' class='nav_main_link'><?php echo $item['name']; ?></a>

    <?php if (count($item['subcategories']) > 0): ?>
    <div class='nav_submenu'>
        <ul>
            <foreach ($item['subcategories'] as $subcategory): ?>
            <li><a href='<?php echo $subcategory['url']; ?>' class='nav_sub_link'><?php echo $subcategory['name']; ?></a></li>
            <?php endforeach; ?>
        </ul>
    </div>
    <?php endif; ?>
</li>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...