【问题标题】:Multiple sites by using only one code多个站点仅使用一个代码
【发布时间】:2017-04-11 04:29:31
【问题描述】:

当用户打开我们应用程序的任何链接时,我需要一个名为 site_check 的控制器或执行以下操作的任何其他控制器,首先让站点 url 打开完全像“www.google.com”,我需要存储数据,如仅 google.com 并且如果存在该值,则使用数据库检查该值。 如果存在,请尝试添加相同的本地 cookie。在会话被删除之前不需要再次检查。 我将存储我需要将标题徽标和其他静态数据从平台拉到此的值。

我们可以尝试多少种方法来锻炼。

我是这个codeigniter和编码的新手,需要你的帮助..如何开始我不知道,请帮帮我。

【问题讨论】:

  • 到目前为止你做了什么?
  • 我不知道该做什么,从哪里开始以及如何开始..
  • 您是否至少设置了 CI 并渲染了视图?

标签: php mysql sql database codeigniter


【解决方案1】:

嗨,这是我的解决方案,我用它来开发单核多站点创建一个设置表,在该表中保存域、站点名称和模板信息等基本信息,稍后添加许多设置,在核心目录检查域下创建 MY_Controller是否存在于您的数据库中

class MY_Controller extends CI_Controller {

    public $site_id = 0;
    public $template = '';

    function __construct(){
        parenet::__construct()
        $this->loadSetting();
    }

    function loadSetting(){
        $host = $_SERVER['HTTP_HOST'];
        $row = $this->db->where_like('domain',$host)->get('setting')->row();
        $this->site_id = $row->id;
        $this->template = $row->template;
    }
}

设置完成后,您可以将 site_id 作为外键添加到其他表(如页面、新闻)中,以获取站点特定页面和新闻以及有关站点的其他信息。现在像这样使用 MY_Controller 扩展您的页面控制器或新闻控制器。

class Page_Controller extends MY_Controller {
    function __construct(){
       parent::__construct();
   }

   function index(){
      $page = $this->db->get_where('pages',array('site_id',$this->site_id))->row();
   }
}

如果您进一步希望在应用程序中的每个位置都可以使用 site_id,您可以创建一个库并自动加载该库,您可以将 loadSetting 方法放入该库中。喜欢

class Setting {
   private $ci;
   public $site_id;
   public $template;

   function __construct(){
      $this->ci = get_instance();
      $this->loadSetting();
   }  

function loadSetting(){
            $host = $_SERVER['HTTP_HOST'];
            $row = $this->ci->db->where_like('domain',$host)->get('setting')->row();
            $this->site_id = $row->id;
            $this->template = $row->template;
        }

}

现在您可以在任何地方访问应用程序中的 site_id,就像模型其他库和控制器一样

$this->setting->site_id;

希望这能解决您的问题。

【讨论】:

  • 感谢 umefarooq 当我想检查数据库时,如果他输入 google.com 之类的链接,该网站是否存在 -> 如果他输入的是链接,我会像这样在数据库中保存像 www.google.com 一样,那么如何从输入中排除 www 以检查数据库
  • 不用担心你可以检查我在 sql 中使用的上述代码,条件是这样的,其中域如“%google.com%”用户输入 google.com 或 www .google.com 可以使用,也请提供我的答案。
【解决方案2】:

我相信您正在尝试为组织中的用户创建访问控制层,以访问您希望允许的某些网站。虽然在NAT Server 后面的网络环境中,像 Microsoft ISA 这样的简单代理服务器或像 Kerio 这样的任何第三方都可以通过创建一个简单的规则来帮助您

但是如果你想在 Codeigniter 中做同样的事情,你需要使用以下启动

第一步

为允许的站点创建数据库表,例如

id | website        
----------------------------------
1  | facebook.com   
2  | youtube.com    

你需要有类似的用户表

id  | username       | details
-------------------------------------
1   | Mudassar       | php developer

你需要有一个类似的用户权限表

id  | user_id   | site_id  | permission
----------------------------------------
1   |    1      |   2      | allowed

现在登录您的用户

public function Login()
{
  if($_POST)
  {
     // You can perform Validation here

     $user_data=$this->Login_Model->checkUser($_POST);
     if($user_data)
     {
        $this->session->set_userdata($user_data);
        redirect(base_url().'user/dashboard'); // or whatever link
     }
  }
  else
  {
       $this->load->view('login_view');
  }
}

所以现在您的会话中有 user_id。是时候加载你的仪表板了,它应该链接到不同的网站

public function dashboard()
{
    $data['sites']=$this->User_Model->getPermittedSites();
    // Now you are only sending permitted sites to the user view
    $this->load->view('dashboard',$data);
}

如果你想让事情变得复杂,有很多方法,但这是最简单的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 2011-04-27
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多