These are chat archives for yiisoft/yii2/rus

17th
Nov 2015
lynicidn
@lynicidn
Nov 17 2015 04:57
strict
236286
@236286
Nov 17 2015 05:23
gun.png
160_F_60850640_lRNnu1rfNZaqYwZ2HC6ohKyuAnhTbu0C2.png
236286
@236286
Nov 17 2015 05:47
Господи, обращаюсь я к тебе, чтобы у всего нашего yii2 чата был день светлый, чтобы у всех хватило мудрости справиться с вопросами, здоровья, чтобы все наши нужды ты усмотрел, Аминь
Evgeniy Tkachenko
@githubjeka
Nov 17 2015 06:10
:coffee: :cookie:
@236286 Спасибо тебе, добрый человек.
blob
Roman Salnikov
@RSalo
Nov 17 2015 06:54
alt
Evgeniy Tkachenko
@githubjeka
Nov 17 2015 07:01
Пахом (:
Roman Salnikov
@RSalo
Nov 17 2015 07:01
метафизический гном!
Evgeniy Tkachenko
@githubjeka
Nov 17 2015 07:01
ДРУГ
МИРОВОЙ ЧЕЛОВЕК
Roman Salnikov
@RSalo
Nov 17 2015 07:03
корень добра и сила зла, я носитель подземной ерунды и превозноситель огромных метафизических гномик всех дел
Evgeniy Tkachenko
@githubjeka
Nov 17 2015 07:19
всё правильно сказал.
236286
@236286
Nov 17 2015 09:33
    $category = Category::find()->where(['name'=>$session['item']])->one;
Undefined variable: session
вот я не могу представить
lynicidn
@lynicidn
Nov 17 2015 09:34
Category::findOne(['name' => Yii::$app->session->get('item')])
Roman Salnikov
@RSalo
Nov 17 2015 09:35
@236286 значит в сессию не сохранил item или криво что-то делаешь
Cyril Sadovnik
@sadovnik
Nov 17 2015 10:27
Привет, ребзя.
Возможно ли прописать в правилах фильтрации/валидации модели что либо один, либо другой параметр должен быть задан?
Evgeniy Tkachenko
@githubjeka
Nov 17 2015 10:33
привет
используй when
dromok
@dromok
Nov 17 2015 11:09
Привет
как лучше хранить дату в базе, как DATETIME или просто int?
Vitaly
@hellvesper
Nov 17 2015 11:35
как timestamp
dromok
@dromok
Nov 17 2015 11:37
а почему не DATETIME? чем timestamp лучше?
Vitaly
@hellvesper
Nov 17 2015 11:51
@Dromok ну визуально это тоже самое, раньше таймштамп в мускуле записывался как юникс тайм, а теперь как дейттайм, но на него можно повесить встроенные функции базы чем я, например, пользуюсь. Например автоматом присваивать таймштамп при создании записи или при обновлении.
@Dromok с таймштампом так же меньше проблем, он хранит дату в UTC а дейттайм в локальном времени и при переносе базы или размещении в другом часовом поясе могут быть проблемы
dromok
@dromok
Nov 17 2015 12:00
@hellvesper спасибо!
Vitaly
@hellvesper
Nov 17 2015 12:11
@Dromok и выборка быстрее по дате =) незачто) хотя многие тут бы советовали наверное в int и unixtime загонять. Так что это чисто мое мнение, а ты смотри как тебе самому удобнее
Vitaly
@hellvesper
Nov 17 2015 12:39
/*
             * Doing with YouTube (subscribes)
             */
            $youtube_videos = [];
            if (isset($google_user_id) && !$cached) {
                $token = new GoogleClient(Yii::$app->user->id);
                $token = $token->getToken();
                $client = new \Google_Client();
                $client->setAccessToken($token);
                $client->setScopes(['youtube, youtube.force-ssl, youtube.readonly, youtubepartner']);

                if ($client->getAccessToken()) {
                    $youtube = new \Google_Service_YouTube($client);
                    $youtubeResponse = $youtube->subscriptions->listSubscriptions('snippet', ['maxResults' => 50, 'mine' => 'true', 'pageToken' => ($youtubeResponse->nextPageToken) ? $youtubeResponse->nextPageToken : '', 'fields' => 'pageInfo']);
                    $total = $youtubeResponse->pageInfo->totalResults;
                    $subscriptions = [];
                    do {
                        $youtubeResponse = $youtube->subscriptions->listSubscriptions('snippet', ['maxResults' => 50, 'mine' => 'true', 'pageToken' => ($youtubeResponse->nextPageToken) ? $youtubeResponse->nextPageToken : '', 'fields' => 'items/snippet,nextPageToken,pageInfo,prevPageToken']);
                        $subscriptions = array_merge($subscriptions, $youtubeResponse->getItems());
                    } while ($youtubeResponse->nextPageToken);

                    $youtubeService = new YouTubeService();
                    $channelIds = [];
                    foreach ($subscriptions as $subscription) {
                        $channelIds[] = $subscription['snippet']['resourceId']['channelId'];
                    }

                    $videos = $youtubeService->getVideos($channelIds, 10, 0);

                    foreach ($videos as $video) {
                        $youtube_videos[] = [
                            'updated' => strtotime($video['snippet']['publishedAt']),
                            'provider' => 'google',
                            'picture' => $video['snippet']['thumbnails']['medium']['url'],
                            'url' => null,
                            'video_id' => $video['id']['videoId'],
                            'title' => $video['snippet']['title'],
                            'description' => $video['snippet']['description'],
                        ];
                    }
                }
            }
