Загрузите представление модуля HMVC в Iframe в Codeigniter

Я новичок в этом, и некоторая помощь будет оценена.

Я создаю боковую панель в CI-Boilerplate-Project, который содержит модули (виджеты), которые я запустил с HMVC https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc.

В боковой панели у меня есть виджет, который отображает список друзей со статусом онлайн / оффлайн. Пользователь имеет возможность включать / выключать виджеты в разделе управления.

В обзоре профиля:

<aside class="sidebox right">
    <?php foreach ($boxes as $boxName => $boxSetting)
    {
         echo Modules::run($boxName, $boxSetting['box_visible']);
    }
    ?>
</aside>

если box_visible == 1, виджет будет отображаться.

контроллер:

class Myfriends extends SM_Controller
{
function __construct()
{
    parent::__construct();
}

public function index($visible = false)
{
    $user = $this->session->userdata('user');
    $myf = $this->widget_model->get_friends($user['user_id'], 5);
    $data['friends'] = $myf;

    if ($visible) $this->load->view('myfriends', $data);
}
}

Посмотреть:

<html>
<head>
    <meta http-equiv="refresh" content="5">
</head>
<body>
<div class="box friendsbox">
  <div id="header"><h3><?=$boxTitle?></h3></div>
  <div id="boxcontent">
    <ul>
    <?php foreach ($friends as $friend): ?>
      <li>
        <div id="thb_img">
        <img src="<?=img_thumb($friend['file_path'], 50, 50) ?>" />
        </div>
        <div id="short_desc">
          <a href="<?= site_url('widget_functions/show_user/' . $friend['uu_id']) ?>">
    <?= ucfirst($friend['user_name']) . ' ' . ucfirst($friend['user_lastname']) . ' ' ?>
          </a>
        <?php if ($friend['is_online']): ?>
        <span style="color: green">online</span>
        <?php endif; ?>
        </div>
       </li>
    <?php endforeach; ?>
    </ul>
   </div>
   <div id="footer">&raquo; mehr</div>
</div>
</body>
</html>

Теперь мне нужно обновлять список друзей каждые 1-2 минуты, поэтому я попытался загрузить moduleview внутри iframe:

<aside class="sidebox right">
    <?php foreach ($boxes as $boxName => $boxSetting): ?>
    <?php if ($boxName == 'myfriends' && $boxSetting['box_visible'] == 1) { ?>
            <iframe src="<?php echo site_url('myfriends/index'); ?>" ></iframe>
        <?php
        }
        else
        {
            echo Modules::run($boxName, $boxSetting['box_visible']);
        }
    ?>
    <?php endforeach; ?>
</aside>

НО эта доза не работает! Место виджета emtpy.

У вас есть идеи, как заставить это работать?

ценю твою помощь

1 ответ

Я считаю, что основная проблема заключается в том, как вы инициализируете метод индекса. метод индекса довольно сложен с параметрами в Codeigniter. В моих проектах единственный способ получить значения аргументов, передаваемых параметрам индекса, - это использовать библиотечный метод URI $this->uri-> сегмент (n). Другими словами, я считаю, что значение $visible неправильно передается в тело index()

В любом случае, я думаю, что вы должны создать другой метод в вашем классе MyFriends, например, с именем render(), и вызывать его вместо того, чтобы передавать метод index(). Теперь render() может хорошо играть с трюком инициализации $visible=false. Надеюсь это поможет

Другие вопросы по тегам