Всего 7 нот:
Мажорные аккорды - ABCDEFGH (в америке аккорд B, а в Росиии H)
Минорные аккорды - добавляется буква "m" = Am Bm Cm Dm Em Fm Gm Hm
Если аккорд играется на лад дальше - добавляется "#" = A# B# C# D# F# G# H# A#m B#m C#m D#m....
А дальше идут разные окончания у любого аккорда "..m7|m7b5|m9|m11|m13|maj|maj7|maj9|maj11|maj13|mb5|m|s us|sus2|sus4..."
1. Но бывает , что окончания два - Emsus4add9 . А в регулярном выражении ищет только на предмет одного окончания.
2. Бывают также такие аккорды как Am/E означает что играется аккорд Am но басовая струна E. Это один аккорд.
>Например в случае статей у объекта Article есть поле user (или author, как кто назовет). При обращении к этому полю AR вызывает запрос в базу данных с where id = user_id, получае результат и возвращает объект User связанный с нашим Article-ом.
@fisher Правильно я понимаю, что у каждого шаблона страницы есть свой контроллер шаблона?
Если правильно, то схема генерирования страницы следующая:
1. запрос пользователя
2. определяем контроллер страницы
3. подгрузили все данные касающиеся страницы
4. передали данные в контроллер шаблона
5. контроллер шаблона подгрузил шаблон страницы
6. выдали пользователю
Последовательность действий такая?
А как тогда добавить один блок, допустим "популярные новости на сайте за неделю", в общий дизайн сайта? Получается, что надо его будет указать в каждом контроллере шаблона или контроллере страницы , где мы хотим его использовать? (а если много страниц >10)
Я не могу для себя уяснить простую вещь:
Есть главная страница сайта, у нее есть свой контроллер. На этой странице будут размещены разные блоки "последние новости", "популярные новости", "Рейтинг пользователей", "последнее видео" и у каждого блока соотвественно есть свой контроллер. Откуда главная страница знает, что на ней должны быть отображены именно эти блоки?! (с нативными шаблонами или другими, можно было бы прописать тег и он бы сам вызвал контроллер этого блока и нарисовал бы данные.
Получается схема такая:
Проверяется основной шаблон на предмет блоков, а потом вызываются контроллеры и возвращают данные в те места, где были вставлены.
С Blitz необходимо предварительно собрать все данные в контроллерах, но откуда мы узнаем список контроллера, которые неоходимо вызвать для получания данных и последующей передаче контроллеру шаблона.
@alekciy разницу не уловил, так как тостер шлет уведомления о новых вопросах, подписавшимся по тегу ( представим, что человек подписался на новые объявления о продаже на сайте, чтобы не упустить предложение, ну или на раздел сайта с уроками, так как уроки выходят редко, те же статьи). Сути это не меняет, так как функционал один и тот же. Если вы можете помочь - прошу помогите, а беЗсмысленные вопросы про улавливание сути, прошу оставьте другим авторам вопросов.
@alekciy Тостер мне отправил два комментария с интервалом 3 минуты по этому вопросу. И присылает по каждому ответу, так как каждый ответ очень важен. На то и подписываются в трекер, а не в ежедневную рассылку.
@alekciy с циферкой показывающей +4 к статьям/комментариям сравнивая даты понятно. Но как тогда уведомлять пользователя по почте о новых статьях? При каждой новой статье отправляется письмо (тем, кто подписался по почте) и необходимо этот момент зафиксировать, при новой статье еще раз отправить, и опять сохранить, что отправили. Фиксировать придется все новые статьи, а не только сравнение дат. Потом пользователь зашел на сайт и удалять эти ид статей из базы/редиса. Тут уже возникают другие задачи, которые необходимо решать. Одна из них: 20 000 пользователей подписались на один и тот же раздел по почте. В день добавляют 10 статей - итого 200 тысяч емайлов. Очередь большая, есть вероятность того, что пользователь зайдет на сайт в то время, пока очередь еще только будет отсылаться. То есть посмотрит статью раньше, чем отправится уведомление.
@alekciy Сейчас на сайте 50 000 зарегистрированных пользователей, 3000 авторских мп3.
100 тысяч пользователей будет через 3-4 месяца.
каждый легко прослушает 100 композиций.
100 000 пользователей Х 100 композиций = 10 000 000 записей в таблице прослушек. А если за полгода пользователь прослушает 1000 композиций?
Получается 100 000 000 в таблице? Вот почему я хотел использовать тут Redis. (либо разбивать такую таблицу с 1 по 50 тысяч пользоватлей одна таблица, с 50 000 до 100 000 другая)
@alekciy решение , где нужно сделать 0, аналогичное как и с комментариями, тут все просто и можно (нужно) хранить все в бд. Но когда необходимо запоминать, что новое, а что просмотренное, мне не понятно. отписал в комментарии ниже пример.
@alekciy Все верно только в случае, когда не нужно смотреть все посты. Если необходимо смотреть все посты (как на утубе, однокласниках и прочих соц сетях) то необходимо где-то хранить ид новых постов, а не просто дату.
В моем проекте необходимо учитывать новые авторские мп3, и если прослушали ее, тогда помечать как прослушанная, остальные новые. Это как пример не ваккумной задачи.
@Masterme
Я в шаблон всталяю блок таким образом:
< block name=comment action=show_item_comments target_type=2 target_id=<?php echo $news['id'];? > >
В него основной контроллер подгрузит данные (допустим новости = 12), в итоге строка с блоком преобразутеся в
< block name=comment action=show_item_comments target_type=2 target_id=12 >
Контроллео новости свое отработал и отдал свои результаты.
Потом парсится шаблон на предмет блоков, для этого блока парсер определит:
$controller = comment
$method = show_item_comments
$args = array( 'target_type'=>2, target_id=>12)
и передаст их тому, кто вызовет каждый блок последовательно
контроллер блока -> метод -> view вернет html
потом этот html вставится обратно в шаблон
и так каждый блок.
@Masterme Вот из-за пункта "б)" и задал этот вопрос. Не понимаю как это можно сделать с шаблонизатором типа Blitz.
Получается так, как я описал выше.
"Перед запуском страницы в шаблоне ищутся блоки" может пояснить этот момент, где в контроллере делается этот момент. Я так понимаю, что контроллер (допустим "новости") сначала делает свои проверки, берет данные из модели -> т.к. готовит массив (допустим $data) для передачи его шаблонизатору (нативному или в view), а только потом делает поиск блоков в шаблоне странице. Правильно я указал порядок действий?
Согласен в вами полностью!
Сейчас сделан контроллер новости главным(или основным).
- вызывается только он, потом все параметры передаются шаблону
- в шаблон так же вставили new_id для блоков/виджитов типа блока комментариев
- потом идет поиск блоков в этом шаблоне (нашли блок комментариев или последние новости)
- вызвали их контроллер->модель->контроллер->view = html
- вернули опять эти html куски на место блоков в шаблоне
- выдали страницу пользователю.
Эта модель работает. Но как это реализовать на Blitz, я не знаю. Даже отдельный вопрос тут задавал про блитз, но никто не ответил мне.
Конечная же моя цель, это дорефакторить свой "движок" сайт, и отдать отдельные модули на разработку другим программистам, чтобы опираясь на четкую структуру движка/модуля, мне легко было в этом разобраться.