делюсь алгоритмом с комьюнити =)
Rinat-wc
@Rinat-wc
Nov 17 2015 12:44
Всем привет
если я вывожу через renderPartial вьюху
ассет менеджер как себя ведет?
тюзается или нет? во вьюхе надо что то вызывать отдельно?
Cyril Sadovnik
@sadovnik
Nov 17 2015 12:52
@githubjeka такая лапша норм?
public function rules()
{
    return [
        ['propOne', 'required', 'when' => function() {
            return !isset($this->propTwo);
        }],
        ['propTwo', 'required', 'when' => function() {
            return !isset($this->propOne);
        }],
    ];
}
Evgeniy Tkachenko
@githubjeka
Nov 17 2015 12:55
This message was deleted
Vitaly
@hellvesper
Nov 17 2015 12:57
$rooms = Room::find()
    ->select([
        '{{room}}.*', // select all columns
        '([[length]] * [[width]].* [[height]]) AS volume', // calculate a volume
    ])
    ->orderBy('volume DESC') // apply sort
    ->all();
в этом примере обязательно указывать название таблицы в селекте?
или можно просто 'column'
Evgeniy Tkachenko
@githubjeka
Nov 17 2015 12:58
@codeskull норм
Vitaly
@hellvesper
Nov 17 2015 12:58
@Rinat-wc рендер партиал выведет тебе чисто вьюху без скриптов и стилей
ассет тоже не подтянется
Evgeniy Tkachenko
@githubjeka
Nov 17 2015 12:59
@hellvesper можно просто
Vitaly
@hellvesper
Nov 17 2015 12:59
@githubjeka ага, сяп
Cyril Sadovnik
@sadovnik
Nov 17 2015 12:59
@githubjeka спасибо
Evgeniy Tkachenko
@githubjeka
Nov 17 2015 13:00
@Yiibot запиши мне там
Vitaly
@hellvesper
Nov 17 2015 13:00
он только на плече у попугая ездит. без него не появляется =(
Evgeniy Tkachenko
@githubjeka
Nov 17 2015 13:01
курлык
Роман Сохарев
@greabock
Nov 17 2015 13:01

Доброго вечера, уважаемые знатоки! Есть у меня компонент. Обращаюсь к нему Yii::$app->MyComponent;
и есть пара мест где я хочу внедрить его через DI

public function __construct(MyComponent $component)
{
}

Внимание, вопрос: как объяснить yii, что он(компонент) должен быть синглтон и что мой компонент уже и есть инстанс этого синглтона?

Rinat-wc
@Rinat-wc
Nov 17 2015 13:01
@hellvesper а если у меня главная чтото вроде лендинга, не будет повторяющегося хидера и футера с меню по остальным частям сайта, лучше сделать отдельный лэйаут тогда?
Vitaly
@hellvesper
Nov 17 2015 13:02
@Rinat-wc ну да
Rinat-wc
@Rinat-wc
Nov 17 2015 13:03
@hellvesper а как указать какой лэйаут юзать при рендере экшену?
Vitaly
@hellvesper
Nov 17 2015 13:03
@hellvesper ну теоретически ты можешь renderAjax заюзать, там тоже без ассетов и лайаутов рендерит, но все что надо во вьюху запхать придется
в экшене пишешь $this->layout = 'layout_name';
я не знаю, может таким образом можно отключить его просто для этого экшена
может можно false передать
Rinat-wc
@Rinat-wc
Nov 17 2015 13:04
хм
ну мне надо вместо деволтного другой получается, а где и как дефолтный прописывается?
Vitaly
@hellvesper
Nov 17 2015 13:06
хз де присваивается, по дефолту main ищет, может захардкодено
@Rinat-wc ide подксказывает что можно передавать либо bool либо string так что видимо вариант с false работает
Rinat-wc
@Rinat-wc
Nov 17 2015 13:08
ты про renderPartial?
а про сто про render
Rinat-wc
@Rinat-wc
Nov 17 2015 13:13
там у обоих на вход имя и вторым параметром массив переменных
public $layout = 'post'; правда это для контроллера
ну думаю разницы нет если в экшене переопределять
Cyril Sadovnik
@sadovnik
Nov 17 2015 13:20
@greabock привет. Можешь подробнее, а для чего ты собрался объяснять это Yii и где?
Maxim
@Big-Shark
Nov 17 2015 13:21
@greabock все просто, нет такого ди, как ты хочешь)
Rinat-wc
@Rinat-wc
Nov 17 2015 13:54
если assetManager нужно подключить например jquery.inputmask.bundle.js
public $js = [
        '@bower/jquery.inputmask/dist/inputmask/jquery.inputmask.bundle.js'
    ];
