Задать вопрос
  • Как писать комментарии в yii2?

    Decadal
    @Decadal
    yii2 тут ни при чём.

    Всё зависит от того, каким редактором или IDE пользовался автор кода - обычно там свои встроенные генераторы для комментариев. Например, PhpStorm использует https://www.phpdoc.org/ - этот стандарт.
    @inheritdoc - согласно стандарту, отсылка к документации родительского класса.
    ставить так - перед функцией или переменной нажимаете три клавиши: /** , затем ENTER
    Ответ написан
    Комментировать
  • Какое проектирование БД более верное?

    Decadal
    @Decadal
    2a3494d97e3b34e05ebf5111ccb99102.png

    Discounts нужно связать двумя "многие-ко-многим", это делается при помощи двух вспомогательных таблиц. Таким образом, у вас один Discount может
    1) не иметь связи ни с товаром ни с категорией
    2) быть связанным с множеством товаров
    3) быть связанным с множеством категорий
    4) быть связанным как с несколькими товарами, так и с несколькими категориями
    Ответ написан
    7 комментариев
  • Отладка кода, PhpStorm 10?

    Decadal
    @Decadal
    Прикручивайте. Для отладки нужно лезть в настройки вашего php-интерпретатора, чего PhpStorm, разумеется, не сделает сам по себе.
    Ответ написан
    Комментировать
  • Когда нужно использовать computed, а когда methods во Vue.js? И в чем их разница?

    Decadal
    @Decadal
    Если результат вашей функции не опирается на внутренние данные, используйте methods.
    Например, у вас есть внутри vue некая range, которая служит верхней границей для Math.random. Если реализовать при помощи метода, то каждый раз он будет возвращать новое значение Math.random.
    Реализация через computed будет ожидать изменений вашего range, а иначе вернет то же число, которое сгенерилось первый раз
    js:
    var app = new Vue({
            el: '#content',
            data: {
                range: 1
            },
            computed: {
                rand: function () {
                    return Math.random() * this.range ; //ожидалось что app.rand будет давать случайное число
                }
            },
            methods: {
                show: function (event) {
                    alert('Случайное число: ' + this.rand); // но нет, число одно и то же
                },
           }
    });

    html:
    <div id="content">
    <button v-on:click="show">показать число</button>
    </div>


    В итоге оно сгенерирует число один раз и будет выводить его постоянно при клике на кнопку. Если вы введете в консоли app.range = 2; то генерируемое число разово изменится.

    Пример для лайков, упомянутый в комментарии:
    new Vue({
       el: '#content',
       data: {
          likes: 0,
       },
    });

    <div id="content"><button v-on:click="likes += 1">+1</button></div>
    Ответ написан
    9 комментариев
  • Почему не создается папка /vendor/?

    Decadal
    @Decadal
    Проверьте наличие файла composer.json - не пустой ли он, и в той же директории, откуда вы запускаете composer. При успешном выполнении composer генерит файл composer.lock, в котором физически прописаны все загруженные зависимости. Если его нет - composer не отработал. Посмотрите, всё ли хорошо с правами и имеет ли право скрипт создавать папки в директории.
    Ответ написан
    Комментировать
  • Как объединить PHP и HTML?

    Decadal
    @Decadal
    Как бы это странно ни звучало, чтобы не нарушать читабельность - не совмещайте PHP и HTML.
    Эту проблему решают по-разному - в MVC для html используются вьюхи, где от php только if, for и foreach. В некоторых фреймворках (Yii2, например) используют виджеты. Можно использовать шаблонизаторы, как twig в Symfony.
    Главное не лепить вообще всё в одну кучу - где рендер, там и коннект к бд.
    Ответ написан
    Комментировать
  • Как очистить предыдущие значения рекурсивной функции?

    Decadal
    @Decadal
    https://jsfiddle.net/6ba1yxgz/6/

    всё дело в обработчике. Каждый раз, когда вы навешиваете обработчик click на div, он не перезаписывает предыдущий, а добавляется к нему. Согласитесь, было бы неудобно, если бы событие могла слушать только одна единственная функция.
    Поэтому для избежания множества одинаковых обработчиков предыдущий следует отключать. Хотя вам стоит ещё немного подумать над вашей функцией.
    Ответ написан
    2 комментария
  • Почему не устанавливается расширение через composer?

    Decadal
    @Decadal
    попробуйте поставить в своём composer.json minimum-stability: 'dev'
    Ответ написан
    Комментировать
  • Как на Yii2 в UrlManager адресовать все страницы на один route?

    Decadal
    @Decadal
    '<url:(.*)>' => 'site/index',

    \w+ - это строка регулярного выражения. w - cопоставляется с любым алфавитно-цифровым символом из базового латинского алфавита, включая символ подчёркивания. Эквивалентен набору символов [A-Za-z0-9_]. Символ + означает один или более символов из набора [A-Za-z0-9_]
    Полезно прочитать про именованные параметры
    Ответ написан
    Комментировать
  • Как сделать ссылки не кликабельными?

    Decadal
    @Decadal
    foreach ( $the_tags as $tag ){
         $tags[] = $tag->name;
    }


    вы это имели в виду?
    Ответ написан
    2 комментария
  • Как оформить произвольный класс в Yii2?

    Decadal
    @Decadal
    MVC - архитектура, которая строится при помощи связки модель-вьюха-контроллер. Но это не значит, что любой класс, который вы захотите создать, должен быть либо вьюхой, либо контроллером, либо моделью. Нет, смотрите по назначению вашего класса - в Yii2 существуют хелперы, которые просто созданы в папке helpers (можете создать свою - frontend/helpers, почему бы и нет?). И вызываются примерно так: ArrayHelper::getValue($array, 'foo.bar.name');
    Возможно, ваш класс лучше оформить как сервис - тогда почитайте про сервис-локатор. Читайте документацию, смотрите, как работает сам Yii2 и черпайте решения из него же.
    Где именно создавать классы? Решайте сами. Если работаете с advanced-шаблоном, можете создать в common папку components и запилить там свои классы. Не забудьте для них указать namespace common\components; и тогда вы сможете подключать их так:
    use common\components\MyClassName;
    //...
    $api = new MyClassName($someConfig);
    Ответ написан
    3 комментария
  • Почему не корректно работает timestampBehavior yii2?

    Decadal
    @Decadal
    В документации yii2 есть такие строки:

    For the above implementation to work with MySQL database, please declare the columns(created_at, updated_at) as int(11) for being UNIX timestamp.


    Документация

    попробуйте изменить типы полей. Кроме того, там же есть пример реализации timestampBehavior.
    Ответ написан
    3 комментария
  • Проблемы со слайдером?

    Decadal
    @Decadal
    Потому что этот слайдер подключается в виде плагина jQuery, и вам недостаточно скопировать лишь html-элементы. Вам нужно подключить и скрипты, именно в том порядке, в каком они подключаются на сайте-оригинале
    Ответ написан
  • Какую ОС выбрать для Yii 2?

    Decadal
    @Decadal
    Книгу лучше пока отложить, она тяжеловата для начинающих.
    Вы от Linux все равно никуда не денетесь, это почти как с английским: да, до определенного момента можно почти не учить язык. Но придет время, когда незнание языка станет тормозить ваше развитие.
    То же самое с ОС - пока вы только начинаете постигать фреймворк, работайте с чем удобно. Но придет время для практики, а там 90% что прод на линукс. И незнание нюансов будет стоить многих часов (возможно, нервов тоже).
    Ответ написан
    1 комментарий
  • Куда податься PHP программисту?

    Decadal
    @Decadal
    Поступай в универ для корки, учи английский. И когда говорят про опыт в программировании, обычно имеют в виду полную ставку, поэтому советую делить на три то время, которое ты работаешь с языком. Ну просто 9 класс и два года опыта это забавно смотрится вместе.
    Ответ написан
    3 комментария
  • Можно ли сделать два action у формы?

    Decadal
    @Decadal
    форме нужно поместить дополнительный action в другой атрибут. Например:
    <form action="href1" data-action="href2">...</form>


    $("form").submit(function() {
            var $self = $(this);
            var url1 = $self.attr('action'); 
            var url2 = $self.data('action');
            $.ajax({
                type: $self.attr('method'),
                url: url1,
                data: $self.serialize(),
                success: function(data) {
                    //... 
                },
            });
            $.ajax({
                type: $self.attr('method'),
                url: url2,
                data: $self.serialize(),
                success: function(data) {
                    //... 
                },
            });
            return false;
       });


    вот самая примитивная реализация, можете отталкиваться от неё
    Ответ написан
    Комментировать
  • Как выбирать данные из массива JavaScript?

    Decadal
    @Decadal
    Не знаю что там происходит, но в data у вас массив, в котором массив, в котором массивы чисел. Лишняя вложенность.
    вот, должно работать, но придумайте что-то ... что-то менее трешовое)
    data = data[0];
    for (var i = 0; i < data.length; i++) {
               for (var j = 0; j < data[i].length; j++) {
                   console.log(data[i][j]);
                   console.log($(this).attr("seats"))
                   if ($(this).attr("seats") == data[i][j]) {
                       console.log('yes')
                       console.log('yes' + $(this).attr("seats"))
                       $(this).addClass('status-blocked')
                   }
               }
    }
    Ответ написан
  • Почему в моем случае не работает оператор switch?

    Decadal
    @Decadal
    Потому что в case сначала вычисляется значение выражения а потом сравнивается с параметром. В данном случае у вас в case стоит предикат (функция которая возвращает результат булевского типа). Соответственно, switch проверит, является ли a - переменной со значением булевского типа. А ведь не является. И работать не будет. Попробуйте передать а как true - и увидите, как именно работает switch. Он выведет 'не попал', потому что при вычислении первого case параметр a будет приведен к 1 и пройдет по условию >= 1 && <= 10
    Вам не подходит switch в данном случае
    Ответ написан
    Комментировать
  • Как подготовиться к устройству на работу?

    Decadal
    @Decadal
    Насколько реально вам собраться, только вам и известно.
    Не надо "хотеть попробовать", пробуйте и всё. Сложно понять, что именно нужно для обретения рабочего места? Ходите на собеседования. Зададут вопросы, дадут тестовые задания, вы поймёте, где пробелы в знаниях и практике.
    Куда лучше сначала поставить себе цель решать реальные задачи, а не "найти работу". В IT платят хорошие деньги не тем, кто ищет работу, а тем, кто решает задачи.
    Какие задачи? Какие угодно. Сделать очередную CMS? Вперёд. Сделать какую-нибудь онлайн-кассу? Делайте. Тогда вы начнёте ставить перед собой практичные вопросы, искать на них ответы и принимать решения, а это и есть опыт.
    Ответ написан
    Комментировать