• Не работает зависимый dropDoun, что не так делаю?

    slo_nik
    @slo_nik Куратор тега Yii
    День добрый.
    И что же всё-таки не работает?
    Да и код Ваш оставляет желать лучшего.
    Вот пример чуток получше)))
    Ответ написан
    Комментировать
  • Как в yii2 ActiveForm field вставить только input без обертки?

    slo_nik
    @slo_nik Куратор тега Yii
    Настройте fieldConfig для всей формы, тогда сможете убрать div с классом form-control
    <?php $form = ActiveForm::begin([
            'fieldConfig' => [
                'options' => [
                    'tag' => false,
                ]
            ]
        ]); ?>

    Вместо false можете указать свой тег.
    Но тут есть одно "НО", валидация перестаёт работать, надо возиться, чтобы восстановить, возможно делать ajax валидацию.
    Ответ написан
    Комментировать
  • Как получить данные из javascript в php (переменную допустим)?

    slo_nik
    @slo_nik Куратор тега PHP
    Маленькая подсказка
    <?!= <?php
    Ответ написан
    Комментировать
  • Yii2 почему не работает подключение стилей?

    slo_nik
    @slo_nik Куратор тега Yii
    Добрый вечер.
    Вместо
    'http://yii2.loc/web/css/bootstrap-reboot.css'
    пишется так же, как и для js
    'css/bootstrap-reboot.css'
    Ответ написан
  • Yii2 обаботка формы без ActiveForm?

    slo_nik
    @slo_nik Куратор тега Yii
    Ваша ошибка здесь
    public function actionLogin() {
        return $this->render("landing");
    
       // ......
    
        return $this->render('landing', [
            'model' => $model,
        ]);
      }


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

    Так что bootstrap тут совершенно ни при чём.
    Ответ написан
    Комментировать
  • Каким образом можно настроить разрешения для Apache в Ubuntu (Linux)?

    slo_nik
    @slo_nik
    Добрый вечер.
    Вот парочка моих вопросов/ответов, в них всё расписано
    Как вывести текст из файла? // установка и настройка apache2
    Отказ в доступе консольному контролеру, как решить? // права доступа, но скорей всего Вам не понадобится

    Пример конфигурации виртуального хоста, пути поменяйте на свои.
    <VirtualHost *:80>
    	ServerAdmin webmaster@localhost
    
    	ServerName localhost
    
    	DocumentRoot /home/slonik/localhost/www
    	<Directory />
    		Options FollowSymLinks
    		AllowOverride All
    	</Directory>
    	<Directory /home/slonik/localhost/www/>
    		Options +Indexes +FollowSymLinks -MultiViews
    		AllowOverride All
    		Order allow,deny
    		allow from all
    		Require all granted
    	</Directory>
    
    	ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    	<Directory "/usr/lib/cgi-bin">
    		AllowOverride None
    		Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    		Order allow,deny
    		Allow from all
    	</Directory>
    
    	ErrorLog /home/slonik/localhost/error.log
    	#AccessLog /home/slonik/localhost/access.log
    
    	# Possible values include: debug, info, notice, warn, error, crit,
    	# alert, emerg.
    	LogLevel warn
    
    	CustomLog ${APACHE_LOG_DIR}/access.log combined
    
        Alias /doc/ "/usr/share/doc/"
        <Directory "/usr/share/doc/">
            Options Indexes MultiViews FollowSymLinks
            AllowOverride None
            Order deny,allow
            Deny from all
            Allow from 127.0.0.0/255.0.0.0 ::1/128
        </Directory>
    
    </VirtualHost>
    Ответ написан
    Комментировать
  • Kartic fileinput как подставить программно файл?

    slo_nik
    @slo_nik Куратор тега Yii
    Добрый день.
    Вот рабочий вариант, измените под свои нужды.
    echo FileInput::widget([
                'name'          => 'attachment_' . $id,
                'options'       => [
                    'multiple' => true
                ],
                'pluginOptions' => [
                    'minFileCount' => 1,
                    'required' => true,
                    'deleteUrl'            => Url::to(['ajax-cars/del-img-moderator']),
                    'initialPreview'       => $initialPreview,
                    'initialPreviewConfig' => $caption,
                    'initialPreviewAsData' => true,
                    'showCaption'          => false,
                    'showBrowse'           => false,
                    'showRemove'           => false,
                    'showUpload'           => false,
                    'initialCaption'       => "The Moon and the Earth",
                    'overwriteInitial'     => false,
                    'fileActionSettings'   => [
                        'showDrag' => false,
                        'showZoom' => false
                    ]
                ]
            ])

    Здесь нужно подгрузить данные
    'initialPreview'       => $initialPreview,
    'initialPreviewConfig' => $caption,

    Можно сделать так, но лучше вынести в методы.
    $initialPreview = [];
    $caption        = [];
    
    foreach ($images as $image) {
         $initialPreview[] = Url::toRoute($image->path . DIRECTORY_SEPARATOR . 'mini' . DIRECTORY_SEPARATOR . $image->title, true);
         $caption[]        = [
               'key'   => $image->id,
               'extra' => [
                   'img' => [
                        'big'   => $image->path . DIRECTORY_SEPARATOR . $image->title,
                        'small' => $image->path . DIRECTORY_SEPARATOR . 'mini' . DIRECTORY_SEPARATOR . $image->title
                    ]
               ]
         ];
    }


    p.s. На js всё тоже самое
    $this->registerJs('
      var input = $("#uploadsfiles-imagesfile");
      $("#uploadsfiles-imagesfile").on("filebatchselected", function(){
          input.fileinput("upload")
      })
      
      var OtherActionButtons = "<button class=\"set-main btn btn-sm btn-kv btn-default btn-outline-secondary\" type=\"button\" {dataKey} title=\"Main photo\">";
          OtherActionButtons += "<i class=\"fa fa-star\"></i>";
          OtherActionButtons += "</button>";
          OtherActionButtons += "<button class=\"set-main btn btn-sm btn-kv btn-default btn-outline-secondary\" type=\"button\" {dataKey} title=\"Left\">";
          OtherActionButtons += "<i class=\"fa fa-undo\"></i>";
          OtherActionButtons += "</button>";
          OtherActionButtons += "<button class=\"set-main btn btn-sm btn-kv btn-default btn-outline-secondary\" type=\"button\" {dataKey} title=\"Right\">";
          OtherActionButtons += "<i class=\"fa fa-repeat\"></i>";
          OtherActionButtons += "</button>";
         
    /*  $(".btn-submit").on("click", function(){
          var Text = $(".file-caption-name").val();
          input.fileinput("upload");
          if(Text == ""){
            return false;
          }  
      })   */
        
      var funCi = $("#uploadsfiles-imagesfile").on("fileuploaded", function(event, data, previewId, index) {
      input.fileinput("destroy").fileinput({
        maxFileCount: 2,
        validateInitialCount: true,
        overwriteInitial: false,
        required: true,
        multiple: true,
        /*showUpload: false,
        showRemove: false,*/
        initialPreviewAsData: true,
        initialPreview: data.response.initialPreview,
        initialPreviewConfig: data.response.initialPreviewData,
        otherActionButtons: OtherActionButtons,
        uploadUrl: "' . Url::to(['upload-img']) . '",
        deleteUrl: "' . Url::to(['delete-img']) . '",
      })
      // setTimeout(function(){funCi}, 2500)
      input.closest("form").find("button").attr("disabled", false)
        console.log(data);
    });
    ', View::POS_END);
    Ответ написан
  • Как исправить загрузку системы после обновлений?

    slo_nik
    @slo_nik Автор вопроса
    Проблема решилась.
    Натолкнул на решение этот ответ.
    Сделал сначала как в ответе, но wget всё равно не запустился, завершался ошибкой.
    Загрузился с liveCD, скачал пакет по указанному адресу, сохранил в сломанную систему в домашнюю директорию.
    Потом загрузился в recove режим, выбрал пункт "root" и установил через dpkg.
    sudo dpkg -i libidn2-0_2.0.4-1.1build2_amd64.deb && sudo apt-mark hold libidn2-0

    Система заработала.
    Ответ написан
    Комментировать
  • Как сделать так чтобы файлы создаваемые laravel имели право исполняться?

    slo_nik
    @slo_nik Куратор тега PHP
    Доброе утро.
    У Вас эта проблема на локальном компьютере?
    Если да, то возможно Вам поможет вот этот мой вопрос с решением.
    Ответ написан
    Комментировать
  • Стоит ли изучать MVC не зная ООП?

    slo_nik
    @slo_nik Куратор тега PHP
    Добрый день.
    или стоит выучить ООП и только потом посмотреть данный плейлист?

    Да, ознакомьтесь сначала с документацией по php.
    Затем можете приступить к ознакомлению с основами ООП. Так же перечитайте всё, что идёт в дополнении к курсу, ссылку найдёте внизу страницы.
    Потом посмотрите вот эти видео.
    Изучите парочку frameworko-в.
    После всего этого можете приступать к написанию чего-либо.
    Ответ написан
    Комментировать
  • Регулярное выражение?

    slo_nik
    @slo_nik Куратор тега PHP
    Добрый день.
    if( !preg_match( "/^(\d{10})$/", $check ) ) {
    Ответ написан
  • Как использовать готовый PHP код локализации даты (месяца и дня недели)?

    slo_nik
    @slo_nik Куратор тега PHP
    Доброе утро.
    Должно быть подключено php-intl.
    //значение data в базе данных 1566668242
    // если значение data в базе 2019-09-02 10:18:00 - strtotime($result['data'])
    $sql("SELECT id,avatar,login,rey,message,komy,data FROM `messages2`WHERE `komy`='$a'");
    $row = $mysqli->query($sql);
    setlocale(LC_ALL, 'ru_RU.UTF-8');
    while($result = $row->fetch_assoc()){
       echo strftime('%a %e %B %G %H:%M:%S', $result['data']) . '<br>';
    }
    Ответ написан
    5 комментариев
  • Как в PHP добавить переадресацию на другой сайт?

    slo_nik
    @slo_nik Куратор тега PHP
    Ваш код можно переделать так.
    Это пример. Но так лучше не делать.
    $filesize = 1;
    $fio = 'Василий Евграфович Защёлкин';
    if ($filesize == 1) { // проверка на общий размер всех файлов. Многие почтовые сервисы не принимают вложения больше 10 МБ
        if(mail($to, $subject, $message, $headers)){
       // echo $_POST['fio'].', Ваше сообщение получено, спасибо!';
     ?>
        <script type="text/javascript">
          var message = "<?= $fio ?>" + ', Ваше сообщение получено, спасибо!';
          alert(message)
        </script>
     <?php 
        }
        else{
    ?>
        <script type="text/javascript">
          var message = "<?= $fio ?>" + ', Ваше сообщение НЕ отправлено, обратитесь к администратору!';
          alert(message)
        </script>
    <?php      
        }  
      } else {
        //echo 'Извините, письмо не отправлено. Размер всех файлов превышает 10 МБ.';
    ?>
       <script type="text/javascript">
         var message = 'Извините, письмо не отправлено. Размер всех файлов превышает 10 МБ.';
         alert(message)
       </script>
    <?php
      }
    ?>


    Лучше используйте готовую библиотеку для отправки писем. Например PHPMailer или SwftMailer.
    Эти библиотеки можно легко подключить при помощи Composer.
    Далее, не мешайте php с html, js, css. Это моветон.
    Отправляйте ajax запрос к php файлу, получайте от него ответ и обрабатывайте на стороне клиента.

    Проверять размер файла в php нужно так
    if($filesize < 1024 * 1024 * 10){
       // code
    }
    Ответ написан
  • Как правильно настроить роутинг Yii2?

    slo_nik
    @slo_nik Куратор тега Yii
    Добрый день.
    Рекомендую почитать документацию и посмотреть это видео.
    Если у Вас форма поиска, то описывать в конфигурации варианты будет морочительно.
    Это потому, что в строке запроса количество данных может меняться.
    Если количество данных у Вас фиксировано, то можно начать с этого.
    'rules' => [
      // если main у Вас контролер, а search действие
      '' => 'main/index',
     '<_a:(search)>/<request:\w+>' => 'main/search'
    ]

    Эти ссылки тоже помогут Вам.
    https://yiiframework.ru/forum/viewtopic.php?f=19&t...
    https://yiiframework.ru/forum/viewtopic.php?f=19&t...
    https://habr.com/ru/post/308948/
    Ответ написан
    21 комментарий
  • Почему при отправке формы страница перезагружается, а письмо не отправляется?

    slo_nik
    @slo_nik Куратор тега PHP
    Вечер добрый.
    Вы сделали опечатку в имени класса, поэтому и не сработала e.prevertDafault.
    У формы класс tel-form, а в js скрипте Вы пытаетесь обработать форму с классом tel_form.
    Ещё Вы не заключили блок if в фигурные скобки, а else в фигурных.
    if ( !this.checkValidity() ){
        alert('Пожалуйста, заполните обязательные поля.');
     }
      else {
    
      }

    Уберите атрибут novalidate у формы, enctype="multipart/form-data" используйте тогда, когда собираетесь отправлять файлы.
    После получения ответа от сервера Вашу страницу перезагрузит всё равно и направит на новый адрес
    success: function (data) {
                    window.location.href = "../спасибо-за-заказ.htm";
    },

    Думаю, что этот блок лишний, ведь у Вас для поля формы есть атрибут required и окончательно данные надо проверять на стороне сервера, в Вашем случае в файле tel_mail.php.
    if ( !this.checkValidity() ){
        alert('Пожалуйста, заполните обязательные поля.');
    }

    В общем Ваш код js может быть таким
    $(document).ready(function() {
    
    	// Добавляем маску для поля с номера телефона
    	$('.phonemasked').each(function(){
    	  $(this).mask('+7 (999) 999-99-99');
    	});
    
      $(".tel-form").on('submit', function(e) {
    	  e.preventDefault();
    	    $.ajax({
    	      type: "POST",
    	      url: "/form/tel_mail.php",
    	      data: $( this ).serialize(),
    	      success: function (data) {
    	        window.location.href = "../спасибо-за-заказ.htm";
    	      },
    	    });
    	      // очищаем поля
    	    $('#form-tel').val('');
      });
    });

    И не мешало бы переименовать файл спасибо-за-заказ.htm, сделать имя латиницей.
    Ответ написан
    2 комментария
  • Как сортировать кастомное поле с ActiveDataProvider?

    slo_nik
    @slo_nik Куратор тега Yii
    Вам надо добавить в модель Profile публичное свойство для вывода количества проданных полисов.
    У Вас оно сейчас называется $count.
    Так же есть связь с моделью Policy.
    Значит запрос может выглядеть так:
    $query = Profile::find()
       /* получаем все поля из таблицы профиля и считаем записи в таблице полисов */
       ->select(['{{%profile}}.*', 'count' => 'COUNT({{%policy}}.id)'])
       /* подгружаем "не жадно" необходимые данные через связь getPolicy() */
      ->joinWith('policy', false)
     /* группируем записи по id профиля */
      ->groupBy('{{%profile}}.id')
    /* сортируем по количеству проданных полисов в порядке убывания */
      ->orderBy(['count' => SORT_DESC]);
    
    $dataProvider = new ActiveDataProvider([
       'query' => $query
    ]);
    Ответ написан
    6 комментариев
  • Как стилизовать пункты меню в Menu::widget?

    slo_nik
    @slo_nik Куратор тега Yii
    Добрый день.
    Кроме того, что можно сделать так, как написал @kawabanga(хотя правильней будет использовать encodeLabel) можно попробовать дополнительно настроить виджет используя следующие методы:
    $labelTemplate
    $lastItemCssClass
    $linkTemplate
    $submenuTemplate
    и куча других способов.
    Подробней здесь.
    Ответ написан
    Комментировать
  • Почему не записывается в массив PHP?

    slo_nik
    @slo_nik Куратор тега PHP
    Добрый вечер.
    В последнем случае Вы сканируете вложенную директорию somo-dir0 и получаете файлы, которые находятся в ней.
    При проверке is_file() Вы указываете только имя файла, без пути к нему.
    Поэтому файл не найден и массив не заполняется.
    $files = scandir($dir.'/some-dir0');
    foreach($files as $fileNames){ 
        if($fileNames == '.' || $fileNames == '..') continue;
        if(is_file('some-dir0/' . $fileNames)){ 
          $fileVals[] = $fileNames;
        }
    }
    
    echo '<br/>';			
    print_r($fileVals);
    Ответ написан
    4 комментария