Я закончил создание своего сайта с помощью codeigniter, а также создал панель администратора, где есть возможность отключить сайт.
Он сохраняется в базе данных как логическое значение, поэтому если он включен, или он отключен. Я также закончил создание offline.php
просмотра offline.php
.
Я также сделал столбец whitelisted_ip в моей базе данных, где IP-адрес администратора сохраняется в массиве. Единственная проблема заключается в отображении страницы обслуживания всем, кроме белых IP-адресов.
Я не могу использовать htaccess для этого, потому что я контролирую панель администратора и базу данных.
Что я хочу:
Что я до сих пор:
Контроллер offline.php
public function index()
{
$this->db->select('*');
$this->db->from('site');
$this->db->where('1', 1);
$query = $this->db->get();
$result = $query->row();
$whitelisted_ip = explode(",", $result->whitelisted_ip);
$ip = $this->input->ip_address();
if ($result->site_offline) {
if (!in_array($ip, $whitelisted_ip)) {
$this->load->view('site_offline');
} else {
}
} else {
redirect(base_url());
}
$this->load->view('site_offline');
}
Мне просто нужно, чтобы каждая страница на моем сайте имела этот код или рассказывала каждую страницу моего сайта о том, что если сайт находится в автономном режиме, покажите эту страницу офлайн.
Любая помощь высоко ценится. благодаря
Изменение: Пожалуйста, дайте мне знать, если это будет работать (работает для меня).
Файл MY_Controller.php
:
class MY_Controller extends CI_Controller
{
public function __construct()
{
parent::__construct();
}
function offline_mode()
{
$this->db->select('*');
$this->db->from('site');
$this->db->where('1', 1);
$query = $this->db->get();
$result = $query->row();
$whitelisted_ip = explode(",", $result->whitelisted_ip);
$ip = $this->input->ip_address();
if ($result->site_offline) {
if (!in_array($ip, $whitelisted_ip)) {
$this->load->view('site_offline');
}
} else {
redirect(base_url());
}
} }
Все мои другие контроллеры:
class Page extends MY_Controller
{
public function __construct()
{
parent::__construct();
$this->offline_mode();
$this->load->helper('url');
}
Это хороший способ пойти?
измените это.
public function __construct()
{
parent::__construct();
$this->db->select('*');
$this->db->from('site');
$this->db->where('1', 1);
$query = $this->db->get();
$result = $query->row();
$whitelisted_ip = explode(",", $result->whitelisted_ip);
$ip = $this->input->ip_address();
if ($result->site_offline) {
if (!in_array($ip, $whitelisted_ip)) {
$this->load->view('site_offline');
}
} else {
redirect(base_url());
}
}
}
что я имею в виду, нет необходимости сохранять функцию и называть ее каждый раз. сохранить код в конструкторе. поэтому каждый раз, когда он проверяет, находится ли сайт в автономном режиме или нет.
Если вы вообще хотите сохранить, это функция, измените конструктор, подобный этому,
public function __construct()
{
parent::__construct();
$this->offline_mode();
}
Поэтому в обоих случаях вы можете писать код только один раз, не нужно вызывать функцию в каждом контроллере.
extends MY_Controller
в каждый контроллер?