Включить веб-приложение CodeIgniter / Php на страницу php - PullRequest
0 голосов
/ 04 ноября 2010

Контекст:

У меня есть веб-приложение (электронная коммерция за несколько шагов), написанное на php, я пишу новую версию с CodeIgniter.
Я должен включить ее в созданные страницы phpCMS (sitezen).

/* generated html */ 
<?php include('my_app/index.php); ?>
/* generated html */

Я не могу ничего сделать с частью CMS, например работать с другой ...

Моя проблема:
С Я не могу начать сеанс до того, как заголовок былПри отправке я также получаю предупреждения при использовании сеанса, но могу отключить их.

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

Это работает, но может быть лучшее / более чистое решение, и я не знаю, как это сделать с версией CodeIgniter.
Я бы тоже хотел избегать использования Iframes!

Если кто-нибудь знает способ сделать это или у него есть подсказка, это будет высоко оценено!

Ответы [ 3 ]

1 голос
/ 04 ноября 2010

CodeIgniter - хорошая платформа для всего, что есть в ней (как и большинство фреймворков), но ему не нравится быть «включенным» извне.Зачем вам нужно включать его в другую CMS?Вы можете использовать CMS в CodeIgniter (это основная цель CodeIgniter) или электронную коммерцию в sitezen.

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

Предупреждения есть по причине: отключение их не предотвращает результат.

Что с вами происходит, вы пытаетесь начать сеанс, который уже был начат.Чтобы избежать этого, вы должны дать второму сеансу имя, отличное от первого.(При вызове, предшествующем session_start(), вы захотите позвонить session_name().

Плохая новость состоит в том, что после начала сеанса предыдущие данные из сеанса больше не доступны, поэтому, еслиCMS хранит вещи в сеансе в __destruct(), массив $_SESSION, в котором хранятся новые данные, не будет тем же $_SESSION(), который использовался в начале начальной загрузки CMS.

И если вы неНе начинайте второй сеанс, вы будете смешивать переменные CodeIgniter и sitezen внутри одного массива (остерегайтесь коллизий имен).

Код, подобный этому, НЕ будет работать (поэтому, вложенные сеансы / восстановление сеансовНасколько я знаю, это невозможно):

<?php
function show() {
    echo "We are on [{$_SESSION['name']}] <br />\n";
}

session_name('SUPERSESSION'); session_start();
$_SESSION['name'] = "Super";

session_name('SESSION_ONE'); session_start();
$_SESSION['name'] = "ONE";

show(); # We are on [ONE]

session_destroy();

session_name('SESSION_TWO'); session_start();
$_SESSION['name'] = "TWO";

show(); # We are on [TWO]

session_destroy();

session_name('SESSION_ONE'); session_start();

show(); # We are on [empty] <- resume sessions does not work

session_destroy();

show(); # We are on [empty] <- nested sessions dont work

session_destroy();

Чтобы избежать заголовков, уже отправивших предупреждение, начните свой код с ob_start () в вашем index.php и ob_end_flush () в конце

0 голосов
/ 04 ноября 2010

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

include('http://www.example.com/codeigniter/controller/method/id');

Попробуйте это.Если это работает, вы можете сделать что-то вроде этого для управления:

include('http://www.example.com/codeigniter/'. $controller .'/'. $method .'/'. $id);

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

www.example.com <-- your cms
www.example.com/store <-- your webstore in CI
0 голосов
/ 04 ноября 2010

Не может быть сделано без значительного взлома CMS.

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

Вы действительно должны включить его в страницы CMS?

Почему бы не создать ссылку вроде:

site.com/my_store_app/codeigniter-stuff

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

По сути, вы берете две совершенно разные системы и пытаетесь соединить их.

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