Галерея в блоге

Discussion in 'Говорим по-русски' started by RinceWND, Sep 15, 2016.

  1. RinceWND

    RinceWND New Member

    Здравствуйте!

    Уже некоторое время играюсь с вашей CMS, и вот захотелось мне попробовать добавить мини-галерею в блог. Однако, я даже не понял, с чего начать.
    Первой мыслью было добавление поля загрузки нескольких изображений на страницу блога, однако такая страница отсутствует в списке... Чем вообще отличаются страницы, которые присутствуют в этом списке, ото всех остальных? Почему они особенные, и можно ли сделать таковой произвольную страницу?
    Второй в голову пришла мысль поискать плагин, но таковых не оказалось – найден был лишь плагин для создания альбомов пользователей... Уже что-то, но не в том месте.
    Третья мысль оказалась странной для меня – написать плагин самостоятельно... точнее подглядывая в плагин Albums.
    Но перед тем, как я начал пробовать осилить непосильное (ибо не силён в php), в голову закралась четвёртая мысль – поинтересоваться на форуме: "А вдруг всё-таки есть возможность добавления галереи средствами из коробки. Или же без отдельного плагина тут не обойтись?"
  2. Dayir_A.

    Dayir_A. Staff Member

    Приветствую @RinceWND,

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

    2016-09-16_9-28-38.png

    После этого можете добавить страницу альбомов на главное меню.
  3. RinceWND

    RinceWND New Member

    Спасибо! Теперь я понял, как работают меню.
    Однако, это не то, чего я хотел достичь.

    Пожалуй, я неверно сформулировал свою мысль. Я пытаюсь добавить галерею к каждой отдельной записи блога. Например, разместить после содержимого записи блога самый свежий альбом автора (либо, выбрать альбом, основываясь на других параметрах данной записи).
    Попутно ко мне в голову забрела очередная мысль – создать отдельный блок (пхп или смарти), в котором прописать код, отображающий альбом-галерею. Однако, тут вопрос уже в другом: "Могу ли я вручную инициализировать плагин там, где захочу, и как?"

    И, если можно, параллельно возникшие вопросы: "Можно ли получить из одного блока параметры другого, или же у них существует какая-то область видимости?", и "Могу ли я как-то узнать, какие параметры тот или иной модуль делает доступными для использования в шаблоне?" (дабы избежать ручного выискивания в коде вызовов $iaView->assign).
  4. Dayir_A.

    Dayir_A. Staff Member

    Здравствуйте
    В Subrion CMS есть понятие item и к сожалению плагины не могут создавать item'ов, если бы это был какой нибудь пакет, то можно было бы просто создать поле Multiple images upload (а поля можно создавать только для item)


    Да, можно сделать блок, в котором бы выводилсь альбомы, но все это можно сделать только програмным путем, функционалом самой CMS этого не получится достичь.

    Я слабо представляю как это сделать и вообще мне не очень понятно что вы имеете ввиду под "инициализировать плагин".

    Ответ неоднозначный, где-то можно, где-то нет. Зависит от ситуации... В целом, вся логика блоков находится в файлах hook.blocks-load.php и в хуках, которые хранятся в базе.
    Если например присвоить $iaView->assign('myVar', 'value'); в одном из хуков и вывести, например, в layout.tpl, то переменная будет доступна.
  5. Dayir_A.

    Dayir_A. Staff Member

    Если вы хотите иметь возможность добавления картинок (галереи) для одного блога, то самый легкий путь - это кастомно добавить "поле" multiple images upload и процессить его церез цикл, так же как и картинку блога.
    К сожалению примеров привести не смогу, но можно покопаться в исходниках класса iaField (includes/classes/ia.core.field.php) в методе parsePost(). Весь процессинг для item'ов происходит именно там.
  6. RinceWND

    RinceWND New Member

    Спасибо за пищу для ума.

    Пока ещё не совсем понимаю, как всё здесь устроено (и с ООП я на очень-очень вежливое Вы), поэтому мои вопросы вполне могут варьироваться от просто "некорректные" до "абсолютно идиотские". До этого "сидел" на Textpattern, а там всё на старом добром процедурном подходе. Но вот взбрело в голову попробовать что-то новенькое... И подумалось мне после первого знакомства, что плагин – это некий класс, объект которого можно создать и задать ему параметры (а всё остальное за меня сделает магия XD ). Оттого и возник подобный вопрос.

    Вот как раз суть этих полей я до сих пор и не понял, поскольку добавлять их можно только на определённые страницы, среди которых блога я не нашёл. Или под кастомно вы подразумеваете "начудить ручками в коде"?

    На данный момент я добился отображения альбома в записи блога путём создания php блока со следующим содержимым, которое я бессовестно позаимствовал из кода обоих плагинов (и добавления нового столбца `album` в таблицу блога):
    Code (Text):
    $id = (int)$iaCore->requestPath[0];

    if ($id != 0) {

    $sql =   'SELECT b.`album` ' .
       'FROM `:prefix:table_blog_entries` b ' .
       'LEFT JOIN `:prefix:table_members` m ON (b.`member_id` = m.`id`) ' .
       "WHERE b.`id` = :id AND b.`status` = ':status'";

    $sql = iaDb::printf($sql, array(
       'prefix' => $iaCore->iaDb->prefix,
       'table_blog_entries' => 'blog_entries',
       'table_members' => iaUsers::getTable(),
       'id' => (int)$id,
       'status' => iaCore::STATUS_ACTIVE
       ));

    $entry = $iaCore->iaDb->getRow($sql);

    $sql =   'SELECT b.`id` ' .
       'FROM `:prefix:albums` b ' .
       "WHERE b.`title` = ':title'";

    $sql =   iaDb::printf($sql, array(
         'prefix' => $iaCore->iaDb->prefix,
         'albums' => "albums",
         'title' => $entry['album'],
       ));

    $res = $iaCore->iaDb->getRow($sql);

    $photos = $iaCore->iaDb->all(iaDb::ALL_COLUMNS_SELECTION, " `album_id` = {$res['id']} AND `status` = '" . iaCore::STATUS_ACTIVE . "'", 0, $iaCore->get('album_photos_perpage', 10), 'albums_photos');

    $smarty->assign('photos', $photos);
    $res = $smarty->fetch('extra:albums/photos-list');

    echo $res;
    }
    В этом коде мне не нравится, что я делаю "повторный" запрос к базе с целью получения информации о записи блога. Ну и связывать запись блога с альбомом лучше не по имени, а по ид альбома, но это уже не так важно, ибо на данном этапе мне хочется уцепить принцип работы CMS, поскольку теперь, когда я понял куда и как подглядывать, наплодить лишних запросов я смогу всегда, но их и так на странице уже под 30 штук, а хотелось бы всё же меньше.

    Спасибо, покопаюсь.
  7. Dayir_A.

    Dayir_A. Staff Member

    Задавайте, не стеснятесь. Всегда рады помочь )

    Да, именно. Вы уже сделали подобное, добавили колонку, и как я понял сделали текстовое поле, куда вы вводите заголовок альбома.

    Чтобы избавиться от лишнего запроса, нужно вместо заголовка альбома, хранить его id. Тогда вы сможете одним запросом при помощи join'ов получиь необходимые данные.

Share This Page