Задать вопрос
  • Какой парсер html разметки используется на Хабре?

    dim4ik
    @dim4ik Автор вопроса
    Благодарю, именно эта библиотека!
  • Как исправить Regexp выражение на поиск аккордов в тексте?

    dim4ik
    @dim4ik Автор вопроса
    Основаная часть аккорда это Нота ABCDEFGH

    маленькая буква "b" досталась нам из зарубежа, иногда мажорные аккорды обозначают с маленькой буквой b - Ab Bb Db Cb ....

    На примере аккорда Emsus4add9:
    (E)m - sus4 - add9
    E - основной тон
    m - минорный
    sus4 и add9 - окончания

    аккорд может быть изображен и так Emadd9sus4 (окончания местами переставлены)
    muzland.ru/songs.html?auth=131&song=3

    Могу скинуть весь PHP класс перевода в другую тональность.
  • Как исправить Regexp выражение на поиск аккордов в тексте?

    dim4ik
    @dim4ik Автор вопроса
    Всего 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. Это один аккорд.

    Примерно понятно объяснил?
  • PHP ООП объект. Как сделать выборку объектов?

    dim4ik
    @dim4ik Автор вопроса
    @FanatPHP: Где же взять этот опыт без теории? Это как пытаться решить дифференциальное уравнение без теории. Сколько времени уйдет без теории?!
  • PHP ООП объект. Как сделать выборку объектов?

    dim4ik
    @dim4ik Автор вопроса
    Уважаемые знатоки, где почитать об этом, и хватит ли той книжки?
  • Не могу разобраться с active record. Как получить данные из двух таблиц?

    dim4ik
    @dim4ik Автор вопроса
    >Например в случае статей у объекта Article есть поле user (или author, как кто назовет). При обращении к этому полю AR вызывает запрос в базу данных с where id = user_id, получае результат и возвращает объект User связанный с нашим Article-ом.

    Т.е. необходимо прописывать relations ?
    www.phpactiverecord.org/projects/main/wiki/Associations
  • Какие выбрать готовые решения, использующие шаблонизатор blitz?

    dim4ik
    @dim4ik Автор вопроса
    @fisher Правильно я понимаю, что у каждого шаблона страницы есть свой контроллер шаблона?

    Если правильно, то схема генерирования страницы следующая:
    1. запрос пользователя
    2. определяем контроллер страницы
    3. подгрузили все данные касающиеся страницы
    4. передали данные в контроллер шаблона
    5. контроллер шаблона подгрузил шаблон страницы
    6. выдали пользователю

    Последовательность действий такая?

    А как тогда добавить один блок, допустим "популярные новости на сайте за неделю", в общий дизайн сайта? Получается, что надо его будет указать в каждом контроллере шаблона или контроллере страницы , где мы хотим его использовать? (а если много страниц >10)

    Я не могу для себя уяснить простую вещь:
    Есть главная страница сайта, у нее есть свой контроллер. На этой странице будут размещены разные блоки "последние новости", "популярные новости", "Рейтинг пользователей", "последнее видео" и у каждого блока соотвественно есть свой контроллер. Откуда главная страница знает, что на ней должны быть отображены именно эти блоки?! (с нативными шаблонами или другими, можно было бы прописать тег и он бы сам вызвал контроллер этого блока и нарисовал бы данные.
    Получается схема такая:
    Проверяется основной шаблон на предмет блоков, а потом вызываются контроллеры и возвращают данные в те места, где были вставлены.

    С Blitz необходимо предварительно собрать все данные в контроллерах, но откуда мы узнаем список контроллера, которые неоходимо вызвать для получания данных и последующей передаче контроллеру шаблона.
  • Redis хранение подписок на категории новостей

    dim4ik
    @dim4ik Автор вопроса
    @alekciy разницу не уловил, так как тостер шлет уведомления о новых вопросах, подписавшимся по тегу ( представим, что человек подписался на новые объявления о продаже на сайте, чтобы не упустить предложение, ну или на раздел сайта с уроками, так как уроки выходят редко, те же статьи). Сути это не меняет, так как функционал один и тот же. Если вы можете помочь - прошу помогите, а беЗсмысленные вопросы про улавливание сути, прошу оставьте другим авторам вопросов.
  • Redis хранение подписок на категории новостей

    dim4ik
    @dim4ik Автор вопроса
    @alekciy Тостер мне отправил два комментария с интервалом 3 минуты по этому вопросу. И присылает по каждому ответу, так как каждый ответ очень важен. На то и подписываются в трекер, а не в ежедневную рассылку.
  • Redis хранение подписок на категории новостей

    dim4ik
    @dim4ik Автор вопроса
    @alekciy с циферкой показывающей +4 к статьям/комментариям сравнивая даты понятно. Но как тогда уведомлять пользователя по почте о новых статьях? При каждой новой статье отправляется письмо (тем, кто подписался по почте) и необходимо этот момент зафиксировать, при новой статье еще раз отправить, и опять сохранить, что отправили. Фиксировать придется все новые статьи, а не только сравнение дат. Потом пользователь зашел на сайт и удалять эти ид статей из базы/редиса. Тут уже возникают другие задачи, которые необходимо решать. Одна из них: 20 000 пользователей подписались на один и тот же раздел по почте. В день добавляют 10 статей - итого 200 тысяч емайлов. Очередь большая, есть вероятность того, что пользователь зайдет на сайт в то время, пока очередь еще только будет отсылаться. То есть посмотрит статью раньше, чем отправится уведомление.
  • Redis хранение подписок на категории новостей

    dim4ik
    @dim4ik Автор вопроса
    @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 другая)
  • Redis хранение подписок на категории новостей

    dim4ik
    @dim4ik Автор вопроса
    @alekciy решение , где нужно сделать 0, аналогичное как и с комментариями, тут все просто и можно (нужно) хранить все в бд. Но когда необходимо запоминать, что новое, а что просмотренное, мне не понятно. отписал в комментарии ниже пример.
  • Redis хранение подписок на категории новостей

    dim4ik
    @dim4ik Автор вопроса
    @alekciy Все верно только в случае, когда не нужно смотреть все посты. Если необходимо смотреть все посты (как на утубе, однокласниках и прочих соц сетях) то необходимо где-то хранить ид новых постов, а не просто дату.

    В моем проекте необходимо учитывать новые авторские мп3, и если прослушали ее, тогда помечать как прослушанная, остальные новые. Это как пример не ваккумной задачи.
  • Как устроен трекер на Хабре?

    dim4ik
    @dim4ik Автор вопроса
    @alekciy Про комментарии вы правильно написали, но в с постами там по другому. Я создал вопрос про посты отдельно Redis хранение подписок на категории новостей
  • MVC. Генерация html страницы шаблонизатором и блоков (или собирание всех данных для этого)?

    dim4ik
    @dim4ik Автор вопроса
    @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 вставится обратно в шаблон
    и так каждый блок.

    В итоге в конце получаем готовую страницу.
  • MVC. Генерация html страницы шаблонизатором и блоков (или собирание всех данных для этого)?

    dim4ik
    @dim4ik Автор вопроса
    @Masterme Вот из-за пункта "б)" и задал этот вопрос. Не понимаю как это можно сделать с шаблонизатором типа Blitz.
    Получается так, как я описал выше.
    "Перед запуском страницы в шаблоне ищутся блоки" может пояснить этот момент, где в контроллере делается этот момент. Я так понимаю, что контроллер (допустим "новости") сначала делает свои проверки, берет данные из модели -> т.к. готовит массив (допустим $data) для передачи его шаблонизатору (нативному или в view), а только потом делает поиск блоков в шаблоне странице. Правильно я указал порядок действий?
  • MVC. Генерация html страницы шаблонизатором и блоков (или собирание всех данных для этого)?

    dim4ik
    @dim4ik Автор вопроса
    Согласен в вами полностью!
    Сейчас сделан контроллер новости главным(или основным).
    - вызывается только он, потом все параметры передаются шаблону
    - в шаблон так же вставили new_id для блоков/виджитов типа блока комментариев
    - потом идет поиск блоков в этом шаблоне (нашли блок комментариев или последние новости)
    - вызвали их контроллер->модель->контроллер->view = html
    - вернули опять эти html куски на место блоков в шаблоне
    - выдали страницу пользователю.

    Эта модель работает. Но как это реализовать на Blitz, я не знаю. Даже отдельный вопрос тут задавал про блитз, но никто не ответил мне.
  • MVC. Генерация html страницы шаблонизатором и блоков (или собирание всех данных для этого)?

    dim4ik
    @dim4ik Автор вопроса
    Конечная же моя цель, это дорефакторить свой "движок" сайт, и отдать отдельные модули на разработку другим программистам, чтобы опираясь на четкую структуру движка/модуля, мне легко было в этом разобраться.