такой матрац писать?
Roman Salnikov
@RSalo
Nov 17 2015 14:38
мужики, как вы обычно делаете валидацию в модели. все в одно модели по сценариям или раскидываете всё по разным файлам?
Rinat-wc
@Rinat-wc
Nov 17 2015 14:40
composer require select2/select2 выкачивает в vendor. Разве не должен в vendor/bower ?
Eugene Lavrentiev
@lavrentiev
Nov 17 2015 15:38
@RSalo все по разному, по сути модель моделью, форма формой
Pavel Sokolov
@ComradePashka
Nov 17 2015 15:53
в vendor/bower же вроде попадает то что bower/XXXXX - вроде все правильно
Pavel Sokolov
@ComradePashka
Nov 17 2015 16:03
а вот лучче скажите мне, если мне гору ассетов надо подключить, то лучше не клепать на каждый по отдельному потомку от AssetBundle, а тупо в конфиге компоненту assetManager аналогичные настройки прописать? тогда и ::register() для ассетбандла вызывать не надо, я правильно понимаю?
Vitaly
@hellvesper
Nov 17 2015 16:12
костыль какойто
нет
если надо подключить кучу там есть иерархичность
Roman
@Skinka
Nov 17 2015 16:42

СУСИСИ

есть живые?
Artem Maleev
@maleev
Nov 17 2015 16:43
@Skinka сорри в который раз вижу СУСИСИ и никак не вкурю что это значит?
Roman
@Skinka
Nov 17 2015 16:44
@maleev забей
@maleev как взыть кей массива по значению?
@Rinat-wc там посойму не пишутся алиасы! указывай в патхе
Artem Maleev
@maleev
Nov 17 2015 16:51
@Skinka по быстрому на ум приходит что то вроде $arr[array_search($value,$arr)]
Roman
@Skinka
Nov 17 2015 16:51
key(array_search($value,$arr)) а так?
@maleev так как у тебя я не получу кей
получе значение
и то наверное ошибку или вообще ничего
Rinat-wc
@Rinat-wc
Nov 17 2015 16:53
@Skinka да там фейл, спасибо. Прикол в другом
даже если вызватть render, а перед ним уКазать $this->layouts = false; то в самоей вьюхе \frontend\assets\LandingAsset::register($this); не дергается
Roman
@Skinka
Nov 17 2015 16:54
@maleev там кстате серча достаточно будет! он возвращает только ключ а я думал что пару
@Rinat-wc а зачем тубу лаяут фалс делать?
ассеты покавутся только с лаяутом поидее
Rinat-wc
@Rinat-wc
Nov 17 2015 16:55
потому что гланая вообще отличается от остальных
и мне не нужны те ассеты
Roman
@Skinka
Nov 17 2015 16:55
зави рендер ажакс
Rinat-wc
@Rinat-wc
Nov 17 2015 16:55
эм
рендер ajax
для главной страницы?
Roman
@Skinka
Nov 17 2015 16:55
renderAjax
Rinat-wc
@Rinat-wc
Nov 17 2015 16:55
а что сним
Artem Maleev
@maleev
Nov 17 2015 16:55
@Skinka я тоже пересмотрел, действительно
Rinat-wc
@Rinat-wc
Nov 17 2015 16:55
какие приимущества
Roman
@Skinka
Nov 17 2015 16:55
он с ассетами вернет
а еще лучше создай доп ассет
Rinat-wc
@Rinat-wc
Nov 17 2015 16:56
я их создал
Roman
@Skinka
Nov 17 2015 16:57
ой точнее доп лаяут
а вообще какая разница какой рендер возвращать? всеравно вернется стринг
так шо почему бы и не ажакс но только вернется баз лаяута но ассеты загрузит
мне просто кажеться что если обычным рендером с лаяут фалс это тоже самое что и рендер партиал бе ассетов
Rinat-wc
@Rinat-wc
Nov 17 2015 17:00
получается что так
что с фелсом рендер = renderPartial
Roman
@Skinka
Nov 17 2015 17:17
ну впринципе это логично
Roman
@Skinka
Nov 17 2015 17:43
друзья поделитесь опытом! кто как в админке создает пользователя! интересна именно форма создания! как задаете пароль? используете на примую модель или через форму?
Roman
@Skinka
Nov 17 2015 17:44
@maxyc бе
Максим
@maxyc
Nov 17 2015 17:44
и нееби себе моск
Roman
@Skinka
Nov 17 2015 17:44
монстр
слишком уж там все)
Максим
@maxyc
Nov 17 2015 17:45
не обязательно все использовать
Парни. мож кто видел. есть ли какие бехевиоры чтоб считали Views показы записей
знаю сделать не долго, так же как сделать и timestamp бехевиор и многие другие
@Skinka скажи просто тебе лень разобраться в нем . никто тебя не заставляет устанавливать соц авторизацию и прочее.
Roman
@Skinka
Nov 17 2015 17:48
@maxyc я в нем копался! слишком там много наворотов всяких и мне не нужных! не хочу нагружать всякой ерундой
двесте40 не нужных приблуд
Максим
@maxyc
Nov 17 2015 17:48
например? отправка письма? отключается в конфиге. подтверждение? автогенерация? что?
Roman
@Skinka
Nov 17 2015 17:49
мне не нужно такое как у него! не нравится!
не комфортно
отправка у меня своя
Максим
@maxyc
Nov 17 2015 17:49
просто устанавливаешь. в конфиге пишешь что не нужно и готово. и не нужно париться.
пока мы с тобой общаемся у меня на сайте уже заработала авторизация
Rinat-wc
@Rinat-wc
Nov 17 2015 17:50
а есть модуль отправки сообщения между юзерами?
Максим
@maxyc
Nov 17 2015 17:52
ваще глухо . я перепробовал кучу. одно дерьмо
Rinat-wc
@Rinat-wc
Nov 17 2015 17:52
серьезно?
Максим
@maxyc
Nov 17 2015 17:53
ага.
с чатами та же беда
privat messages тишина
всякие там события и нотификации, тишина
Vitaly
@hellvesper
Nov 17 2015 17:55
я сам писал мессенджер)
оказалась ппц какая не тривиальная задача
хотя навскидку все выглядело просто, табличка с полями from | to | message
Roman Salnikov
@RSalo
Nov 17 2015 17:56
@hellvesper сам по себе мессенджер не должен быть сложным, сложна его нормальная реализация в реалтайме
в частности, всякие группы приватные и т.д.
Vitaly
@hellvesper
Nov 17 2015 17:57
@RSalo ну можно id группы повесить
реалтайм я и не делал, там просто типо привата
и всеравно там такая простыня и поплывшие мозги были
Максим
@maxyc
Nov 17 2015 17:58
оказалась ппц какая не тривиальная задача
я тоже прогорел в оценке данной задачи
вот буквально на днях закончил на сокетах
поддержка комнат.
dev.letsrun.ru
общий чат, комнаты в виде клубов, в которые пользователи входят и личные сообщения. все в сокетах работает.
Roman Salnikov
@RSalo
Nov 17 2015 18:00
@maxyc но учти, что надо нахер тогда посыл делать пользователям с древними браузерами
Vitaly
@hellvesper
Nov 17 2015 18:00
можно обычным хттп с проверкой по таймауту
для древних
Максим
@maxyc
Nov 17 2015 18:01
@RSalo я уже давно ниже 10 ие не проверяю.
Vitaly
@hellvesper
Nov 17 2015 18:01
вообще в своих проектах уже не поддерживаю ие ниже 11го
Максим
@maxyc
Nov 17 2015 18:01
ну вот
пусть ебутся сами там со своим старьем
Vitaly
@hellvesper
Nov 17 2015 18:01
вот вот
Максим
@maxyc
Nov 17 2015 18:01
сказал макс, у которого есть комп с винхм и ие 7
Vitaly
@hellvesper
Nov 17 2015 18:01
хватит легаси тащить
Максим
@maxyc
Nov 17 2015 18:01
винхр
так...
Vitaly
@hellvesper
Nov 17 2015 18:01
у меня тоже в офисе на приемке такой =)
Roman Salnikov
@RSalo
Nov 17 2015 18:02
и заказчиков тоже нахер слать, которым требуется поддержка ие6. или пускай платят цену в два раза выше за весь проект
Vitaly
@hellvesper
Nov 17 2015 18:03
тут пусть голову верстальщикам выносят, мне пофигу)
Максим
@maxyc
Nov 17 2015 18:04

