• Как сделать переход в backend?

    qonand
    @qonand
    Software Engineer
    для начала в конфиге нужно подключить дополнительный URL-менеджер ссылающийся на back-end, например:
    'urlManagerBackend' => [
        'class' => 'yii\web\urlManager',
        'enablePrettyUrl' => true,
        'showScriptName' => false,
        'baseUrl' => $backEndUrl,
    ],

    после чего при редиректе просто его юзать, например:
    return $this->redirect(Yii::$app->urlManagerBackend->createUrl('index'));


    Но как бы frontend это пользовательская часть сайта, backend - админская. И для каждой части сайта лучше делать свою авторизацию
    Ответ написан
    2 комментария
  • Yii2 как с базы вывести категории когда у них есть подкатегориии с подкатегориями?

    Steein
    @Steein
    Программист
    $menu = Array( // Предполагалось, что он SQL SELECT
      Array('id'=>1,'title'=>'Menu 1',          'parent_id'=>null),
      Array('id'=>2,'title'=>'Sub 1.1',         'parent_id'=>1),
      Array('id'=>3,'title'=>'Sub 1.2',         'parent_id'=>1),
      Array('id'=>4,'title'=>'Sub 1.3',         'parent_id'=>1),
      Array('id'=>5,'title'=>'Menu 2',          'parent_id'=>null),
      Array('id'=>6,'title'=>'Sub 2.1',         'parent_id'=>5),
      Array('id'=>7,'title'=>'Sub Sub 2.1.1',   'parent_id'=>6),
      Array('id'=>8,'title'=>'Sub 2.2',         'parent_id'=>5),
      Array('id'=>9,'title'=>'Menu 3',          'parent_id'=>null),
    );


    function has_children($rows,$id) {
      foreach ($rows as $row) {
        if ($row['parent_id'] == $id)
          return true;
      }
      return false;
    }
    function build_menu($rows,$parent=0)
    {  
      $result = "<ul>";
      foreach ($rows as $row)
      {
        if ($row['parent_id'] == $parent){
          $result.= "<li>{$row[title]}";
          if (has_children($rows,$row['id']))
            $result.= build_menu($rows,$row['id']);
          $result.= "</li>";
        }
      }
      $result.= "</ul>";
    
      return $result;
    }
    echo build_menu($menu);


    <ul>
      <li>Menu 1<ul>
        <li>Sub 1.1</li>
        <li>Sub 1.2</li>
        <li>Sub 1.3</li>
      </ul></li>
      <li>Menu 2<ul>
        <li>Sub 2.1<ul>
          <li>Sub Sub 2.1.1</li>
        </ul></li>
        <li>Sub 2.2</li>
      </ul></li>
      <li>Menu 3</li>
    </ul>
    Ответ написан
    1 комментарий
  • У меня есть класс для авторизации. Как я могу в нем сделать свои сообщения об ошибках?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Django
    Седой и строгий
    Добавить к вьюхе метод обработки ошибочного состояния формы - form_invalid(), а в нём добавить к форме ошибку методом add_error():
    def form_invalid(self, form):
        form.add_error(None, u'Вы кто такие? Я вас не звал!');
        return super(LoginFormView, self).form_invalid(form)
    Ответ написан
    2 комментария
  • Почему у меня высвечивается все данные авторизованным пользователям?

    webinar
    @webinar Куратор тега Yii
    Учим yii: https://youtu.be/-WRMlGHLgRg
    1. Посмотрел Ваш код, но не вижу, что бы Вы где то подключили mdmsoft/yii2-admin. Дайте путь где подключено что-ли, так как в ожидаемых backend/config/main.php common/config/main.php и frontend/config/main.php нет и следа
    2. У Вас шаблон advanced, а mdmsoft/yii2-admin сделан для basic
    3. Что бы разобраться с RBAC и потом не гадать с фига ли что-то не работает, надо самому написать 1 раз велосипед для него. Мутная тема, но разобравшись потом очень просто решаются проблемы. А возможно, что свой велосипед окажется интереснее готовых.
    Ответ написан
    8 комментариев
  • Как победить OPTIONS при CORS?

    @davidnum95
    Касательно YII2 в базовом контроллере нужно указать поведение для CORS:
    public function behaviors()
        {
            return [
                'corsFilter' => [
                    'class' => Cors::className(),
                ],
                'authenticator' => [
                    'class' => HttpBearerAuth::className(),
                    'except' => ['options'],
                ],
            ];
        }
    Ответ написан
    Комментировать
  • Как победить OPTIONS при CORS?

    astec
    @astec
    Разработчик https://debtstracker.io/
    Только вчера разбирался для своего проекта по учёту долгов https://debtstracker.io/ и победил.

    На OPTIONS надо возвращать 200 с заголовками и пустой ответ.

    Я руководствовался этой схемой:
    cors_server_flowchart.png

    Вот мой работающий код на Go:

    func getOnly(handler HttpHandler) HttpHandler {
    	return func(w http.ResponseWriter, r *http.Request) {
    		c := appengine.NewContext(r)
    		if r.Method == "OPTIONS" {  // Preflight request
    			origin := r.Header.Get("Origin")
    			switch origin {
    			case "http://localhost:8080":
    			case "http://localhost:8100":
    			case "https://debtstracker.local":
    			case "https://debtstracker.io":
    			case "":
    				BadRequest(c, w, errors.New("Missing required request header: Origin"))
    				return
    			default:
    				err := errors.New(fmt.Sprintf("Unknown origin: %v", origin))
    				log.Debugf(c, err.Error())
    				BadRequest(c, w, err)
    				return
    			}
    			log.Debugf(c, "Request 'Origin' header: %v", origin)
    			if accessControlRequestMethod := r.Header.Get("Access-Control-Request-Method"); accessControlRequestMethod != "GET" {
    				BadRequest(c, w, errors.New("Not a valid preflight request"))
    				return
    			}
    			responseHeader := w.Header()
    			responseHeader.Set("Access-Control-Allow-Methods", "GET")
    			if accessControlRequestHeaders := r.Header.Get("Access-Control-Request-Headers"); accessControlRequestHeaders != "" {
    				log.Debugf(c, "Request Access-Control-Request-Headers: %v", accessControlRequestHeaders)
    				responseHeader.Set("Access-Control-Allow-Headers", accessControlRequestHeaders)
    			} else {
    				log.Debugf(c, "Request header 'Access-Control-Allow-Headers' is empty or missing")
    				// TODO(security): Is it wrong to return 200 in this case?
    			}
    			responseHeader.Set("Access-Control-Allow-Origin", origin)
    			w.WriteHeader(200)
    			return
    		}
    		if r.Method != "GET" {
    			BadRequest(c, w, errors.New(fmt.Sprintf("Expecting to get request method GET, got: %v", r.Method)))
    			return
    		}
    		handler(w, r)
    	}
    }
    Ответ написан
    1 комментарий
  • Как настроить "вставку включаемой области" в Bitrix?

    alexyarik
    @alexyarik
    Битрикс разработчик
    Переходите в режим правки (кнопка в правом верхнем углу). Переходите в нужный раздел и в режиме правки жмете кнопку "изменить раздел" -далее заполняете поле "Описание". Если шаблон компонента каталога не стандартный и текст не появился добавляете вывод текста в коде шаблона каталога:
    <? =$arResult["DESCRIPTION"] ?>
    //без пробелов, которые я вставил
    Ответ написан
    1 комментарий
  • Почему Yii:$app это плохо?

    @developer007
    Глобальные переменные в большинстве случаев нарушают инкапсуляцию. К ним открыт неконтролируемый доступ отовсюду.

    В большом проекте при обилии глобальных переменных возникает путаница в именах. Глобальную переменную же видно отовсюду, надо, чтобы отовсюду было понятно, зачем она.

    Глобальные переменные в большинстве случаев нарушают принцип инверсии зависимостей (или делают возможным его нарушение).

    Глобальные переменные ухудшают масштабируемость проекта.

    Глобальные переменные ухудшают читаемость кода (в каком-то конкретно взятом месте непонятно, нужна ли какая-то конкретная глобальная переменная, или нет).

    Глобальные переменные приводят к трудноуловимым ошибкам. Примеры: нежелательное изменение её значения в другом месте/другим потоком, ошибочное использование глобальной переменной для промежуточных вычислений из-за совпадения имен, возвращение функцией неправильного значения при тех же параметрах (оказывается, она зависима от глобальной переменной, а ее кто-то поменял).

    Глобальные переменные создают большие сложности при использовании модульного тестирования.
    Глобальные переменные увеличивают число прямых и косвенных связей в системе, делая её поведение труднопредсказуемым, а её саму - сложной для понимания и развития.
    Ответ написан
    Комментировать
  • ZF2 Модуль (или что угодно) для работы с Yandex|Google Map Api?

    Immortal_pony
    @Immortal_pony
    function makeGoogleApiRequest($params)
        {
            $apiUrl = "https://maps.googleapis.com/maps/api/geocode/json";
            $context = stream_context_create(['http'=>['timeout'=>5]]);
            
            
            
            // Make request
            $response = json_decode(file_get_contents($apiUrl . "?" . http_build_query($params), false, $context)); 
    
            
            
            // Check response
            if (
                json_last_error() ||
                !isset($response->status) || 
                $response->status !== "OK" ||
                !isset($response->results[0]->place_id) || 
                !isset($response->results[0]->formatted_address) ||
                !isset($response->results[0]->address_components) ||           
                !isset($response->results[0]->geometry->location->lat) ||
                !isset($response->results[0]->geometry->location->lng)           
            ) {                
                throw new \UnexpectedValueException ("Google Api Request Failed");
            }
            
            
            
            return $response;
        }
    
       
    
    
    
        /* Пример использования */
        $place = makeGoogleApiRequest([
            'address' => "Москва, Лаврушинский пер, 10",
            'language' => "ru"
        ]);
    Ответ написан
    1 комментарий
  • Как начать изучать AngularJS?

    GTRxShock
    @GTRxShock
    SA
    довольно давно начинал с интерактивного курса https://www.codecademy.com/learn/learn-angularjs
    но сейчас все монетизировали уже)

    погуглите интерактивные курсы сами, наподобие https://www.codeschool.com/courses/shaping-up-with...

    а еще лучше, если поставите реальную задачу и вооружившись гуглом и бест практиками начнете творить сами :)
    https://github.com/johnpapa/angular-styleguide/blo...
    Ответ написан
    Комментировать
  • Как в yii подключить отдельные стили на определенную страницу?

    webinar
    @webinar Куратор тега Yii
    Учим yii: https://youtu.be/-WRMlGHLgRg
    Так же как и всегда. Либо добавить стили в head
    //это во view
    $this->registerCss('
    body {background-color:#fff;}
    ');

    либо как файл.
    //это во view
    $this->registerCssFile('path/to/myfile');

    Если зависимостей много и их еще где-то в таком же наборе надо подключить, то можно создать AssetBundle, подробнее тут www.yiiframework.com/doc-2.0/guide-structure-asset...
    Как правило в самом view не подключают css и js, так как при правильной верстке все должно быть виджетами, а у виджетов есть свой метод подключения зависимостей. И если есть необходимость во view прописать какой-то css, то скорее всего это ошибка глобальная в структуре.
    Ответ написан
    1 комментарий
  • Где дохода будет больше android или web?

    @Josi
    Да не гонитесь Вы за баблом! Программирование - это в первую очередь удовольствие. Выбирайте что Вам ближе по душе.
    Ответ написан
    6 комментариев
  • Как русифицировать все поля в админке django?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Django
    Седой и строгий
    Конечно "не переводится", вы же зачем-то переопределили поле в форме. Если вам это действительно нужно, то стоит задать ему параметр label:
    class WorkModelForm(forms.ModelForm):
        description = forms.CharField(label='описание', widget=forms.Textarea, required=False)
        ...

    Но подозреваю, что не нужно, что вам просто нужно было задать для этого поля виджет:
    class WorkModelForm(forms.ModelForm):
        class Meta:
            model = Work
            fields = "__all__"
            widgets = {
                'description': forms.Textarea,
            }
    Ответ написан
    1 комментарий
  • Переход из 1С в web-разработчики (PHP ) в 35 лет. С чего начать и реально ли?

    AlexeyGfi
    @AlexeyGfi
    YouTube >>> Битриксоид из Колхоза
    Больше 10 лет работаю под Битриксом. Мне очень нравится то, что в этой работе нужен целый стек знаний. Начиная от настройки апача и нжинкса (у меня свой сервер на Хетцнере) и до вёрстки. Прям прёт от кайфа.

    Этот год начал вникать в новое ядро (а там уже ORM), начал восполнять недостаток знаний. Ниточка за ниточкой... — просмотрев видео-курс по Ларавел понял, что моё мировоззрение дало трещину. Насколько там всё строго и по полочкам, в противовес анархии внутри Битрикса. Но у битрикса шикарное лицо. CMS прокачана так, что удобно как заказчику, так и обслуживающей команде. Вряд ли какая CMS сможет угнаться. Но внутренности... Мама дорогая. Хочется скрестить Ларавел и Битрикс (CMS).

    Есть надежда, что новое ядро привнесёт какую-то строгость, но, увы, Битриксы не культивируют "эко-культуру". То есть тренда быть стильным, правильным, структурным — нет. Порог входа опущен настолько, что можешь писать лапшой, можешь прикручивать свои шаблонизаторы. Вообще твори что хочешь. Битрикс ограничивается необязательными рекомендациями.

    Ища выход стремлению "хочу большего" завёл профиль на апворке и логично задумался: а что я могу предложить? То есть сначала была шальная мысль выходить на full-stack заказы c Битриксом, но, блин, после Ларавелл я уже не уверен. Если переходить (менять тех заказчиков, которые уже есть), то на солидный уровень (по задачам, в первую очередь). А для этого нужно понимание: к чему душа лежит (выбор технологии) и что востребовано (однозначно могу сказать, что буду копать Ларавел — уже и мини-проекты придумал; из фронт-энда буду пробовать пилить Вью, но пока что нет жёсткой мотивации: чистый css/js никто не отменял). А значит метод проб и ошибок. Пока не определился — держать ушки на макушке и анализировать входящий поток, не особо отвлекаясь от текущих дел, потому что так можно и загнуться (а на плечах семья, дети).

    Пытаясь понять, «как оно», — запустил и небольшой оффлайн бизнес с продажей через Интернет. Есть опыт запуска своих проектов и этот путь мне кажется наиболее перспективным для удовлетворения жизнью: сразу делаешь то, что легко согласовывать (с самим собой =), за ошибки платишь сам, можно делать неспеша (некоторые решения должны вызреть внутри), а можно упасть и прям не вставать пока не закончил — делаешь-то для себя, а это совсем другой настрой.

    Но чем хорошо (полезно) по-фрилансивать: остаёшься в курсе новинок, не оседаешь в своей тине и не разучиваешься шевелиться. По сабджу — держать нос по ветру, пробовать разные задачки, пока не придёт чёткое понимание.
    Ответ написан
    Комментировать
  • Переход из 1С в web-разработчики (PHP ) в 35 лет. С чего начать и реально ли?

    alexyarik
    @alexyarik
    Битрикс разработчик
    В 34 года прошел собеседование и начал работать в веб студии, с тех пор успешно работаю. Было бы желание. Могу для вас посоветовать следующее. Набираетесь минимального опыта верстки и интеграции верстки в шаблон Битрикс, проходите Битрикс курсы и получаете пакет сертификатов, после этого идете работать в студию, набираетесь опыта. Большинство российских студий делают сайты на Битриксе. Для фриланса изучаете все тоже самое для Wordpress. Далее начинаете развиваться по карте развития разработчика https://github.com/zualex/devmap, т.е в сторону бекэнда. Учите основательно PHP все это время, и только потом когда крепко встанете на ноги лезьте в фреймворки.
    Ответ написан
    3 комментария
  • Переход из 1С в web-разработчики (PHP ) в 35 лет. С чего начать и реально ли?

    @Dementor
    программист, архитектор, аналитик
    Недавно попробовал доработать для себя небольшой проект на Wordpress и понял...

    Вы человек-парадокс, обычно как раз после Wordpress люди считают PHP фиговым языком, а PHP-программистов говнокодерами. А еще ваша мотивация не очень понятна. Просто взять и уходить с хлебного 1С в никуда немного странно. Я бы посоветовал немного покопаться в себе и попытаться понять, что именно вам в программировании на платформе 1С не устраивает. Может вы просто работаете не над интересными для вас проектами и вам достаточно было просто сменить место работы?

    Не могу определить для себя последовательность шагов.

    Еще один плохой звоночек. "Высоконагруженные системы" - это вообще ни о чем. ERP с тысячей пользователей в базе - это тоже высоконагруженная система.

    Последовательность шагов зависит от того, куда конкретно вы захотите пойти. При приеме на работу в ВК, вас будут гонять по одним вопросам, в Яндекс - по другим; если пойдете в студию на поддержку и кастомизацию различных CMS, то там вас общей теорией грузить не будут, так как им нужны работники по конкретному профилю, а не Fullstack-специалисты, которые обкатают пару месяцев за их счет "стажировку" и уйдут в другое место на бОльшие деньги.

    В первую очередь вам нужно изучить сам язык программирования, пока без фреймворков. Когда я только начинал свой путь в программировании, то попал на переход между PHP3 и PHP4, когда на слуху у всех были изменения глобальных переменных (в первую очередь $_get и $_post), из-за которых приходилось переписывать все проекты, единственным фреймворком был ZEND, а единственно CMSкой был PHP-Nuke. Не мне вам рассказывать, как с тех пор все изменилось, но язык и базовые библиотеки практически те же - их вам и стоит хорошо знать, не зависимо от дальнейшей судьбы. Конкретные новые библиотеки и фреймворки, которые вам нужно дополнительно выучить, что бы быть востребованными на рынке труда вам подскажут другие, так как я с PHP распрощался очень давно и ни разу не пожалел.

    Еще подскажу, что нужно держать руку на пульсе. Не только узнавать про новые фреймворки из вакансий, но и самому читать хабровские еженедельные дайджесты новостей из мира PHP, подписаться на другие тематические рассылки, слушать подкасты. Зарегится на живом форуме, где крутятся PHP-программисты разных уровней - профи и новычки. Профи - это понятно. А новички вам нужны для того, что бы попробовать отвечать на их вопросы - так и теорию подтяните и ЧСВ :)

    Но не везде возьмут такого возрастного стажера...

    Не заморачивайтесь. Вы же не в продавцы-консультанты идете, что бы иметь молодое смазливое лицо для охмурения клиенток. И тем более не на курсы телохранителей. Главное, что бы у вас с логикой и скоростью мышления все было в порядке.

    И опять таки, не порывайте так быстро с 1С - переходите на полставки и в свободное время займитесь обучением и проектами для гитхаба. С головы брать ничего не нужно - просто сёрфите по проектам и смотрите какая идея приглянется. Далее или клонируете репу или пилите проект по мотивам. Так и портфолио наберете для собеседования, и немного навыки отточите. В конце-концов, попробуйте пилить свои темы для Wordpress, раз он вас так сильно впечатлил - это не сложно и на этом тоже деньги зарабатывают.
    Ответ написан
    6 комментариев
  • Переход из 1С в web-разработчики (PHP ) в 35 лет. С чего начать и реально ли?

    begemot_sun
    @begemot_sun
    Программист в душе.
    Сдался вам этот веб ?
    Почему вы думаете что веб - это полноценное программирование, а программирование под 1С нет ?
    Имхо все просто решается набором используемых инструментов, думаю если изловчится, то и под 1С можно сделать continuous integration с юнит тестами :), но да оно того не стоит и 1С - это локальный рынок.

    Пройдет пару лет, и от веб вас также будет тошнить. Не найдете вы интересные, высоконагруженные проекты, а особенно сложные. Везде требуется примерно одно и тоже, склепать форму, вывести инфу, и т.п. всё тоже что и в 1С, только в веб.

    Самое неблагодарное занятие в веб - это верстка.

    В целом по сабжу -- ставьте перед собой небольшие цели и добивайтесь их, т.о. вы изучите любую технологию.
    Но лучше зреть в корень, а именно веб-разработчиков как грязи. Лучше найти те области, куда не ступала нога рядового программиста :) рынок в этих областях требует исследований также.

    Думаю в ближашее время развитие в области ИИ и вских нейронных сетей будет на пике. Поэтому лучше дерзать туда.
    Ответ написан
    4 комментария
  • Переход из 1С в web-разработчики (PHP ) в 35 лет. С чего начать и реально ли?

    @GrimJack
    Скажем так, минимальная база это уверенное знание html5+css3+js (в том числе умение работать с jquery, ajax и распространенными библиотеками (слайдеры там всякие))+php (умение прогать под wp не ограничиваясь шаблонами)
    Но у меня любовь к вэбу отпала через 2года углубленной работы в вэбе (спасибо русскому фрилансу)
    Потом уже определитесь, хотите в большие проекты на фреймворках (laravel, yii2 и другие) или вам больше нравится творить чудеса на готовых cms

    По поводу споров типа "готовые цмс для лохов, настоящие пацаны выбирают фреймворки" - да нифига, если руки из жопы, то тут ничего не поможет.

    Ах да, ИМХО
    Ответ написан
    3 комментария
  • Как в джанго обстоит с множественным наследованием моделей?

    У django есть абстрактные модели, в которых вы можете определить нужные поля и применить это к основной модели.

    Динамически создавать такие модели не получится. При каждом добавлении новой модели или полей к существующей модели нужно делать миграцию
    Ответ написан
    Комментировать
  • Как сильно востребовательны технологии microsoft наподобие Xamarin, ASP.NET на рынке труда?

    Вакансий в разы меньше. Но нужно понимать, что компании, кто пишет на java/.net cтабильней в силу объема, плюс задачи достаточно последовательные. Так что 5-10 вакансий на .net могут перекрывать, 40-50 вакансий на php/python/ruby.

    Так что если возьмешь место, можно там 3-5 лет стабильно работать.
    Ответ написан
    3 комментария