Справка по Codeigniter - активная запись и зацикливание в контроллере - PullRequest
1 голос
/ 30 июня 2011

В настоящее время я работаю с приложением codeigniter, и оно позволяет фильтровать задания на основе различных критериев, однако это не совсем правильно, в принципе, должно произойти следующее: после фильтрации пользователю должен быть показан результатв этом формате

<section style="display: block;" class="employer">
    <div class="job_holder">
    <img src="http://lcl.doctrine.com/media/uploads/users/large_moovjob_large4.gif" alt="Test Company" height="148" width="198">
        <dl>
    <dt>2</dt>
    <dd>Matches</dd>
    </dl>
    <!--<a href="" class="fave">Fave</a>-->
    <ul class="job_listings">
            <li> 
                + <a href="http://lcl.doctrine.com/jobwall/getjob/4" class="openjob">
            PHP Backend Web Developer
                  </a>
    </li>
    <li>
            + <a href="http://lcl.doctrine.com/jobwall/getjob/5" class="openjob">
                Website Designer                            
              </a>
             </li>
             </ul>
     </div>
    </section>

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

    Array
(
    [0] => Array
        (
            [job_id] => 4
            [job_title] => PHP Backend Web Developer
            [salary] => 23000
            [job_tags] => IT,Media
            [retrain] => no
            [job_extras] => We offer a very generous bonus scheme, including a company car, profit bonuses and a pension package.

            [job_summary] => The job consists of a 60/40 spilt of PHP and front end skills, you will be expected to be proficient in, PHP, OO, MySQL and JAVASCRIPT
            [job_description] => The job is a 60/40 split between the front and the backend of coding. You will be working within a team of 4 using an inhouse framework and where applicable an in house CMS.

For working hours of 9-5.30 (we try not to stay too late but sometimes this is unnavoidable) you will be paid ?23,000, you will also be given a company car, and 1% of all yearly profits, we will also match any pension contributions that you make.



            [company_name] => Test Company
            [company_summary] => Test company is excatly what it says it is a test company, we have created this test company so that we can see that moovjob is functioning as it should be and that everything is upload, saving, applying and generally saving as we would expect. Hello
            [logo_small] => small_moovjob_small12.png
            [logo_large] => large_moovjob_large4.gif
            [employer_id] => 1
        )

    [1] => Array
        (
            [job_id] => 5
            [job_title] => Website Designer
            [salary] => 28000
            [job_tags] => Media,Marketing
            [retrain] => no
            [job_extras] => Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam enim nisl, sodales dignissim tempus in, placerat id enim. Aenean eget diam velit. Morbi quis erat mi. Donec metus sem, consectetur at malesuada ac, iaculis nec arcu. Morbi libero leo, rhoncus ac vestibulum quis, vehicula nec metus. Vestibulum quis luctus erat. In varius accumsan ornare. Ut ullamcorper bibendum lorem ut elementum.
            [job_summary] => Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam enim nisl, sodales dignissim tempus in, placerat id enim. Aenean eget diam velit. Morbi quis erat mi. Donec metus sem, consectetur at malesuada ac, iaculis nec arcu. Morbi libero leo, rhoncus ac vestibulum quis, vehicula nec metus. Vestibulum quis luctus erat.us erat. In varius accumsan ornare. Ut ullamcorper bibendum lorem ut elementum.
            [job_description] => Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam enim nisl, sodales dignissim tempus in, placerat id enim. Aenean eget diam velit. Morbi quis erat mi. Donec metus sem, consectetur at malesuada ac, iaculis nec arcu. Morbi libero leo, rhoncus ac vestibulum quis, vehicula nec metus. Vestibulum quis luctus erat. In varius accumsan ornare. Ut ullamcorper bibendum lorem ut elementum.Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam enim nisl, sodales dignissim tempus in, placerat id enim. Aenean eget diam velit. Morbi quis erat mi. Donec metus sem, consectetur at malesuada ac, iaculis nec arcu. Morbi libero leo, rhoncus ac vestibulum quis, vehicula nec metus. Vestibulum quis luctus erat. In varius accumsan ornare. Ut ullamcorper bibendum lorem ut elementum.
            [company_name] => Test Company
            [company_summary] => Test company is excatly what it says it is a test company, we have created this test company so that we can see that moovjob is functioning as it should be and that everything is upload, saving, applying and generally saving as we would expect. Hello
            [logo_small] => small_moovjob_small12.png
            [logo_large] => large_moovjob_large4.gif
            [employer_id] => 1
        )

)

Я зацикливаюсь на нем, выполняя следующеекод,

<code><?php if(is_array($jobs)) : ?>
<pre><?php print_r($jobs); ?>
imagemedia/uploads/users/<?php echo $j['logo_large']; ?>" width="198" height="148" alt="<?php echo $j['company_name']; ?>"/>
<?php echo $count; ?>
Matches
<!--<a href="" class="fave"> 1010 * Fave * -> + jobwall/getjob/<?php echo $j['job_id']; ?>" class="openjob">

В основном, что мне нужно сделать, это повторить название компании и затем рабочие места компаний, а затем перейти к тому, что он делает в данный момент, повторить имя компании и затем егозаданий, а затем повторяется, что $jobs имеет 2 результата, но они оба для одной и той же компании.

Код в моей модели ниже,

public function search($salary = null, $location = null, $tags = null, $quick_tags = null)
{
    $this->db->select('job_id, job_title, salary, job_tags, retrain, job_extras, job_summary, job_description,  company_name, company_summary, logo_small, logo_large, employers.employer_id');
    $this->db->from('jobs');
    $this->db->join('employers', 'employers.employer_id = jobs.employer_id', 'left');
    if(isset($salary)) {
        $this->db->where('jobs.salary >=', $salary);
    }
    if(isset($location)) {
        $this->db->where('jobs.city', $location);
    }
    if(isset($tags)) {
        $this->db->like('jobs.job_tags', $tags);
    }
    if(isset($quick_tags) && is_array($quick_tags)) {
        foreach ($quick_tags as $index => $value) {
            if ($index == 0)
                $this->db->like('jobs.job_tags', $value);
            else
                $this->db->or_like('jobs.job_tags', $value);
        }
    }
    $this->db->group_by('jobs.job_title');
    $query = $this->db->get();
    return $query->result_array();
}

1 Ответ

0 голосов
/ 30 июня 2011

Для достижения постоянного результата, например

Employer
    job posting 1
    job posting 2
Other employer
    job posting 1

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

Затем, просматривая ваши данные (непроверенный псевдокод)

employerCache = '';
for ($jobs as $job) {
   if ($job['company_name'] != employerCache) {
       // display company/employer header
       $employerCache = $job['company_name'];
   }
   // display job posting
}

Это даст вам 1 цикл вместо двух вложенных циклов в одном наборе данных

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