я хочу сделать обновление счетчика при просмотре новости. вижу несколько вариантов.

  1. переопределить метод one в ActiveQuery и делать updateCounter
    хз на сколько это правильно делать именно там
  2. счетчики хранить в мемкеше и по крону обновлять раз в минуту
  3. создавать задачу в MQ на обновление...

1 самое простое, но на планируемых нагрузках в 1-2 тыс человек в сутки я хз как поведет себя.
2-3 сложновато поддерживаемое

Rinat-wc
@Rinat-wc
Nov 17 2015 18:05
в оракле есть материализованные представления
и чтобы при каждом запросе на список документов например не выполнять запрос которы формирует его и не считать count, в нем делается обдейт счетчика как то на уровне БД
Максим
@maxyc
Nov 17 2015 18:07
ыть ) у меня ммускуль. хочу попробовать посгрес. но пока не решаюсь
Vitaly
@hellvesper
Nov 17 2015 18:08
@maxyc там же есть счетчики в ар для этих задач)
эх тыы
Максим
@maxyc
Nov 17 2015 18:09
@hellvesper Я понимаю. Но это мне при просмотре новости нужно будет делать 2 строки кода )))
Vitaly
@hellvesper
Nov 17 2015 18:09
все придумано до нас и ничего переопределять ненадо) не единым findAll|One жывы)
@maxyc тебе надо только на уникальность проверять чтобы не накручивали и все
Максим
@maxyc
Nov 17 2015 18:09
кажется я заморачиваюсь
Vitaly
@hellvesper
Nov 17 2015 18:10
или не парится если не важно
Максим
@maxyc
Nov 17 2015 18:10
да на накрутку пох.
Vitaly
@hellvesper
Nov 17 2015 18:10
ну вот и вызывай апдейт каунтер и все тогда
Максим
@maxyc
Nov 17 2015 18:10
думал централизовано это делать (
Vitaly
@hellvesper
Nov 17 2015 18:10
нафига?
думается мне у тебя не двести способов вывода новостей или статьи, а скорее в его один экшн в одном контроллере
Максим
@maxyc
Nov 17 2015 18:11
ну новостей да. но у меня еще есть вывод карточек товаров. вывод карточек компании
Vitaly
@hellvesper
Nov 17 2015 18:12
везде добавь апдейт)
можно конечно запилить свой АР от базовго и наследовать все модели от своего с нужным методом, но мне кажется это геморнее, хоть может и правильнее
Максим
@maxyc
Nov 17 2015 18:13
а потом везде ищи его ) ладно. убедили. да и униврсализация это зло
Pavel Sokolov
@ComradePashka
Nov 17 2015 18:14
блин я тупой. обьясните мне ктото. вот есть у меня лэйаут один на все вьюхи. я хочу ему прикрутить эффектов, поставил композером 3-4 пакета. пока был только один я сделал ассетбандл, в котором указал sourcePath - все паблишется в ассеты, все прекрасно. ну не лепить же отдельный класс на каждый пакет. попробовал прописать ассетманагеру конфиг, но он походу не создает классы, а только конфигурирует уже существующие. как пачку пакетов (по сути js и css) подключить? вот это во фреймворках и бесит - реализованы всякие крутые новомодные парадигмы программирования а для старого дедовского <script src> хз какое шаманство надо провернуть
Vitaly
@hellvesper
Nov 17 2015 18:14
универсальность вообще не нужна, не ЦМС под все же пишешь, а конкретный продукт для конкретной задачи
@ComradePashka какое шаманство? registerJs registerCss чтоли? :)
Максим
@maxyc
Nov 17 2015 18:15
ну у меня структура следующая.
\common\models\%model% Все наследуются от \common\models\ActiveRecord
\common\models\queries\%model%Query Все наследуются от \common\models\queries\ActiveQuery
фронт и бэкэнды могут иметь свои модели, которые наследуются уже от \common\models...
Vitaly
@hellvesper
Nov 17 2015 18:16
и то не парадигмы программирования, вообще ниче общего с этим не имеет.
Roman Salnikov
@RSalo
Nov 17 2015 18:16
@maxyc чувак, а кто тебе дизы для сайтов рисует? или сам делаешь?
Максим
@maxyc
Nov 17 2015 18:16
у меня дизайнер есть
Roman Salnikov
@RSalo
Nov 17 2015 18:17
@maxyc я с тобой дружу тогда:D
Максим
@maxyc
Nov 17 2015 18:17
Давай )))
Vitaly
@hellvesper
Nov 17 2015 18:17
:D
Максим
@maxyc
Nov 17 2015 18:18
skype:maxyc.webber
mail:maxycws@gmail.com
vk:maxyc.webber
:D
Roman Salnikov
@RSalo
Nov 17 2015 18:18
никогда не поздо иметь знакомство с дизайнером. никогда не знаешь когда он понадобиться=)
это твой братюня что ль?
или твои данные?
Максим
@maxyc
Nov 17 2015 18:18
мои )
Roman
@Skinka
Nov 17 2015 18:18
@RSalo дизайнеры они такие разные)
Максим
@maxyc
Nov 17 2015 18:19
ща дизигнера кину. но она предпочитает больше через меня работать. ей так проще...
Roman Salnikov
@RSalo
Nov 17 2015 18:19
@maxyc мб на линкеде или фб есть?
Vitaly
@hellvesper
Nov 17 2015 18:19
а верстает кто?)
Roman Salnikov
@RSalo
Nov 17 2015 18:19
этот вк говняха...
Roman
@Skinka
Nov 17 2015 18:19
@hellvesper да тыж и верстаешь)
Vitaly
@hellvesper
Nov 17 2015 18:19
та ну его)
верстка зло) я нишарю)
Roman
@Skinka
Nov 17 2015 18:19
да ладно все через дичь
я сам такойже! не люблю но приходится
Максим
@maxyc
Nov 17 2015 18:20
@RSalo не, не ползуюсь
@hellvesper верстаю либо я, либо она же, либо у меня верстальщик есть. он на ангуляре херачит. я с ангуляром не знаком.
Roman Salnikov
@RSalo
Nov 17 2015 18:21
@maxyc добавил
Максим
@maxyc
Nov 17 2015 18:21
@RSalo miosame271 дизайнер-верстак. Евгения.
Pavel Sokolov
@ComradePashka
Nov 17 2015 18:21
@hellvesper дык, мне на счет registerJs и registerCss тут намекнулии что надо использовать ассеты.
Roman Salnikov
@RSalo
Nov 17 2015 18:22
@maxyc ангуляр с первого взгляда крут, а потом там такая магия, что волосы рвеш на себе
Vitaly
@hellvesper
Nov 17 2015 18:22
@ComradePashka смотря что те надо регать
Roman Salnikov
@RSalo
Nov 17 2015 18:22
мне больше ембер понравился в плане дружелюбности
Максим
@maxyc
Nov 17 2015 18:22
@RSalo наверное. но у меня в жс коде еще бОЛьше жести
Vitaly
@hellvesper
Nov 17 2015 18:22
ассеты предпочтительнее если у тебя эти скрипты везде используются. а если на одну страничку жс либу или стиль прикрутить можно и через регистер
Roman Salnikov
@RSalo
Nov 17 2015 18:23
@maxyc так у всех практически жесть. если нету у сайта апи, то подход всегда один - говнокодить:D
Pavel Sokolov
@ComradePashka
Nov 17 2015 18:25
ну ок. а если везде используются и сразу несколько ассетов - не писать же на каждый отдельный класс?
Максим
@maxyc
Nov 17 2015 18:25
а я для ассетов предпочел галп. цсс, жс, имдж у меня процессятся, сжимаются, оптимизируются и складываются в папку. я на нее направляю домен CDN.domain.ru и готово )))
Pavel Sokolov
@ComradePashka
Nov 17 2015 18:25
или таки писать?
както некрасиво это... имхо
Максим
@maxyc
Nov 17 2015 18:26
ну у тебя есть ассет жквери, ассет моментжс, ассет момент жс и пр.
Andrey
@DevAndreyL
Nov 17 2015 18:38
Добавил Button wdget, появилась ошибка Call to a member function registerAssetBundle() on string.
Код button:
<?= Button::widget([
            'label' => 'Создать встречу',
            'options' => ['class' => 'btn btn-primary'],
            'view' => 'site/createMeet',
          ]); ?>
