• Как правильно верстать многостраничный сайт придерживаясь БЭМ?

    PaulTMatik
    @PaulTMatik
    Согласно БЭМ, твои компоненты должны быть автономными. То есть, если ты видешь, на обеих страницах блок, который нужно классифицировать как .services, то так и называешь. Для того, чтобы в такой блок внести какие-то специальные изменения, то нужно добавлять модификатор к списку классов. Например: .services--scheme-one. В итоге в атребуте класс, компонента будут такие названия: class="services services--scheme-one". В стилях, естественно, селектор только по одному классу должен быть.
    Ответ написан
    Комментировать
  • Почему Angular 4 говорит что не знает атрибут компонента, не смотря на то, что он указан?

    PaulTMatik
    @PaulTMatik Автор вопроса
    Нашёл ответ, проблема не в атрибуте, а в том, что Angular не компилировался с данным компонентом вообще, оказывается компонент может быть размещён только в одном модуле в принципе и если нужно использовать один компонент в разных, то его нужно вынести в свой собственный модуль, а затем подключить в тех, где он будет использоваться.
    persons.module.ts
    import { NgModule } from '@angular/core';
    import { CommonModule } from '@angular/common';
    
    import { PersonsComponent } from "./persons.component";
    
    @NgModule({
        imports: [
            CommonModule
        ],
        declarations: [
            PersonsComponent
        ],
        exports: [
            CommonModule, PersonsComponent
        ]
    })
    export class PersonsModule { }

    Как-то я невнимательно читал документацию
    Ответ написан
    1 комментарий
  • Зачем писать в ООП стиле в JS?

    PaulTMatik
    @PaulTMatik
    ФП vs ООП старо как мир. Интерпретатору/компилятору абсолютно фиолетово какой стиль вы используете. Есть задача — она должна решаться, если ваш код её решает, используя, конечно же, минимум ресурсов, то какая разница как он написан.
    Некоторые языки взяли за основу, конкретные парадигмы, например только ООП, в таких языках, естественно, всё будет ориентировано на это, поэтому писать на них как-то иначе — менее продуктивно и ещё менее понятно для другого программиста.
    Удобство какого либо подхода — это субъективно. Если вы пишите на языке, который допускает использование любого подхода, то выбирайте тот, который больше нравится. Если только у вас нет комплексов, что кому-то узколобому ваш прекрасно работающий код покажется смешным, из-за того, что вы выбрали ФП вместо ООП.
    Ответ написан
  • Как сделать алфавитный список слева в RecyclerView?

    PaulTMatik
    @PaulTMatik Автор вопроса
    Почитав на сто рядов документацию по RecyclerView наткнулся на такую штуку RecyclerView.ItemDecoration С помощью неё можно изменить элемент списка по определённому условию. Поискал примеры на эту тему наткнулся вот на что. Изменил метод drawVertical таким образом:
    public void drawVertical(Canvas c, RecyclerView parent) {
            final int left = this.dpToPx(72);
            final int right = parent.getWidth() - this.dpToPx(16);
    
            String firstLetter = "";
            String previousFirstLetter = "";
            TextView studentName;
            TextView nextStudentName;
            String nextFirstLetter = "";
    
            TextView groupMarkerText;
    
            final int childCount = parent.getChildCount();
            for (int i = 0; i < childCount; i++) {
                final View child = parent.getChildAt(i);
                final View nextChild = parent.getChildAt(i + 1);
    
                studentName = (TextView) child.findViewById(R.id.studentName);
                groupMarkerText = (TextView) child.findViewById(R.id.groupMarkerText);
                if (nextChild != null) {
                    nextStudentName = (TextView) nextChild.findViewById(R.id.studentName);
                    nextFirstLetter = (String) nextStudentName.getText().subSequence(0,1);
                }
    
                firstLetter = (String) studentName.getText().subSequence(0, 1);
    
                if (!firstLetter.equals(previousFirstLetter)) {
                    groupMarkerText.setText(firstLetter);
                    groupMarkerText.setVisibility(View.VISIBLE);
                }
    
                if (!nextFirstLetter.equals(firstLetter)) {
                    final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
                            .getLayoutParams();
                    final int top = child.getBottom() + params.bottomMargin;
                    final int bottom = top + mDivider.getIntrinsicHeight();
                    mDivider.setBounds(left, top, right, bottom);
                    mDivider.draw(c);
                }
    
                previousFirstLetter = firstLetter;
            }

    и вот что в итоге получил:
    be897cdb34374dfcb7278e0b73c7e8d5.png
    То что я понаписал - это ерунда на самом деле, такой подход не годится для RecyclerView ввиду его особенностей. Так parent.getChildCount(); покажет количество только видимых строк, а во время подгрузки новых, метод drawVertical будет вызываться постоянно. В результате все новые строки окажутся с метками.
    Ну зато я теперь знаю куда копать.
    Ответ написан
    Комментировать
  • Как включить кнопку во время ввода в текстовое поле?

    PaulTMatik
    @PaulTMatik Автор вопроса
    Сам спросил — сам ответил.
    .setOnKeyListener(...)
    Используется как раз таки для обработки нажатий аппаратной клавиатуры. В моём случае нужно было просто отслеживать изменения с помощью textWatcher()
    lessonNameFld.addTextChangedListener(new TextWatcher() {
        @Override
        public void afterTextChanged(Editable s) {
            addLessonBtn.setEnabled(true);
            if (lessonNameFld.getText().toString().isEmpty()) {
                addLessonBtn.setEnabled(false);
            }
        }
    }
    Ответ написан
    Комментировать
  • Как редактировать строки таблицы в модальном окне laravel 4?

    PaulTMatik
    @PaulTMatik
    Вынесете форму в отдельное представление.
    Например: app/views/form.blade.php
    {{ Form::model($model, ['method'=>'PUT']) }}
        {{ Form::text('column_name') }}
       ....
    {{ Form::close() }}

    (только кода будете определять элементы форм, в значение атрибута name, вписывайте название колонок вашей таблицы).
    Определите метод, который будет отдавать это представление по ajax запросу
    Например:
    public function getForm()
    {
        $model = Model::find(Input::get('id'));
        return View::make('form', ['model'=>$model]);
    }

    и уже подставляйте этот ответ в ваше модальное окно.

    Про формы лучше почитать здесь Laravel API Illuminate\Html\FormBuilder
    Ответ написан
    Комментировать
  • Как правильно сделать запрос к БД для отдельного виджета?

    PaulTMatik
    @PaulTMatik
    Все запросы, которые будут использоваться на большинстве страниц, лучше делать в базовом контроллере.

    Для меню, в вашем случае лучше использовать шаблонизатор. Например
    файл: main.blade.php
    <html>
    <body>
    @yield('menu')
    @yield('content')
    </body>
    </html>


    Файл page.blade.php
    @extends('main')
    
    @section('menu')
    @include('categories', ['categories'=>$categories])
    @stop
    
    @section('content')
    <div>Content</div>
    @stop


    файл categories.blade.php
    <ul>
    @foreach($categories as $category)
    <li>{{$category->name}}</li>
    @endforeach
    </ul>


    А в контроллере запрашивать
    return View::make('page',['categories'=>$this->categories()]);


    Так вы сможете подключать меню когда вам нужно, просто создавая в шаблоне секцию 'menu'
    Ответ написан
    Комментировать
  • Как заставить работать laravel 4 на хостинге без openssl?

    PaulTMatik
    @PaulTMatik Автор вопроса
    https://github.com/laravel/framework/pull/5228

    Решение для тех у кого возникнет такая же проблема.
    Ответ написан
    Комментировать