Рекомендации по созданию приложения codeigniter для обслуживания пользовательских микросайтов - PullRequest
1 голос
/ 07 июля 2011

Я создаю приложение codeigniter, которое будет обслуживать пользовательские микросайты.По сути, каждый микросайт будет представлять собой набор из семи различных представлений, загруженных методами одного контроллера.Для «темы» каждого микросайта будут разные папки, содержащие разные версии этих файлов представлений (и связанные с ними файлы CSS, JS и изображения), и контроллер будет знать, какую папку представлений загружать, основываясь на информации, хранящейся в базе данных для каждого микросайта.record.

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

Чтобы далее объяснить, что я имею в виду, представьте эти URL:

http://www.fakewebsite.com/index.php/microsite/index/david_site
http://www.fakewebsite.com/index.php/microsite/index/frank_site

В обеих этих ссылках контроллер - «микросайт», а метод - «индекс», «индекс» знает, какой шаблон возвращать, основываясь на его первом аргументе, который в приведенном выше примере является либо «david_site», либо «frank_site».

Ответы [ 3 ]

1 голос
/ 07 июля 2011

Я не могу сказать, возможно ли это с Codeigniter, но я предполагаю, что так:

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

Таким образом, внешний контроллер затем предоставит правильный класс контроллера для сайта, как это делаетсятемы - если я правильно понял ваш вопрос.

1 голос
/ 07 июля 2011

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

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

Поспешный пример, предполагающий, что файлы по умолчанию находятся в корне views/:

// I assume we know which site we're loading
$theme = 'david_site';

// Whatever the current view's name should be
$view = 'page3';

// Path to our custom file if it exists
$custom = APPPATH.'views/'.$theme.'/'.$view;

// Does a custom view exist?
if (file_exists($custom))
{
    $view_file = $theme.'/'.$view;
}
else
{
    // Use the default
    $view_file = $view;
}
$this->load->view($view_file);

Насколько я знаю, в CI нет ничего похожего на view_file_exists(), поэтому мы просто используем обычныйстарый file_exists() с полным путем.

Конечно, для этого стоило бы написать функцию, но, надеюсь, это поможет.Вы даже можете применить его для загрузки библиотек, моделей и т. Д. - или даже расширить класс Loader, чтобы сделать это автоматически (возможно, излишним).

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

1 голос
/ 07 июля 2011

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

Так вот так

http://www.fakewebsite.com/microsite/david_site/ http://www.fakewebsite.com/microsite/frank_site/ http://www.fakewebsite.com/microsite/john_site/customtheme/ <- настраиваемая тема </p>

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