да да да , блять да
Vitaly
@hellvesper
Nov 17 2015 18:47
@ComradePashka какой нафиг свой класс?? я уже отвечал, у ассетов есть иерархическая зависимость, все уже придумали без костылей
Roman Salnikov
@RSalo
Nov 17 2015 19:17
в мускуле енум нормально стыкуется с полнотекствым поиском? или хотя бы с каким-нибудь эластиком или сфинксом?
Pavel Sokolov
@ComradePashka
Nov 17 2015 19:18

так мне не нужна зависимость!!! ааааа! мы наверное на разных языках говорим.
короч меня бы очень сильно обрадовало если б sourcePath был массивом и на каждый из его элементов можно было бы указать свои js\css хотя более логично чтоб этот функционал был у AssetManager - ща попробую руками...
хм.. короч вот говнокод:

$am = Yii::$app->assetManager;
$am->init();
foreach ($am->bundles as $b) {
  if (gettype($b) === "array") {
        foreach ($b['js'] as $j) {
            $am->publish($b['sourcePath'] . "/" . $j, $b['publishOptions']);
        }
        foreach ($b['css'] as $c) {
            $am->publish($b['sourcePath'] . "/" . $c, $b['publishOptions']);
        }
    }
}

паблишит все как надо из конфига ассетманагера, но при этом ничего не подключаются. видимо я в корне не понимаю нафиг ассетманагера ваще придумали :fire: и как пачку ассетов подключить без создания класса на каждый

