Codeigniter и вложенная разметка вкладок - PullRequest
0 голосов
/ 17 апреля 2011

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

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

Я сделал то, что я бы назвал «порчей» этого сайта, которая работает нормально. Но это далеко не готово к публикации. Я пытаюсь реорганизовать его, чтобы сделать это, и перенесу все это на Codeigniter. Моя головоломка относится к представлениям в Codeigniter.

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

Обратите внимание, что проекты организованы по категориям, т.е. жилищные, коммерческие и т. Д. В каждой категории есть проекты.

На самом деле вкладки создаются динамически при некоторой помощи jQuery. Под этим я подразумеваю, что мой homepun php создает разметку на основе того, что возвращается из базы данных.

Разметка табуляции - это обычная разметка неупорядоченного списка, элементы li которого содержат якоря, чьи ссылки на ссылки hrefs расположены ниже. Чтобы достичь вложенности, эти div-ы затем содержат еще один ul с дополнительным набором div-ов, связанных с ним.

Верхние вкладки соответствуют категории, например, жилье, коммерческая недвижимость. Нижние вкладки соответствуют проектам в категории.

Я сделал эту работу с четырьмя запросами ранее. Я думаю, что, по крайней мере, один может быть излишним, но я сказал, что это была «порка».

Запрос 1: "select distinct pcat, pcatid from pcategory inner join projects on pcatid = projcat order by pcat desc"

Из этого запроса я получаю идентификатор, используемый в href.

Запрос 2: такой же, как и выше, но на этот раз id используется для div id.

Следующий запрос - источник моего недоумения, потому что я не вижу, как повторить его с помощью CI.

Запрос3:

$jobcat=$row2['pcatid']; 
$queryall3 = "select projid, projtit, projcost, projdate from projects where projcat= '$jobcat'";

В этом запросе используется идентификатор категории - $ jobcat -, возвращаемый каждой итерацией предложения while, используемого для расширения результатов запроса 2. Другими словами, он выполняется внутри запроса 2 в цикле, так что он может получить идентификатор категории и тогда получите все проекты, связанные с этим.

Результаты запроса 3 используются для формирования нижних вкладок, а их значение href является идентификатором проекта.

Query4: аналогично запросу 3 и используется для заполнения нижних делителей данными из базы данных, относящейся к конкретному проекту.

Итак, наконец, мой вопрос: мне кажется, что запросом 3 сложно управлять с помощью настройки Codeigniter. Я могу представить массив результатов, зацикленных в представлении. Что я не могу понять, так это как сделать вызов модели в этом цикле.

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

Tom

1 Ответ

1 голос
/ 17 апреля 2011

Я действительно не понимаю, о чем вы спрашиваете, но, похоже, вы хотите знать, как выполнять запросы в CI?

В этом случае я предлагаю вам прочитать документацию

$this->db->select('pcat, pcatid');
$this->db->distinct();
$this->db->from('pcategory');
$this->db->join('projects', 'pcategory.pcatid = projects.pid', 'inner');
$this->db->order_by('pcat', 'DESC');
$result = $this->db->get();

Я очень сомневаюсь, что это сработает, поскольку я не знаю структуру вашей таблицы, но может дать вам представление о том, как использовать класс активной записи в CI.

Конечно, вы можете просто использовать метод query:

$results = $this->db->query('YOUR QUERY HERE');

однако, активный класс записи может сделать большую работу за вас.

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

Редактировать

$jobcat=$row2['pcatid']; 
$queryall3 = "select projid, projtit, projcost, projdate from projects where projcat= '$jobcat'";

$results=$this->db->query($queryall3);
$data = $results->result_array(); // get the results of the 3rd query as an array


// new query
$this->db->select('query_4_select'); // select whatever you need
$this->db->from('whatever_table');
// this probably isn't the most efficient way, but for examples sake:
foreach($data as $row) // using the result_array from above
{
    $this->db->or_where('query_4_id', $row['id']); // the magic !!
}
$new_results = $this->db->get();

По сути, вы получаете идентификаторы из запроса 3, запускаете его через foreach и создаете запрос типа where x=x or x=y or x=b, который затем (будем надеяться) вернет желаемые результаты.

Это один из способов, вам нужно его настроить.

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

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