HTML5, Codeigniter и история переписывают / обновляют - PullRequest
1 голос
/ 24 марта 2012

Я использую шаблон HTML5 с бэкэндом codeigniter. Я на самом деле новичок в codeigniter. Я создал контроллер с именем home.php, который определяет представление html5 в индексе и имеет несколько других методов / действий, называемых page и catalog.

РЕДАКТИРОВАТЬ Обновил вопрос, потому что это было не так ясно / РЕДАКТИРОВАТЬ

Я могу загрузить свои данные из codeigniter. У меня есть URL, который вызывает эти данные из контроллера: /index.php/home/page/xxx (где ххх - это контент, который у меня есть для каждой страницы). В моем /index.php/home/index контроллере находится основной (и единственный) шаблон, который я загружаю. Когда пользователь нажимает на меню (это единственный статический блок), я делаю следующее:

  1. построить URL из переменных
  2. data-action, data-controller, data-pageid.
  3. загрузить URL с помощью div.load () из jquery
  4. url - это на самом деле контроллер codeigniter, который возвращает мне данные
  5. область «в стороне» экрана теперь загружена данными из контроллера и отрисована (я делаю некоторые вычисления для проверки полного экрана и ширины / высоты)
  6. Я создаю запись истории html5, чтобы «обмануть» браузер тем, что он загрузил другую страницу (и использую его для аналитики Google).

Теперь дело в том, что это происходит, когда я делаю это из /index.php/home/index

Если я сделаю это с URL-адреса страницы (например, /index.php/home/page/100), он будет правильно отображать только содержимое (потому что это то, что делает контроллер). Что я хотел бы сделать в том, что когда пользователь нажимает этот URL (например, он нашел его из Google), процесс будет выглядеть так:

  1. Визуализация главной страницы шаблона
  2. Извлечение данных с помощью того же процесса загрузки jquery в стороннюю область графики
  3. выполните следующие шаги, указанные выше.

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

Один из методов, упомянутых ниже, состоит в том, чтобы использовать SESSION, чтобы проверить, загружено ли представление, чтобы я мог перезагрузить его. Есть ли более удобный способ сделать это?

Ответы [ 3 ]

0 голосов
/ 24 марта 2012

Чтобы предоставить подход, который вы запрашиваете, я все равно использовал бы подход сеанса. Если свойство сеанса не установлено, загрузите элементы внешнего вида по обе стороны от вашего блока контента:

//main controller index method
public function index($var1)
{
    //do the stuff you need to prepare your page

    //load session library if not autoloaded
    $this->load->library('session');
    //get the current session value
    $isLoaded = $this->session->userdata('is_loaded');
    //set a new session value
    $this->session->userdata('is_loaded','some_value');

    //display header for new users only
    if($isLoaded === false) $this->load->view('above_content_view');
    $this->load->view('requested_content_view');
    //display footer for new users only
    if(isLoaded === false) $this->load->view('below_content_view');

}

Это доставит всю страницу, только если переменная сеанса равна false, который CI возвращает, если значение не установлено. Я думаю, что это предпочтительнее, чем доставка фрейма HTML только с точки зрения SEO.

0 голосов
/ 25 марта 2012

Лучший способ сделать это - использовать событие hashchange в браузерах. Вам придётся создать свои URL-адреса, например,

/index.php/home/#!page-100

#! предназначен для сканеров Google Ajax, которые рассматривают их как разные страницы. И вам нужно будет запустить событие hashchange при загрузке страницы.

Таким образом, когда кто-нибудь щелкает ваш URL из любого места, будет выполняться метод индекса из домашнего контроллера. Там при загрузке страницы вы проверяете любые изменения хеша, используя JS. и вы делаете AJAX-запрос к методу страницы домашних контроллеров для извлечения содержимого, указанного хешем.

Вы можете найти этот плагин здесь. http://benalman.com/projects/jquery-hashchange-plugin/

Плагин сам делает запись в истории браузера.

0 голосов
/ 24 марта 2012

Вот небольшой пример загрузки партиалов вида.

Сначала создайте свою главную страницу и загрузите ту, которая, кажется, у вас не работает.

В вашем главном представлении в jQuery используйте что-токак следующее:

$("#eleID").load(
    '<?= site_url('yourController/yourLoadFunc'); ?>', // url to your load function in controller
    function(responseText, textStatus, XMLHttpReques) { // function to execute when load is complete
        // responseText is your view, OR json data if not a view recieved
        // however, for loading a view partial, you don't need the json data here
        // as you know, you can insert data in a view via the CI load view call
        // so simply make an html page of what you want your sub-view to be
        // complete with vars for data, and when your controller for this jQuery call
        // returns the view, insert the data as normal makeing
        // $this->load->view('yourSubView', $dataArray);
        // the last line of the function this load call refers too
    }
);

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

...