Andrey
@DevAndreyL
Nov 17 2015 19:19
@ComradePashka Почитай офф док
Там все понятно расписано
Pavel Sokolov
@ComradePashka
Nov 17 2015 19:20
уже раз 20 перечитал :) наверное я тупой %}
Andrey
@DevAndreyL
Nov 17 2015 19:21
@ComradePashka Могу на русском доку подкинуть)
@ComradePashka Быть может, там понятней будет
kirill
@alaevka
Nov 17 2015 19:31
Добрый вечер, уважаемые. В pjax есть кто силен?) Всю голову сломал
Roman Salnikov
@RSalo
Nov 17 2015 19:31

в мускуле енум нормально стыкуется с полнотекствым поиском? или хотя бы с каким-нибудь эластиком или сфинксом?

кто имел дело с таким?

Pavel Sokolov
@ComradePashka
Nov 17 2015 19:31
я уже не знаю может быть перефразировать вопрос - вот я композером поставил несколько пакетов. они все встали в vendor/bower/XXXXX (т.е. все лежит в НЕДОСТУПНОМ из веба каталоге). в каждом лежат js/css которые все мне нужно использовать в лэйаут. я вижу пока что два пути:
1) использовать тупо registerJs и registerCss - но тогда надо еще руками вывести их в web-accessible директорию, чтоб браузер мог достучаться.
2) создать класс от AssetBundle с указанием sourcePath, вызывать его ::register(), который будет и паблишить и подключать все как надо, НО для одного отдельно взятого пакета.
правильно?
у меня вопрос можно ли и если да то как подключить несколько пакетов (ну точнее js/css из них) все сразу все чтоб не плодить эти классы-наследники. вот я думал что ассетманагер как раз для этих целей хорошо подойдет, но он похоже только кастомайзит существующие ассеты
Rinat-wc
@Rinat-wc
Nov 17 2015 19:32
@RSalo ну со сфинксом
и вообще в 5.6 в innodb свой появился полнотекстовый
kirill
@alaevka
Nov 17 2015 19:33
есть grid view, обернутый pjaxом. Рядом на этой же странице есть active form, так же обвернутая. При сабмите формы после записи данных в бд обнвляю грид и все хорошо. Но как мне теперь так же без перезагрузки страницы подгрузить данные в форму при клике на строчку в гриде, либо ссылку..
Roman Salnikov
@RSalo
Nov 17 2015 19:33
@Rinat-wc таки да, мне просто нужно узнать, будет ли по фен-шую использовать енум в полнотекстовом поиске
Vitaly
@hellvesper
Nov 17 2015 19:41
@ComradePashka дичь какую-то загоняешь)
создай ассет бандл, в нем в депенденс укажи все остальные нужные ассет банды и подключай это бандл одной строкой
Evgeniy Tkachenko
@githubjeka
Nov 17 2015 19:42
добрый вечер
Vitaly
@hellvesper
Nov 17 2015 19:44
добрый
Roman
@Skinka
Nov 17 2015 19:44
This message was deleted
ку
Pavel Sokolov
@ComradePashka
Nov 17 2015 19:46

