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

Важно (всегда сверху)

  • 30 июня 2015 г.
  • Как вывести важную новость в отдельном блоке?
  • 30 июня 2015 г.
  • Заменить функцию в news.model.php

    Код
    public function show_block($count, $site_ids, $cat_ids, $sort, $images, $images_variation,$prior)
    {
    $time = mktime(23, 59, 0, date("m"), date("d"), date("Y"));

    if($sort == 'keywords')
    {
    if($this->diafan->_site->titlemodule)
    {
    $title = $this->diafan->_site->titlemodule;
    }
    else
    {
    $title = $this->diafan->_site->name;
    }
    }

    //кеширование
    $cache_meta = array(
    "name" => "block",
    "cat_ids" => $cat_ids,
    "site_ids" => $site_ids,
    "count" => $count,
    "prior" => $prior,
    "lang_id" => _LANG,
    "time" => $time,
    "sort" => $sort.($sort == 'keywords' ? $title : ''),
    "images" => $images,
    "images_variation" => $images_variation,
    "access" => ($this->diafan->configmodules('where_access_element', 'news') || $this->diafan->configmodules('where_access_cat', 'news') ? $this->diafan->_users->role_id : 0),
    );

    if (! $result = $this->diafan->_cache->get($cache_meta, "news"))
    {
    $minus = array();
    $one_cat_id = count($cat_ids) == 1 && substr($cat_ids[0], 0, 1) !== '-' ? $cat_ids[0] : false;
    if(! $this->validate_attribute_site_cat('news', $site_ids, $cat_ids, $minus))
    {
    return false;
    }
    $where = "";
    if($sort == 'keywords')
    {
    Custom::inc('includes/searchwords.php');
    $searchwords = new Searchwords();
    $names = $searchwords->prepare($title);
    if(empty($names))
    {
    return false;
    }
    foreach ($names as $i => $name)
    {
    $where .= ($i ? " OR ": " AND (")."LOWER(e.[name]) LIKE '%%".$name."%%'";
    }
    $where .= ")";
    }
    if($this->diafan->_site->module == "news" && $this->diafan->_route->show)
    {
    $where .= " AND e.id<>".$this->diafan->_route->show;
    }
    $inner = "";
    if($cat_ids)
    {
    $inner = " INNER JOIN {news_category_rel} as r ON r.element_id=e.id"
    ." AND r.cat_id IN (".implode(',', $cat_ids).")";
    }
    elseif(! empty($minus["cat_ids"]))
    {
    $inner = " INNER JOIN {news_category_rel} as r ON r.element_id=e.id"
    ." AND r.cat_id NOT IN (".implode(',', $minus["cat_ids"]).")";
    }
    if($site_ids)
    {
    $where .= " AND e.site_id IN (".implode(",", $site_ids).")";
    }
    elseif(! empty($minus["site_ids"]))
    {
    $where .= " AND e.site_id NOT IN (".implode(",", $minus["site_ids"]).")";
    }
    if($prior!='')
    $where .= " AND e.prior = '".$prior."' ";
    $result["rows"] = DB::query_range_fetch_all(
    "SELECT e.id, e.[name],e.[anons], e.timeedit, e.site_id, e.created FROM {news} AS e"
    .$inner
    .($this->diafan->configmodules('where_access_element', 'news') ? " LEFT JOIN {access} AS a ON a.element_id=e.id AND a.module_name='news' AND a.element_type='element'" : "")
    ." WHERE e.[act]='1' AND e.trash='0' AND e.created<%d"
    .($this->diafan->_site->module == 'news' && $this->diafan->_route->show ? " AND e.id<>".$this->diafan->_route->show : '')
    ." AND e.date_start<=%d AND (e.date_finish=0 OR e.date_finish>=%d)"
    .($this->diafan->configmodules('where_access_element', 'news') ? " AND (e.access='0' OR e.access='1' AND a.role_id=".$this->diafan->_users->role_id.")" : '')
    .$where
    ." GROUP BY e.id ORDER BY e.prior DESC, e.created DESC, e.id DESC",
    $time, $time, $time, 0, $count
    );
    $this->elements($result["rows"], array("count" => $images, "variation" => $images_variation));

    // если категория только одна, задаем ссылку на нее
    if (!empty($result["rows"]) && $one_cat_id)
    {
    $cat = DB::query_fetch_array("SELECT [name], site_id, id FROM {news_category} WHERE id=%d LIMIT 1", $one_cat_id);

    $result["name"] = $cat["name"];
    $result["link_all"] = $this->diafan->_route->link($cat["site_id"], $cat["id"], 'news', 'cat');
    $result["category"] = true;
    }
    // если раздел сайта только один, то задаем ссылку на него
    elseif (!empty($result["rows"]) && count($site_ids) == 1)
    {
    $result["name"] = DB::query_result("SELECT [name] FROM {site} WHERE id=%d LIMIT 1", $site_ids[0]);
    $result["link_all"] = $this->diafan->_route->link($site_ids[0]);
    $result["category"] = false;
    }
    $this->diafan->_cache->save($result, $cache_meta, "news");
    }
    foreach ($result["rows"] as &$row)
    {
    $this->prepare_data_element($row);
    }
    foreach ($result["rows"] as &$row)
    {
    $this->format_data_element($row);
    }
    return $result;
    }


    В news.php заменить функцию
    Код
    public function show_block($attributes)
    {
    $attributes = $this->get_attributes($attributes, 'count', 'site_id', 'cat_id', 'sort', 'images', 'images_variation', 'only_module', 'template','prior');

    $count = $attributes["count"] ? intval($attributes["count"]) : 3;
    $site_ids = explode(",", $attributes["site_id"]);
    $cat_ids = explode(",", $attributes["cat_id"]);
    $sort = $attributes["sort"] == "date" || $attributes["sort"] == "keywords" ? $attributes["sort"] : "";
    $images = intval($attributes["images"]);
    $prior = $attributes["prior"];
    $images_variation = $attributes["images_variation"] ? strval($attributes["images_variation"]) : 'medium';

    if ($attributes["only_module"] && ($this->diafan->_site->module != "news" || in_array($this->diafan->_site->id, $site_ids)))
    return;

    if($attributes["cat_id"] == "current")
    {
    if($this->diafan->_site->module == "news" && (empty($site_ids[0]) || in_array($this->diafan->_site->id, $site_ids))
    && $this->diafan->_route->cat)
    {
    $cat_ids[0] = $this->diafan->_route->cat;
    }
    else
    {
    $cat_ids = array();
    }
    }

    $result = $this->model->show_block($count, $site_ids, $cat_ids, $sort, $images, $images_variation,$prior);
    $result["attributes"] = $attributes;

    echo $this->diafan->_tpl->get('show_block', 'news', $result, $attributes["template"]);
    }


    Использовать так в шаблоне так
    Код
    <insert name="show_block" module="news" cat_id="1" prior="1">

    • 30 июня 2015 г.
    • положил в избранное. Вполне возможно пригодится на моих личных сайтах (коими все некогда заняться..).
  • 30 июня 2015 г. , редакция: 30 июня 2015 г.
  • Спасибо, Андрей! А кэширование, смотрю, убрали?

Новости

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

Форум