Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
alexa777
Сообщения: 299 Зарегистрирован: 2016.03.01, 17:38
Сообщение
alexa777 » 2018.07.11, 17:49
Привет есть js код который должен загружать php фаил с формами
Код: Выделить всё
$(function() {
$('#choose_forms').click(function () {
var vibor = $('#choose_forms').find('input').val();
if(vibor == '16') {
$( ".element" ).load( "/frontend/views/board/form_avto.php", function() {
alert( "Load was performed." );
});
} else if(vibor == '17') {
$('.element').text('Контент 2');
} else if(vibor == 'str3') {
$('.element').text('Контент 3');
}
});
});
Но дебагер показывает что такого файла form_avto.php нет, хотя он существует по данному пути
Почему?
zelenin
Сообщения: 10596 Зарегистрирован: 2013.04.20, 11:30
Сообщение
zelenin » 2018.07.11, 18:01
аякс работает на клиенте, т.е. в вашем браузере. таким образом работает с урлами, а не с файлами.
alexa777
Сообщения: 299 Зарегистрирован: 2016.03.01, 17:38
Сообщение
alexa777 » 2018.07.11, 18:07
zelenin писал(а): ↑ 2018.07.11, 18:01
аякс работает на клиенте, т.е. в вашем браузере. таким образом работает с урлами, а не с файлами.
А как тогда сделать правильно?
Этот скрипт должен выводить разные формы при выборе определенных категорий
zelenin
Сообщения: 10596 Зарегистрирован: 2013.04.20, 11:30
Сообщение
zelenin » 2018.07.11, 18:34
alexa777 писал(а): ↑ 2018.07.11, 18:07
zelenin писал(а): ↑ 2018.07.11, 18:01
аякс работает на клиенте, т.е. в вашем браузере. таким образом работает с урлами, а не с файлами.
А как тогда сделать правильно?
делать запрос на урл
Dominus
Сообщения: 892 Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:
Сообщение
Dominus » 2018.07.11, 19:14
alexa777 писал(а): ↑ 2018.07.11, 18:07
zelenin писал(а): ↑ 2018.07.11, 18:01
аякс работает на клиенте, т.е. в вашем браузере. таким образом работает с урлами, а не с файлами.
А как тогда сделать правильно?
Этот скрипт должен выводить разные формы при выборе определенных категорий
Как то так:
Код: Выделить всё
<?php
//...
$script = "
$(function() {
$('#choose_forms').change(function (e) {
var select = e.currentTarget,
vibor = select.value,
element = $('.element'),
callUrl = select.dataset.url;
if(vibor == '16') {
$.ajax({
type: 'post',
url: callUrl,
data: ({vibor: vibor})
}).done(function (response) {
element.html(response.body);
});
} else if (vibor == '17') {
element.text('Контент 2');
} else if(vibor == 'str3') {
element.text('Контент 3');
}
});
});
";
$this->registerJs($script);
?>
<select id="choose_forms" data-url="<?= yii\helpers\Url::to(['/main/default/test']) ?>">
<option value="16">16</option>
<option value="17">17</option>
<option value="str3">str3</option>
</select>
<div class="element">...</div>
Controller:
Код: Выделить всё
public function actionTest()
{
if (Yii::$app->request->isAjax) {
Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
return [
'body' => $this->renderPartial('_form1',[
'vibor' => Yii::$app->request->post('vibor'),
]),
];
}
throw new yii\web\NotFoundHttpException('The requested page does not exist.');
}
_form1.php
Код: Выделить всё
<h1>Это Форма 1</h1>
<p>Выбрано: <?= $vibor ?></p>
А вообще, в зависимости какое значение пришло в контроллер, рендерить соответствующую форму.
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
Dominus
Сообщения: 892 Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:
Сообщение
Dominus » 2018.07.11, 19:37
То есть получается как то так:
Код: Выделить всё
<?php
//...
$script = "
$(function() {
$('#choose_forms').change(function (e) {
var select = e.currentTarget,
vibor = select.value,
element = $('.element'),
callUrl = select.dataset.url;
$.ajax({
type: 'post',
url: callUrl,
data: ({vibor: vibor})
}).done(function (response) {
element.html(response.body);
});
});
});
";
$this->registerJs($script);
?>
<select id="choose_forms" data-url="<?= yii\helpers\Url::to(['/main/default/test']) ?>">
<option value="16">16</option>
<option value="17">17</option>
<option value="str3">str3</option>
</select>
<div class="element">...</div>
Controller:
Код: Выделить всё
public function actionTest()
{
if (Yii::$app->request->isAjax) {
Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
if ($vibor = Yii::$app->request->post('vibor')) {
if ($vibor == 16) {
return [
'body' => $this->renderPartial('_form1', [
'vibor' => $vibor,
]),
];
} else if ($vibor == 17) {
return [
'body' => $this->renderPartial('_form2', [
'vibor' => $vibor,
]),
];
} else {
return [
'body' => $vibor,
];
}
}
}
throw new yii\web\NotFoundHttpException('The requested page does not exist.');
}
_form1.php
Код: Выделить всё
<h1>Это Форма 1</h1>
<p>Выбрано: <?= $vibor ?></p>
_form2.php
Код: Выделить всё
<h1>Это Форма 2</h1>
<p>Выбрано: <?= $vibor ?></p>
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
alexa777
Сообщения: 299 Зарегистрирован: 2016.03.01, 17:38
Сообщение
alexa777 » 2018.07.12, 16:23
Не получается, так как выбор категорий у меня многоуровневый и сделан по другому, а как js поправить ума не хватате.
вот так у меня реализован вывод категорий, вот тут присваивается value при выборе категории <input type="hidden" id="board-category_id" name="Board[category_id]" value="'.($model->isNewRecord ? '' : $category_id).'"/>
Код: Выделить всё
<div id="choose_forms">
<?php
function getChildOptions($cats, $offset) {
$str = "<ul class='dropdown-menu'>";
foreach($cats as $cat) {
if (empty($cat['children'])) {
$str .= "<li class='cat-select-item' data-value='".$cat['id']."' >".$offset.$cat['name']."</li>";
} else {
$str .= "<li class='cat-select-item dropdown-submenu' data-value='".$cat['id']."' >".$offset.$cat['name'];
if (!empty($cat['children'])) $str .= getChildOptions($cat['children'], $offset);
$str .= "</li>";
}
}
$str .= "</ul>";
return $str;
}
$categories = \common\models\Category::getCategorys();
if(!$model->isNewRecord){
$id_category = \common\models\Board::getBoard($model->id);
$category = \common\models\Category::getOneCategory($id_category->category_id);
if($id_category->category_id == 0){
$category_name = 'Выберите категорию...';
$category_id = '';
}else{
$category_name = $category->name;
$category_id = $id_category->category_id;
}
}
$dropdownMenu = '<div class="dropdown"><button class="btn btn-default dropdown-toggle" type="button" data-toggle="dropdown">'.($model->isNewRecord ? 'Выберите категорию...' : $category_name).'<span class="caret"></span></button>' . getChildOptions($categories, '') . '<input type="hidden" id="board-category_id" name="Board[category_id]" value="'.($model->isNewRecord ? '' : $category_id).'"/></div>';
echo $dropdownMenu;
?>
</div><br />
Dominus
Сообщения: 892 Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:
Сообщение
Dominus » 2018.07.12, 17:26
Покажите HTML код
Код: Выделить всё
<div id="choose_forms">
<!-- что тут генерируется? -->
</div>
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
Dominus
Сообщения: 892 Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:
Сообщение
Dominus » 2018.07.12, 17:55
Ну это я понял, только не то что я просил, не внешний вид, а HTML)
Вот например с dropdown.
Dropdown может быть сгенерирован на подобии такого же, то есть скрытого поля по сути и не надо.
Код: Выделить всё
<?php
//...
$script = "
$(function() {
$('#choose_forms li').click(function(e){
e.preventDefault();
var callUrl = $(this).parent().get(0).dataset.url, // URL берем из атрибута data-url тега ul
select = e.currentTarget,
vibor = select.dataset.value, // Получаем значение из data-value тега li
element = $('.element'); // Контейнер куда будем выводить результат
// Отправляем
$.ajax({
type: 'post',
url: callUrl,
data: ({vibor: vibor})
}).done(function (response) {
// Выводим результат
element.html(response.body);
});
});
});
";
$this->registerJs($script);
?>
<div id="choose_forms">
<!-- Single button -->
<div class="btn-group">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Выберите категорию <span class="caret"></span>
</button>
<ul class="dropdown-menu" data-url="<?= yii\helpers\Url::to(['site/test']) ?>">
<li data-value="16"><a href="#">Категория 16</a></li>
<li data-value="17"><a href="#">Категория 17</a></li>
<li data-value="str3"><a href="#">Категория str3</a></li>
<li role="separator" class="divider"></li>
<li data-value="18"><a href="#">Категория 18</a></li>
</ul>
</div>
</div>
<div class="element">...</div>
Контроллер такой же как и выше.
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
alexa777
Сообщения: 299 Зарегистрирован: 2016.03.01, 17:38
Сообщение
alexa777 » 2018.07.12, 18:08
Dominus писал(а): ↑ 2018.07.12, 17:55
[/code]
Контроллер такой же как и выше.
Вот html код
Код: Выделить всё
<div id="choose_forms">
<div class="dropdown">
<button class="btn btn-default dropdown-toggle" type="button" data-toggle="dropdown">Выберите категорию...<span class="caret"></span></button>
<ul class='dropdown-menu'>
<li class='cat-select-item dropdown-submenu' data-value='9' >Авто, транспорт
<ul class='dropdown-menu'>
<li class='cat-select-item' data-value='16' >Иномарки</li>
<li class='cat-select-item' data-value='17' >Отечественные </li>
</ul>
</li>
<li class='cat-select-item dropdown-submenu' data-value='10' >Недвижимость
<ul class='dropdown-menu'>
<li class='cat-select-item' data-value='14' >Аренда</li>
<li class='cat-select-item' data-value='15' >Продажа</li>
</ul>
</li>
<li class='cat-select-item dropdown-submenu' data-value='11' >Работа
<ul class='dropdown-menu'>
<li class='cat-select-item dropdown-submenu' data-value='12' >
Вакансии
<ul class='dropdown-menu'>
<li class='cat-select-item' data-value='18' >Водители</li>
</ul>
</li>
<li class='cat-select-item' data-value='13' >Резюме</li>
</ul>
</li>
<li class='cat-select-item dropdown-submenu' data-value='22' >Водитель
<ul class='dropdown-menu'>
<li class='cat-select-item' data-value='24' >ghghbj,
</li>
</ul>
</li>
<li class='cat-select-item' data-value='23' >Автоkmkmkm</li>
</ul>
<input type="hidden" id="board-category_id" name="Board[category_id]" value=""/>
</div>
</div>
Dominus
Сообщения: 892 Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:
Сообщение
Dominus » 2018.07.12, 18:22
Ну тоже самое, с небольшой коррекцией
Код: Выделить всё
<?php
//...
$script = "
$(function() {
$('#choose_forms .dropdown-menu li').click(function(e){
e.preventDefault();
var callUrl = $('#choose_forms').get(0).dataset.url,
select = e.currentTarget,
vibor = select.dataset.value,
element = $('.element'),
hidden = $('#board-category_id');
// console.log(vibor);
$.ajax({
type: 'post',
url: callUrl,
data: ({vibor: vibor})
}).done(function (response) {
element.html(response.body);
hidden.val(vibor);
});
});
});
";
$this->registerJs($script);
?>
<div id="choose_forms" data-url="<?= yii\helpers\Url::to(['site/test']) ?>">
<!-- ... -->
<input type="hidden" id="board-category_id" name="Board[category_id]" value=""/>
</div>
<div class="element">...</div>
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
alexa777
Сообщения: 299 Зарегистрирован: 2016.03.01, 17:38
Сообщение
alexa777 » 2018.07.12, 18:46
Тут на что надо урл указывать? data-url="<?= yii\helpers\Url::to(['site/test']) ?>">
пробую на board/create дебагер показывает два невыполненных Ajax запроса
И почему то список категорий выпадающих при открытии, уехал вниз браузера за пределы видимости
Dominus
Сообщения: 892 Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:
Сообщение
Dominus » 2018.07.12, 18:49
В текущем случае url указывает на контроллер SiteController и в нем экшен actionTest()
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
alexa777
Сообщения: 299 Зарегистрирован: 2016.03.01, 17:38
Сообщение
alexa777 » 2018.07.12, 18:54
Dominus писал(а): ↑ 2018.07.12, 18:49
В текущем случае url указывает на контроллер SiteController и в нем экшен actionTest()
Спасибо сейчас буду разбирается, если что отпишусь
alexa777
Сообщения: 299 Зарегистрирован: 2016.03.01, 17:38
Сообщение
alexa777 » 2018.07.13, 15:03
Dominus писал(а): ↑ 2018.07.12, 18:49
В текущем случае url указывает на контроллер SiteController и в нем экшен actionTest()
Все получилось, еще раз спасибо
Dominus
Сообщения: 892 Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:
Сообщение
Dominus » 2018.07.18, 21:58
AlbertInsOm писал(а): ↑ 2018.07.17, 10:30
Есть некоторый текст, который храниться в переменной. Вопрос, как с помощью PHP записать его содиржимое в файл?
Запись в файл
Код: Выделить всё
$content = "Какой то текст";
file_put_contents(Yii::getAlias('@runtime').'/my_text.txt', $content);
Чтение из файла
Код: Выделить всё
$content = file_get_contents(Yii::getAlias('@runtime').'/my_text.txt');
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!