так они друг от друга не зависят. каждый сам по себе. и что в депенденс лепить, когда указан sourcePath?

sourcePath: specifies the root directory that contains the asset files in this bundle. This property should be set if the root directory is not Web accessible. Otherwise, you should set the basePath property and baseUrl, instead. Path aliases can be used here.

Vitaly
@hellvesper
Nov 17 2015 19:48
@ComradePashka не указуй соурс, его в своих бандлах указывай. депенденс тебе просто подключит другие бандлы в нужном порядке и все. в итоге у тебя будет один бандл у которого внутри по сути все остальные
Pavel Sokolov
@ComradePashka
Nov 17 2015 19:53
что значит в своих бандлах? :) т.е. class MySuperAsset extends AssetBundle <- вот это? :)
Vitaly
@hellvesper
Nov 17 2015 19:54
@ComradePashka нет, ну те что в депенденс будут
Evgeniy Tkachenko
@githubjeka
Nov 17 2015 19:55
Pavel Sokolov
@ComradePashka
Nov 17 2015 20:00
дипендс ваще передается строка - путь. в примерах везде фигурируют бандлы ядра yii2, для которых в соответствующем пути лежит пхп с описаным внутри классом - наследником AssetBundle. а в пакетах которые я скачал композером ваще только голый ассет и ничего кроме js/css нет. никаких готовых пхп, никаких бандлов!
Vitaly
@hellvesper
Nov 17 2015 20:05
@ComradePashka Бандлы пишешь ты сам! и указываешь там ресурсы, какие нафиг бандлы у тебя в боверовских| композеровских пакетов должны быть!??
Ё
как обычно не разберетесь а потом, че так все плохо устроено, нафига то , это и т.д.
Pavel Sokolov
@ComradePashka
Nov 17 2015 20:06
т.е. бандлов нет! и получается что никаких других путей кроме как тиражирования вот этого самого class MySuperAsset extends AssetBundle для каждого пакета у меня нет. может мне композер просто надо настроить на какойто репозиторий в котором гора yii2 готовеньких ассетов лежит со всеми этими обертками, которые действительно можно будет тупо указать в depends в одном единственном ассете AppAsset и забыть про sourcePath
Vitaly
@hellvesper
Nov 17 2015 20:09
@ComradePashka такого не бывает
Pavel Sokolov
@ComradePashka
Nov 17 2015 20:09

ну вооот. я ж говорю что я тупой :) я читал оффдоки, там сказано, цитирую:

The former [composer] is the preferred way, as it allows you to install new extensions or update Yii by simply running a single command.

Vitaly
@hellvesper
Nov 17 2015 20:10
все верно
ты и делаешь MyAsset::register() одной командой)
ааа композер
ну дык это на ассет бандлы не распространяется. невозможно иметь готовые ассеты под все. разве что ты ставишь готовый уиишный шаблон то там да, будет бандл созданый автором
Pavel Sokolov
@ComradePashka
Nov 17 2015 20:12
ну я composer search, composer install и сделал. а там голые боверовские пакеты. для которых надо написать свой бандл, чтоб обернуть его внутренности. вот в этом и был вопрос. что на каждый пакет плодить по классу - как-то не очень :)
имхо
Vitaly
@hellvesper
Nov 17 2015 20:15
почему не очень? у тебя есть к примеру верстка админки и фронтенда, у каждого свои стили и скрипты, соответсвенно ты создаешь какойнить AdminAsset бандл куда запихиваешь все стили и скрипты админки и FrontendAsset соответсвенно со стилями и скриптами для основного сайта, и просто одной строкой их подключаешь. все просто. Один файл на все
там же можно указать зависимости, например от бандла с jquery или бутстрапом, можно прописать минификацию, версионность, компиляцию из less и т.д. и не парить голову, всем займется ассет менеджер
Pavel Sokolov
@ComradePashka
Nov 17 2015 20:18
видимо меня сбил с толку AssetManager и возможность кастом-конфигурации бандлов через него. я пока еще только ковыряю yii и думал что это альтернатива как раз таки созданию этих оберток (ну там ведь почти все настройки можно переопределить)
Vitaly
@hellvesper
Nov 17 2015 20:20
ну в том то и дело что там дается это чтобы не ковырять сам бандл. например переопределить чето во встроенном бандле jquery который в вендоре лежит и подтягивается композером и т.д.
там же можно кеширование в ассеты отключить, если сами скрипты и стили редактируешь и надо сразу результат видеть
Pavel Sokolov
@ComradePashka
Nov 17 2015 20:22
ясн. т.е. выходит что есть гора композеровских пакетов которые сами по себе под yii не заточены и их надо доработать напильником как бы
Alexander Makarov
@samdark
Nov 17 2015 20:29
не надо
их надо просто затягивать в проект и юзать
Pavel Sokolov
@ComradePashka
Nov 17 2015 20:32
omg :shipit: !!! как? :)
Pavel Sokolov
@ComradePashka
Nov 17 2015 20:37
короч, я создал по классу extends AssetBundle на fancybox и scrollmagic, зарегил их - все работает нормалды. всем спасибо в любом случае. просто я думал есть более простой способ :)
Pavel Sokolov
@ComradePashka
Nov 17 2015 20:45
пожалуй последний вопрос. если я не хочу использовать нахэшированные директории и уродливые имена файлов, а например аккуратно складывать все в красивую /js/ в корне, тогда мне надо дописать ченить вроде assetMap => ['myscript-with-extralargename-ver-1.234.56.js' => '/js/mycutescript.js'] так?
Roman
@Skinka
Nov 17 2015 20:52
@ComradePashka да не используй ты совсем ассеты!
@ComradePashka а то ты делаешь из ассетов не ассеты
kirill
@alaevka
Nov 17 2015 20:58
Хорошо, ответа не получил. Тогда спрошу так. Как заставить работать аякс валидацию в актив форме, подгруженной через аякс. То есть сначала по аяксу я гружу саму форму, а затем в ней уже надо делать аякс валидацию. Средствами юи можно так сделать?
kirill
@alaevka
Nov 17 2015 21:06
все разобрался. всем спасибо
Roman
@Skinka
Nov 17 2015 21:30
@alaevka :+1:
Roman Salnikov
@RSalo
Nov 17 2015 21:39
чот не догоняю. я же правильно делаю?
    public function behaviors()
    {
        return [
            [
                'class' => AttributeBehavior::className(),
                'attributes' => [
                    ActiveRecord::EVENT_BEFORE_INSERT => [
                        'type' => 'text'
                    ]
                ],
            ]
        ];
    }
