Вход • Регистрация

Добавление к модулю изображений

  • 09 декабря 2011 г. , редакция: 09 декабря 2011 г.
  • В тех. поддержку пришел вопрос "Как в меню прикрепить к пунктам изображение?".
    Это можно сделать стандартными способами, в diafan.CMS есть прекрасный модуль images, но чтобы его подключить придется немного постараться

    Разберем на примере модуля Меню.
    Открываем файл modules/menu/admin/menu.admin.php

    Код
    //поля в базе данных для редактирования
    $this->variable_table = array(
    'name' => 'text',
    'act' => 'checkbox',
    'images' => 'module', // подключаем модуль изображения
    'module_name' => 'function',
    'parent_id' => 'function',
    'cat_id' => 'function',
    'othurl' => 'text'
    );


    По идее поле для загрузки изображения должно появиться, но его нет. Это связано с тем что у модуля images множество собственных настроек, поэтому в файле конфигурации модуля его тоже нужно подключить. Но для модуля меню нет "настроек", сделаем их

    Файл modules/menu/admin/menu.admin.config.php

    Код
    <?php
    if (!defined('DIAFAN'))
    {
    include(dirname(dirname(dirname(__FILE__))).'/includes/404.php');
    }
    class Menu_admin_config extends Frame_admin
    {
    public $file = 'menu_config';
    public function __construct($diafan)
    {
    $this->diafan = $diafan;

    $this->variable_table = array(
    'images' => 'module' // подключаем модуль изображения
    );

    $this->config_module = array(
    'config' => 1 //файл настроек модуля
    );
    }
    }


    Теперь для того чтобы наш пункт появился перейдем по ссылке site.ru/admin/adminsite (site.ru - ваш сайт) и добавим подстраницу для "Меню на сайте" с именем "настройки" и псевдоссыкой "menu/config". Все теперь модуль menu имеет свои настройки, в котором можно настроить подключенный модуль изображения.

    Для вывода прикрепленных изображений на сайте необходимо немного подправить модель вывода modules/menu/menu.model.php
    Находим функцию show_block и основной цикл добавления полей который начинается с 80 строки и где то строке на 95 перед
    Код
    $this->result["rows"][$row["parent_id"]][] = $row;
    добавим:

    Код
    if ($this->diafan->configmodules("images", "menu", $row["site_id"]))
    {
    if ($images === 'list' && $this->diafan->configmodules("list_img", "menu", $row["site_id"]))
    {
    $row["img"] = $this->diafan->_images->get($row["id"], $row["name"], 'menu', $this->diafan->configmodules("list_img", "menu", $row["site_id"]) == 1 ? 1 : 0, $row["link"]);
    }
    elseif ($images != 'list' && $images)
    {
    $row["img"] = $this->diafan->_images->get($row["id"], $row["name"], 'menu', $images, $row["link"]);
    }
    }


    Вывод изображений можно подсмотреть из любого модуля например в news.view.php это делается так
    Код
    if (! empty($result["img"]))
    {
    echo '<div class="news_cat_all_img">';
    foreach ($result["img"] as $img)
    {
    switch($img["type"])
    {
    case 'animation':
    echo '<a href="'.BASE_PATH.$img["link"].'" rel="prettyPhoto[gallery'.$result["id"].'news]">';
    break;
    case 'big_image':
    echo '<a href="'.BASE_PATH.$img["link"].'" rel="big_image" width="'.$img["link_width"].'" height="'.$img["link_height"].'">';
    break;
    default:
    echo '<a href="'.BASE_PATH_HREF.$img["link"].'">';
    break;
    }
    echo '<img src="'.$img["src"].'" width="'.$img["width"].'" height="'.$img["height"].'" alt="'.$img["alt"].'" title="'.$img["title"].'">'
    .'</a> ';
    }
    echo '</div>';
    }
    Но в нашем случае будут другие переменные... Я думаю с выводом вы разберетесь самостоятельно print_r, в помощь
    • 09 декабря 2011 г.
    • Этот вопрос в техподдержку не от меня случайно пришёл?
  • 09 декабря 2011 г.
  • Моему клиенту нужно чтобы меню категорий товаров таким было - при наведении на ссылки меняется фоновое изображение: http://1000rublei.ru/ddd/
    • 09 декабря 2011 г.
    • Вариант решения задачи зависит от фантазии и опыта программиста.
      Лично я, прикрепил бы изображения к меню. И переделал вывод (view) так чтобы где либо в ссылке фигурировал адрес картинки (возможно в атрибуте) + небольшой jquery обработчик, для смены background-image в определенном div (обработчик зависит от верстки).
      • 15 апреля 2013 г.
      • Можно сделать вот так:
        http://cms.diafan.ru/dokument/full-manual/examples/new-field/

        У Вам будет картинка которая к меню крепится по стандартному функционала а по ссылке выше можно добавить поле еще одно и назвать его "Фото при наведении", например, и все, останое дело техники: в меню настраиваете mousehover, mouseover или как там правильно пишется. И Все!

  • 30 декабря 2011 г.
  • Почему в массиве картинки нет? делал всё по инструкцииArray ( [show_all_level] => 0
    Код
    [hide_parent_link] => 0 [rows] => Array ( [0] => Array ( [0] => Array ( [id] => 15 [name] => ALFA ROMEO [module_name] => shop [site_id] => 3 [module_cat_id] => 6 [element_id] => 0 [parent_id] => 0 [othurl] => [link] => shop/alfa_romeo/ [active] => [active_child] => ) [1] => Array ( [id] => 16 [name] => AUDI [module_name] => shop [site_id] => 3 [module_cat_id] => 7 [element_id] => 0 [parent_id] => 0 [othurl] => [link] => shop/audi/ [active] => [active_child] => ) [2] => Array ( [id] => 17 [name] => BMW [module_name] => shop [site_id] => 3 [module_cat_id] => 8 [element_id] => 0 [parent_id] => 0 [othurl] => [link] => shop/bmw/ [active] => [active_child] => ) [3] => Array ( [id] => 18 [name] => CADILLAC [module_name] => shop [site_id] => 3 [module_cat_id] => 9 [element_id] => 0 [parent_id] => 0 [othurl] => [link] => shop/cadillac/ [active] => [active_child] => ) ) ) [parent_id] => 0 [level] => 1 [attributes] => Array ( [name] => show_block [module] => menu [id] => 4 [template] => slider [tag_start_1] => [tag_end_1] => [tag_active_start_1] => [tag_active_end_1] => [tag_level_start_1] => [tag_level_end_1] => [tag_active_child_start_1] => [tag_active_child_end_1] => [hide_parent_link] => [separator_1] => [count_level] => ) )
  • 15 апреля 2013 г.
  • А можно ли добавить к модулю несколько полей модуля одного типа (например, модуль изображений)?
    • 29 декабря 2015 г.
    • Тоже понадобилось к элементу прикрепить два массива изображений, но, похоже, без глубокой кастомизации не пройдёт. :(
      • 30 декабря 2015 г.
      • Да это проблема. Частично решал разбиением портянки на нужное количество отрезков. Но такой вариант жрёт место на диске потому что приходится все картинки преобразовывать в n форматов если использовать n подстрок.

Новости

  • 18 июня
  • В сборке большое обновление demo-шаблона, дополнительная защита от спама, улучшение YML-импорта и еще много важного и интересного.
  • 24 апреля
  • В новой сборке совершили революцию в структурировании кастомизированной информации в шаблонах, добавили авторегистрацию пользователей, усовершенствовали защиту от спама, актуализировали накопительную скидку, а также улучшили производительность и стабильность работы системы.
  • 12 января
  • После выхода сборки 7.1 мы выпустили уже три патча, в каждом из которых улучшаем административную часть сайта. Сборка DIAFAN.CMS 7.1.3 уже доступна к установке. 

Форум