Задать вопрос
  • Как отформатировать результат чтоб он был без не значащих нулей?

    Delgus
    @Delgus Автор вопроса
    Есть такой вариант. но выглядит довольно стремно
    select 
    	case
    		when c1 = 0 then ''
    		else rtrim(rtrim(c1::numeric(16,2)::text,'0'),'.')
    	end result
    from newtable
    Ответ написан
    Комментировать
  • Как создать переменную или массив в котором будут элементы которые можно занести в бд?

    Delgus
    @Delgus
    Нужен сервер и соответственно на нем
    1. веб-сервер(Apache или NGINX, лучше nginx) - установить, настроить
    2. php или php-fpm - установить, настроить
    3. mysql - установить, настроить

    Когда все готово и сервер готов слушать клиента, отправляем по протоколу HTTP запрос, в современном мире это делается используя чудную технологию ajax. Ну вы про фронтенд, про HTML и JS ничего не спросили, так что по-любому вы знаете что такое ajax, так ведь?

    Так вот при клике на кнопку добавить в корзину отправляется запрос на сервер, на сервере скрипт написанный на php обрабатывает параметры запроса, открывает соединение с mysql, сохраняет полученные данные, отдает клиенту ответ, что то типа {ok:true}(это формат json, знаете что это такое?)

    Создать переменную или массив на php, знаете как? про глобальные переменные в php слышали? Может Котерова PHP 7 в подлиннике читали, ну или хотя бы посмотрели часовой видос хауди хо "php за час"? Гуглом пользоваться умеете?

    В результате получится что то вроде этого https://github.com/rintoug/Simple-PHP-Shopping-Cart

    Достаточный толчок???
    Ответ написан
    Комментировать
  • Что выбрать PHP, ASP. NET, NODE.JS, Python(Flask или Django)?

    Delgus
    @Delgus
    Ну сколько можно!!!
    PHP - Livestreet CMS или Humhub,
    1. за неделю настроили и дописали что вам нужно. MVP готов.
    2. документация есть по обоим
    3.Сняли VPS - 100 рублей в месяц

    На случай если вы вдруг оказались дико популярными или у вас в команде топовые менеджеры и маркетологи 2 варианта решения:
    1. Пишем микросервисную архитектуру, БД - POSTRGRESQL, шина данных NATS STREAMING. Сервисы на Golang очень хорошо пишутся. Настраиваем CI/CD. Когда сервисов становится слишком много и становится сложно ими управлять - переезжаем в Kubernetes
    2. Выделяем мне оклад в 500000 руб в месяц и на команду разработчиков - 3-4 миллиона в месяц
    Ответ написан
    Комментировать
  • Если я хочу реализовать регистрацию на сайте, то каким языком воспользоваться?

    Delgus
    @Delgus
    регистрация и авторизация - очень сложные темы, может вам стоит начать с создания динамичного сайта( чтоб контент страниц из БД брал) или реализовать простейшее REST API.

    Если вы будете писать бэкенд на PHP то вам надо будет изучить основы языка, освоить на уровне пользователя linux, освоить git, composer. Потом возьмете какой-нибудь фреймворк(Laravel или Yii2 например) и все реализуете.

    вы также можете выбрать NodeJS, golang, даже ruby,

    Но вообще правильный ответ - на серверном.
    Ответ написан
    Комментировать
  • Как сложить два массива, на примере?

    Delgus
    @Delgus
    Ну например так
    <?php
    $data1 = [
                'id' => 1, 
                'quantity' => 10, 
            ];
    $data2 = [
                'id' => 1, 
                'quantity' => 20, 
            ];
    
    function my_sum($all_data){
        return array_reduce($all_data,function($a, $b) 
        {
            $b['quantity'] = $a ? $b['quantity'] + $a['quantity']:$b['quantity'];
            return $b;
        });
    }
    
    $summ = my_sum([$data1,$data2]);
    
    var_dump($summ);


    В песочнице
    sandbox.onlinephpfunctions.com/code/e148c8793466fe...
    Ответ написан
    2 комментария
  • Почему стирается значение даты при передаче?

    Delgus
    @Delgus
    KevinSmash, в beforeValidate посмотри внимательно...там же strtotime вызывается
    Надо знать что при вызове save вызываются и другие функции

    При вызове метода save() или save(true) - цепочка следующая
    - beforeValidate()->validate()->afterValidate()->beforeSave()->save()->afterSave()

    А когда ставим save(false) то
    beforeSave()->save()->afterSave()

    Почитайте документацию Yii2, так очень долго рассказывать можно
    Ответ написан
    Комментировать
  • Как передать id Методом POST?

    Delgus
    @Delgus
    Лучший способ:
    GET sita-poka-chto.netu/advert_id/999999999
    и использовать фреймворк

    метод POST используется, когда вы хотите сохранить что то на сервере или изменить.
    А то что вы описали - это тот же самый GET, только в параметрах и теле запроса пусто.

    /advert_id/999999999 вы найдете в $_SERVER['REQUEST_URI']

    Как строку разбить догадаетесь?
    При формировании каких-то сложных правил роутинга вам 100% понадобятся регулярные выражения.
    Ответ написан
    Комментировать
  • Как после каждого n-го абзаца вставить блок div на PHP?

    Delgus
    @Delgus
    Ну вот такой например вариант
    $str ="<p></p>
    <p></p>
    <p></p>
    <p></p>
    <p></p>
    <p></p>
    <h2></h2>
    <p></p>
    <p></p>";
    
    $i = 0;
    $str = preg_replace_callback("/<\/p>/u", function($match) use(&$i){
        $i ++;
        if($i % 2 == 0){
            return "</p><div></div>";
        }
        return "</p>";
    }, $str);
    
    echo $str;
    Ответ написан
    2 комментария
  • Как запустить функцию, имя метода которой передается в строке?

    Delgus
    @Delgus
    Test - класс, так и вызывайте как метод класса
    $test = new Test();
    $func = 'testFunc';
    $test->{$func}();
    Ответ написан
    Комментировать
  • Почему yii2 не так запускается на хостинге?

    Delgus
    @Delgus
    Ну во-первых debug tools и созданы специально для того чтобы их видеть можно было только при локальной разработке, чтобы клиенту не показывать их. Если уж очень надо то в конфигах добавляем allowedIPs, что-то вроде того
    // ...
    if (!YII_ENV_TEST) {
        // configuration adjustments for 'dev' environment
        $config['bootstrap'][] = 'debug';
        $config['modules']['debug'] = [
            'class' => 'yii\debug\Module',
            'allowedIPs' => ['*'],
        ];
        
        // ...
    }


    Во-вторых

    сайт работает совсем не так


    Не кажется ли вам что эта формулировка очень размыта и не говорит ничего, какие КОНКРЕТНО ПРОБЛЕМЫ возникли с сайтом?
    Ответ написан
  • Почему сайт занимает разные позиции в поисковых системах?

    Delgus
    @Delgus
    Ivan Ivanovich , у меня есть теория что Google Search игнорирует сайты со странными и нестандартными доменами, у меня google также игнорил sitemap для сайтов с доменами .tk
    Я задавал похожий вопрос Как победить ошибку Google Search Console «Не удалось обработать файл Sitemap»? про сайт charsmap.tk. Когда я перенес его на charmap.delgus.com, то google вдруг резко начал видеть его sitemap
    Ответ написан
    1 комментарий
  • Что делает функция?

    Delgus
    @Delgus
    аналог bind для IE8- и старых версий других браузеров. Но лучше наверно использовать полифилл -
    https://developer.mozilla.org/ru/docs/Web/JavaScri...
    Ну или использовать библиотеку - es5-shim.js

    про call, apply и bind - можно здесь почитать например
    https://getinstance.info/articles/javascript/call-...

    Метод bind() используется преимущественно для того, чтобы вызвать функцию с явным указанием значения this. Другими словами, bind() позволяет нам указать, ссылка на какой объект будет значением this, когда функция будет вызвана, и вызвать эту функцию.


    function bind( method, context) {
        //удаляем первые два аргумента - method,context
        var args = Array.prototype.slice.call(arguments,2);
        
        return function () {
        //те аргументы которые добавлены в method через bind остаются + добавляем те 
        //  которые при вызове функции добавлены
        var a = args.concat(Array.prototype.slice.call(arguments,0));
        //возвращаем функцию method, где контекст вызова(this) - context 
        return method.apply(context, a); 
        }
      }
        
      function getThisAndParams(...a){
        console.log(this);
        a.forEach(function(el){
          console.log(el);
        });
      }
     
     var arr = [2,3,6,8];
     var method1 = bind(getThisAndParams,arr);
     method1('hello','world','Vasya'); //выведет массив arr и "Hello" "world" "Vasya"
     var method2 = bind(getThisAndParams,arr,'Yo yo yo');
     method2('hello','world','Vasya'); //выведет массив arr и 'Yo yo yo' 'hello' 'world' 'Vasya'


    Зачем на практике использовать такое - вам лучше знать, вы же нашли эту функцию.
    Но на мой взгляд все эти танцы с бубнами устарели с появлением стрелочных функций
    https://developer.mozilla.org/ru/docs/Web/JavaScri...

    Но так как вы судя по всему не понимаете что такое контекст вызова функции то ловите
    https://www.youtube.com/watch?v=LM0tW2MZJZ4
    Ответ написан
    Комментировать
  • Как из массива сделать список?

    Delgus
    @Delgus
    $tags = [];
    foreach(  get_the_tags() as $tag){
        $tags[] = $tag->name;
    }
    $tags = implode(',',$tags)
    Ответ написан
    Комментировать
  • Как заменить значение в массиве?

    Delgus
    @Delgus
    А потом мы имеем сто тысяч if-ов в коде, замечательно все подсказали.
    //слова
    $array = ['green', 'purple', 'white', 'black', 'grey'];
    //массив с переводами чтобы сто раз if не писать как дундук
    $translate = [
        'green' => 'зеленый',
        'white' => 'белый'
        ];
        
    //1 вариант (для php > 7.0 короткий синтаксис)
    foreach ($array as $k => $v) {
       $array[$k] = $translate[$v] ?? $v;
    }
    //2 вариант (для php > 5.4 короткий синтаксис)
    foreach ($array as $k => $v) {
       $array[$k] = isset($translate[$v]) ?$translate[$v] : $v;
    }
    //3 вариант(длинная запись через if php > 5.4)
    foreach ($array as $k => $v) {
       if(isset($translate[$v])){
          $array[$k] = $translate[$v];
       }
    }
    Ответ написан
    1 комментарий
  • Как заставить afterSave сохранять старые данные, которые были изменены в 1 табличке - в другую?

    Delgus
    @Delgus
    Так например
    public function beforeSave($insert)
    {
        if (!parent::beforeSave($insert)) {
            return false;
        }
        $description = new Description();
        $description->book_id = $this->id;
        $description->old_text = $this->text;
        $description->created_at = time();
        $description->save();
        return true;
    }
    Ответ написан
  • Почему возникает ошибка в строке?

    Delgus
    @Delgus
    Потому что php думает что ты тут обращаешься к $s1_i как к массиву
    $s1_i[^,]
    что наглядно видно в любой хорошей IDE - PHPStorm например
    5c7ac4443d8f1772571055.png
    Ответ написан
    Комментировать
  • Почему запрос объединяет не те строки?

    Delgus
    @Delgus
    Лучше Join'ы для таких запросов использовать
    SELECT 
        ships.sudovlad,
        s1.gruz_pass as summa,
        EXTRACT(YEAR FROM s1.data_vih_p_ot) as years,
        ((s2.gruz_pass - s1.gruz_pass) / s1.gruz_pass * 100) AS percent,
        s2.gruz_pass as summa2,
        EXTRACT(YEAR FROM s2.data_vih_p_ot) AS years2
    FROM ships
    LEFT JOIN ships as s1
    ON ships.sudovlad = s1.sudovlad AND EXTRACT(YEAR FROM s1.data_vih_p_ot)=2017 AND s1.sudovlad IN ('Русфлот, ООО', 'АрктикТранс ОИЛ, ООО','pere')
    LEFT JOIN ships as s2
    ON ships.sudovlad = s2.sudovlad AND EXTRACT(YEAR FROM s2.data_vih_p_ot)=2018 AND s2.sudovlad IN ('Русфлот, ООО', 'АрктикТранс ОИЛ, ООО','pere')
    GROUP BY sudovlad
    Ответ написан
    4 комментария
  • Почему Where IN выводит только одну строку?

    Delgus
    @Delgus
    Я не вижу строки 'Русфлот, ООО' 0 2018 0 0 2017 во втором выводе
    Я вижу 'Русфлот, ООО' 0 2017 0 0 2017 во втором выводе

    Может поэтому при первом запросе и не возвращает эту строку?

    Причина в
    GROUP BY EXTRACT(YEAR FROM data_vih_p_ot)
    Ты делаешь в первом подзапросе group by по году и он возвращает
    Русфлот, ООО 0 2017
    АрктикТранс ОИЛ, ООО 0 2018

    Есть такой вариант запроса, не знаю подойдет ли
    SELECT 
        reservtable.sudovlad,
        reservtable.summa,
        reservtable.years,
        ((reservtable2.summa2 - reservtable.summa) / reservtable.summa * 100) AS percent,
        reservtable2.summa2,
        reservtable2.years2
    FROM(
    SELECT sudovlad,gruz_pass as summa,EXTRACT(YEAR FROM data_vih_p_ot) AS years
    FROM ships
    WHERE EXTRACT(YEAR FROM data_vih_p_ot) = 2017 AND sudovlad IN ('Русфлот, ООО', 'АрктикТранс ОИЛ, ООО')
    GROUP BY sudovlad) reservtable,
        (SELECT sudovlad,gruz_pass as summa2,EXTRACT(YEAR FROM data_vih_p_ot) AS years2
    FROM ships
    WHERE EXTRACT(YEAR FROM data_vih_p_ot) = 2018 AND sudovlad IN ('Русфлот, ООО', 'АрктикТранс ОИЛ, ООО')
    GROUP BY sudovlad) reservtable2
    GROUP BY sudovlad
    Ответ написан
    2 комментария
  • Роутинг на PHP?

    Delgus
    @Delgus
    Зависит от задачи, насколько сложный роутинг требуется

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

    https://elisdn.ru/blog/113/psr7-framework-http
    https://elisdn.ru/blog/114/psr7-framework-router

    Уже был похожий вопрос на тостере.
    Как сделать простой php маршрутизатор (роутер)?

    Если надо быстро и по тупому - то просто берем строку из $_SERVER['REQUEST_URI'], парсим ее и получаем из нее имя контроллера и экшена, сложно что ли?
    <?php
    class admin{
        function edit(){
            echo "Hello World";
        }
    }
    //парсим REQUEST_URI
    $explode = explode('/',$_SERVER['REQUEST_URI']);
    //выбираем имя контроллера и метода
    $controllerClass = $explode[1];
    $action = $explode[2];
    //вызываем
    call_user_func_array([$controllerClass,$action],[]);


    Ну и под конец https://google.gik-team.com/?q=%D0%A0%D0%BE%D1%83%...
    Ответ написан
    1 комментарий
  • Обязательно ли знать php при изучении Yii?

    Delgus
    @Delgus
    Yii2 предполагает знание php, ООП и шаблона проектирования MVC. Для работы с базой данных хорошо бы понимать что такое ORM и как работать с ActiveRecord.
    Большой плюс - знание инфраструктуры современного PHP. Это
    1. Знание пакетного менеджера Composer, понимание разницы между файлами composer.json и composer.lock, между require и require-dev.
    2. Знание системы контроля версий GIT, умение использовать git.

    Начать изучать Yii2 можно и не обладая таким списком, но когда знаешь перечисленные основы - изучение ускоряется в разы. Он задумывался именно как startup фреймворк с низким порогом входа, на нем очень быстро можно склепать какие-то однотипные CRUD приложения. Много русской документации и примеров, доброе сообщество.
    поддержка REST из коробки, создание REST API за очень быстрое время.

    P. S.

    Yii Framework умирает, почитайте что пишут разработчики его ядра

    Ну есть такое, никто не спорит,.. С другой стороны Yii2 поддерживается и он уже готовый продукт сам по себе, я лично работаю с Yii2, разработал несколько сервисов на нем и при том приходиться поддерживать проекты 2014-2016 года которые писались на yii первом еще и до сих пор нормально функционируют.
    Ответ написан