Rinat-wc
@Rinat-wc
Nov 17 2015 21:40
не спишь:)
Roman Salnikov
@RSalo
Nov 17 2015 21:40
не сплю=)
Rinat-wc
@Rinat-wc
Nov 17 2015 21:45
ну это ответ на - что ты делаешь не так:)))
Roman
@Skinka
Nov 17 2015 21:50
@RSalo а шо это за бихавиор?
Roman Salnikov
@RSalo
Nov 17 2015 21:51
@Skinka типа должен подставлять аттрибуты в бд по событию
Roman
@Skinka
Nov 17 2015 21:52
@RSalo fvv ye nbgf nfv dfket tot ljk;ty ,snm
падла
там типа еще валуе должен быть
Roman Salnikov
@RSalo
Nov 17 2015 21:53
сделал
        return [
            [
                'class' => AttributeBehavior::className(),
                'attributes' => [
                    ActiveRecord::EVENT_BEFORE_INSERT => 'type'
                ],
                'value' => function ($event) {
                    if ($event == 'type') {
                        return 'text';
                    }
                }
            ]
        ];
одна хрень...
Roman
@Skinka
Nov 17 2015 21:53
ну а в поле тайп ты чтото ложишь?
или кладешь?
@RSalo и $event точно это будет возвращить?
Roman Salnikov
@RSalo
Nov 17 2015 21:56
@Skinka сделал die. ивент возвращает
object(yii\base\ModelEvent)[71]
  public 'isValid' => boolean true
  public 'name' => string 'beforeInsert' (length=12)
  public 'sender' => 
    object(app\modules\posts\models\category\Text)[39]
      private '_attributes' (yii\db\BaseActiveRecord) => 
        array (size=2)
          'title' => string 'aaaaaaaaaaaa' (length=12)
          'post' => string 'aaaaaaaaaaaaaaa' (length=15)
      private '_oldAttributes' (yii\db\BaseActiveRecord) => null
      private '_related' (yii\db\BaseActiveRecord) => 
        array (size=0)
          empty
      private '_errors' (yii\base\Model) => 
        array (size=0)
          empty
      private '_validators' (yii\base\Model) => 
        object(ArrayObject)[42]
          public 0 => 
            object(yii\validators\RequiredValidator)[46]
              ...
          public 1 => 
            object(yii\validators\StringValidator)[52]
              ...
          public 2 => 
            object(yii\validators\StringValidator)[51]
              ...
      private '_scenario' (yii\base\Model) => string 'default' (length=7)
      private '_events' (yii\base\Component) => 
        array (size=1)
          'beforeInsert' => 
            array (size=1)
              ...
      private '_behaviors' (yii\base\Component) => 
        array (size=1)
          0 => 
            object(yii\behaviors\AttributeBehavior)[43]
              ...
  public 'handled' => boolean false
  public 'data' => null
Roman
@Skinka
Nov 17 2015 21:57
@RSalo ну и че ты хочешь с такими условиями?
Roman Salnikov
@RSalo
Nov 17 2015 22:12
@Skinka о, починил
         [
                'class' => AttributeBehavior::className(),
                'attributes' => [
                    ActiveRecord::EVENT_BEFORE_INSERT => 'type'
                ],
                'value' => function ($event) {
                    return 'text';
                }
            ]
         [
                'class' => AttributeBehavior::className(),
                'attributes' => [
                    ActiveRecord::EVENT_BEFORE_INSERT => 'blah'
                ],
                'value' => function ($event) {
                    return 'blah-blah';
                }
            ]
только такой способ сработал...