Я имею в виду страницу, которая на самом деле состоит из двух частей, которые доступны через # тегов, как login#signin
а также login#signup
, Когда страница загружается в первый раз, она показывает форму входа без #signin
без проблем.
Таким образом, вход не вызывает проблемы, поскольку он загружается в folder/login
, Но когда я пытаюсь поставить folder/login#signup
загрузить непосредственно регистрационную часть выдает ошибку, что нет представления login#signup.php
, Как справиться с этой ситуацией?
$this->load->view('workers/login#signup');
не работает.
Когда я не ставлю #signup
он загружает форму входа, что странно.
Я подробнее расскажу о своих первоначальных комментариях, чтобы выяснить причину этой ошибки и способы ее устранения.
Как упоминалось в комментариях, вы не можете вид с помощью точки привязки. Например, это делает не Работа:
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'); ?>">
Это, надеюсь, объясняет, как добиться того, чего вы хотите:
#signup
Форма на странице.Одна альтернатива использует redirect('login#signup')
, но Я бы не рекомендовал этот метод. Вам нужно будет сохранить значения формы и ошибки проверки в сеансе, чтобы отобразить их на следующей странице. Вы также сталкиваетесь с проблемой, что пользователь может нажать кнопку обновления, и тогда все значения будут потеряны.
Других решений пока нет …