Попытка загрузить часть страницы с тегом # через контроллер

Я имею в виду страницу, которая на самом деле состоит из двух частей, которые доступны через # тегов, как login#signin а также login#signup, Когда страница загружается в первый раз, она показывает форму входа без #signin без проблем.

Таким образом, вход не вызывает проблемы, поскольку он загружается в folder/login, Но когда я пытаюсь поставить folder/login#signup загрузить непосредственно регистрационную часть выдает ошибку, что нет представления login#signup.php, Как справиться с этой ситуацией?

$this->load->view('workers/login#signup'); не работает.

Когда я не ставлю #signup он загружает форму входа, что странно.

-1

Решение

Я подробнее расскажу о своих первоначальных комментариях, чтобы выяснить причину этой ошибки и способы ее устранения.

Причина проблемы

Как упоминалось в комментариях, вы не можете вид с помощью точки привязки. Например, это делает не Работа:

view('workers/login#signup'); // The #signup should not be here.

документация состояния:

Загрузка представления

Для загрузки определенного файла представления вы будете использовать следующий метод:

$this->load->view('name');

Где имя — это имя вашего файла просмотра.

Имя файла — это «имя», а не «имя # регистрация».

Дальше,

Расширение файла .php указывать не нужно, если вы не используете что-то отличное от .php.

Это подразумевает, что когда вы используете view('name')CodeIgniter по умолчанию загрузит файл name.php, Если вы включите #signup в нем то CodeIgniter не сможет найти name#signup.php потому что этот файл не существует.

Правильный способ справиться с вещами

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

Вот упрощенное объяснение того, как с этим справиться:

function login() {

// Data to be passed to the view (you may or may not already have this)
// More info: https://codeigniter.com/user_guide/general/views.html#adding-dynamic-data-to-the-view
$data = array();// Validation has failed...
$this->form_validation->run() == FALSE ) {

// Set variable to redirect to #signup upon page load
$data['redirect_to_signup'] = true;
}// Load view with $data which contains values to be passed to the view
$this->load->view('workers/login', $data);

}

В вашем workers/login просмотреть файл, нам просто нужно проверить, если redirect_to_signup значение существует. Если он существует, то мы можем использовать простой JavaScript для прокрутки вниз #signup форма:

<?php if (isset($redirect_to_signup) && $redirect_to_signup === true): ?>
<script>
var top = document.getElementById('signup').offsetTop;
window.scrollTo(0, top);
</script>
<?php endif; ?>

Поскольку ваш объект проверки все еще действителен, вы можете использовать встроенные функции CodeIgniter для предварительной загрузки элементов формы с помощью set_value() вспомогательные функции. Например:

<input type="text" name="email" value="<?php echo set_value('email'); ?>">

Это, надеюсь, объясняет, как добиться того, чего вы хотите:

  1. Подтвердить отправленную пользователем форму; а также
  2. Если есть ошибки, перезагрузите форму с сообщениями проверки; а также
  3. Прокрутите вниз до #signup Форма на странице.

Одна альтернатива использует redirect('login#signup'), но Я бы не рекомендовал этот метод. Вам нужно будет сохранить значения формы и ошибки проверки в сеансе, чтобы отобразить их на следующей странице. Вы также сталкиваетесь с проблемой, что пользователь может нажать кнопку обновления, и тогда все значения будут потеряны.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector