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

Всего найдено: 1412

  • 08 февраля 2016 г. , редакция: 1454945854
  • Вот рекомендация разработчика cms.diafan https://user.diafan.ru/forum/show3045/#27865
    Цитата
    Виталий (DIAFAN.CMS)
    А-а, так это еще 5.3 обновленная..? Хм. Ну не знаю, это точно в ТП, наверное, с доступами. Случай совсем уникальный.

    Т.е. надо смотреть, что у Вас получилось в итоге на хосте. Со слов дать рекомендацию затруднительно, т.к. данную ситуацию либо надо моделировать, либо получить доступ к Вашему хосту и смотреть на месте.
  • 08 февраля 2016 г. , редакция: 1454946146
  • Обратите внимание на это сообщение https://user.diafan.ru/forum/show3045/#27854
    Цитата
    Виталий (DIAFAN.CMS)
    ...
    У нас был косяк с обновлением со старых версий, я писал раньше, когда народ обновлялся с 5.4 до 6.0, затем откатывался обратно, и снова обновлялся, там множились файлы всех версий в кастоме до абсурда. Это проблемы не было у тех, кто просто обновлялся, без откатов. Мы это ошибку исправили, но у тех, у кого она была, косяк с размноженными файлами в кастоме остался. Если надо, могу дать инструкцию, как починить такой запутанный сайт.
    ...

    и на это https://user.diafan.ru/forum/show3045/#27857
    Цитата
    Виталий (DIAFAN.CMS)
    Значит, смотрите, только Вам даю! Больше никому!
    Копируете из текущей сборки:
    modules/custom/custom.inc.php
    modules/update/update.inc.php
    modules/update/admin/update.admin.action.php
    в папку своей темы в custom.

    Затем откатываетесь до версии, из которой файлы скинулись в тему. Можно попробовать пооткатываться на разные точки. Вперед назад. Увидеть, что лишние файлы из custom ушли. И тогда вернуться опять к новой точке обновления. Потом и эти три файла уйдут из папки custom. Как-то так.

    Но копию сайта лучше сделать перед этим! А то даже я на одном своем сайте все сломал.
  • 06 февраля 2016 г. , редакция: 1454789893
  • В оригинальном файле cart.view.info.php (версии diafan.cms 6.0.1.0) присутствует ошибка (мелкая).
    Ищем строчку
    Код
    <td class="cart_remove"><span class="js_cart_remove" confirm="'.$this->diafan->_('Вы действительно хотите удалить товар из корзины?', false).'"><input type="checkbox" id="del'.$row["id"].'" name="del'.$row["id"].'" value="1"></span></td>

    и меняем её на эту
    Код
    <td class="cart_remove"><span class="js_cart_remove" confirm="'.$this->diafan->_('Вы действительно хотите удалить товар из корзины?', false).'"><input type="hidden" id="del'.$row["id"].'" name="del'.$row["id"].'" value="1"></span></td>

    Сбрасываем кэш, проверяем.
  • 07 февраля 2016 г.
  • Круто, Вы же хотели, чтоб удаляло, но не сказали, что не надо все.
    Ок.
    Цитата
    В оригинальном файле cart.view.info.php (версии diafan.cms 6.0.1.0) присутствует ошибка (мелкая).

    На самом деле присутствует две ошибки. Все сначало. Берем оригинальный файл cart.view.info.php (версии diafan.cms 6.0.1.0)
    Ищем строчку
    Код
    <td class="cart_remove"><span class="js_cart_remove" confirm="'.$this->diafan->_('Вы действительно хотите удалить товар из корзины?', false).'"><input type="checkbox" id="del'.$row["id"].'" name="del'.$row["id"].'" value="1"></span></td>

    и меняем её на эту
    Код
    <td class="cart_remove"><span class="js_cart_remove" confirm="'.$this->diafan->_('Вы действительно хотите удалить товар из корзины?', false).'"><input type="hidden" id="del'.$row["id"].'" name="del'.$row["id"].'" value="0"></span></td>

    Сбрасываем кэш, проверяем.
  • 07 февраля 2016 г.
  • Если продолжить, то в оригинальном файле useradmin.view.panel.php (версии diafan.cms 6.0.1.0) присутствует ТОЖЕ ошибка (мелкая).
    Эта строчка:
    Код
    <a href="'.($link_current_edit==BASE_PATH.ADMIN_FOLDER.'/site/edit1/'?BASE_PATH.ADMIN_FOLDER.'/'.($_GET["help"]?'?help=1':'site/'):$link_current_edit).'" title="'.$this->diafan->_('Редактировать текущую страницу в административной части', false).'">


    Должна быть такой
    Код
    <a href="'.($link_current_edit==BASE_PATH.ADMIN_FOLDER.'/site/edit1/'?BASE_PATH.ADMIN_FOLDER.'/'.(!empty($_GET["help"])?'?help=1':'site/'):$link_current_edit).'" title="'.$this->diafan->_('Редактировать текущую страницу в административной части', false).'">

  • 08 февраля 2016 г. , редакция: 1454918641
  • Если включить режим отображения ошибок в diafan.cms 6.0.1.0 (на текущий момент это последняя версия), авторизоваться как администратор сайта и зайти на страницу сайта клиентской части (не административной части сайта), то увидите ошибку.
    Цитата
    Undefined index: help
    /site.ru/public_html/modules/useradmin/views/usera1dmin.view.panel.php:41

    Для ее решения необходимо использовать условие
    Код
    !empty($_GET["help"])?

    Кстате на демо версии http://demo.diafan.ru/ сегодня ошибку исправели, но в пакете DIAFAN.CMS 6.0.1.0 от 4 февраля 2016 г. она еще есть.

    Или Вы спрашиваете про особенности использования условий проверки?
    Код

    if ($_GET["help"])
    {
    }

    Код

    if (isset($_GET["help"]))
    {
    }

    Код

    if (!empty($_GET["help"]))
    {
    }
  • 08 февраля 2016 г. , редакция: 1454920332
  • Цитата
    спорить о быстродействии интерпретируемых языков программирования, как минимум не рационально :)

    Согласен. Но хотел бы пояснить следующее. У каждого программиста, если присмотреться, есть свой подчерк. Также есть стиль, которому придерживаются программисты diafan. Предлагая свое решение, я основывался именно исходя из этого стиля.
    Говоря о быстродействии интерпретируемых языков программирования, то в данном случае это не важно. Это было бы важно, если это был бы (например) процесс импортирования/экспортирования данных, где большие массивы данных и ограниченное время на выполнение скрипта.
    Да, Gar|k (DIAFAN.CMS) и Виталий (DIAFAN.CMS), это пояснение конечно же мной адресовано не Вам, это Вы и без меня знаете. Пояснял я это для новичков, которые только знакомятся с программированием
  • 08 февраля 2016 г. , редакция: 1454920545
  • Цитата
    Ну вот, мы сами исправили, но кое-кто продолжает считать, что мы исправляем только после

    Виталий (DIAFAN.CMS), да я это вообще не считаю "косяком". Это мелкая опечатка.
    Цитата
    Не боги горшки обжигают
  • 08 февраля 2016 г. , редакция: 1454964647
  • Цитата
    на одном проекте была тема с тем на форум/вопро-ответ/отзывы постились всякие кракозябры/ реклама и не помогала никакая капча/рекапча абсолютно, при чем даже метрика не отобразала таких посетителей ( на форуме даже была тема когда человек руками каждый день чистил - Диафан был ни при чем

    Это бред. Поясню. Готовим робота иметирующего поведение человека на сайте. Ставим перед ним задачу писать сообщения на форуме определенного содержания. Защита: в настройках diafan.cms ставим использование капчи и (или) публиковать на сайте после проверки модератором.
    OOO "СЕРВИСОПТКОМ" (SERVOPTKOM), у Вас наболело из-за того, что не используете возможности cms? Не воспринимайте это за оскарбление в Ваш адрес. Просто очень часто встречаюсь с тем, что люди делают выводы не на чем не основываясь.
    Да, Вы говорите еще про фаерволы (полагал, что Вы скажите еще про уровни L2, L3). А Вы в курсе как они работают или его просто установили и считаете, что все Ок.
  • 09 февраля 2016 г. , редакция: 1455013109
  • Уточню, вы приводите лог авторизации
    Цитата
    auth.txt

    Но он здесь лишь второстипенен, нужен лог работы с файлами, лог веб сервера (уточню лог веб сервера, это не лог работы сервака, а лог apache и т.п.) + лог ssh, ftp. Т.е. логи, позволяющие понять откуда зараженный файл прилетел
  • 09 февраля 2016 г.
  • Любимов Павел (webnavigator), спасибо. Код интересный. Тяга у меня к этому (хобби). Могу позже привести пример BackDoor написанного практически без единой буквы - он мне больше нравится.

    И так, в распоряжении soderzhimoe-icon.php.pdf (код плохиша), auth.txt (лог авторизации, не расширенный), log_proftpd.txt (только лог открытия и закрытия ссесий ftp, т.е. не расширенный)
    С этого делать вывод не возможно. НО вы обращали внимание на это
    Цитата
    Failed password for root from 183.3.202.107 port 37110 ssh2

    И это с изрядной периодичностью. Если это не владелец, то это тупой подбор с одного ip
  • 09 февраля 2016 г.
  • Дополню. Т.е. виден постоянный подбор пороля с адреса 183.3.202.107. При этом подбор для root? Предположу, что у Вас, OOO "СервисОптКом" (Servoptkom), все таки свистнули парольку. Так, что это либо хост виноват, либо Вы. Почему я предположил, что хост. Да потому, что нельзя разрешать соединение под root с удалёнки. Это первое, что ломают (имя - стандарт, остается подбор пароля).
  • 05 февраля 2016 г.
  • Полагаю это не полный текст ошибки. Если есть сложности с программированием, то перезалейте файл cart.action.php (возьмите его из оригинального пакета cms.diafan). Сбрости кэш и проверьте, повторится ли ошибка.
  • 13 октября 2016 г. , редакция: 1476345591
  • Эхх. Что с Вами будешь делать. Думал Максим (web-prosto) отпишется, что решил.
    Цитата
    Ладно, а то уже от темы отошли тут... пойду дальше пытаться разбираться... когда решится задача, то отпишусь и тут...
    Наверно забыл.

    Продолжаю. Берем файл clauses.model.php, ищем функцию
    Код
    public function show_block($count, $site_ids, $cat_ids, $sort, $images, $images_variation, $tag){ ... }
    и излагаем ее вот так
    Код
    public function show_block($count, $site_ids, $cat_ids, $sort, $images, $images_variation, $tag)
    {
    $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;
    }
    }
    $where = '';

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

    if ($sort == "rand" || ! $result = $this->diafan->_cache->get($cache_meta, "clauses"))
    {
    $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('clauses', $site_ids, $cat_ids, $minus))
    {
    return false;
    }
    $inner = "";
    if($cat_ids)
    {
    $inner = " INNER JOIN {clauses_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 {clauses_category_rel} as r ON r.element_id=e.id"
    ." AND r.cat_id NOT IN (".implode(',', $minus["cat_ids"]).")";
    }
    $where = '';
    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($sort == 'keywords')
    {
    Custom::inc('includes/searchwords.php');
    $searchwords = new Searchwords();
    $searchwords->max_length = $this->diafan->configmodules("max_length", "search");
    $names = $searchwords->prepare($title);
    if(empty($names))
    {
    return false;
    }

    $keys = DB::query_fetch_key_value("SELECT id, keyword FROM {search_keywords} WHERE keyword IN ('".implode("', '", $names)."')", "keyword", "id");
    if(count($keys) < count($names))
    {
    return;
    }
    $inner .= " INNER JOIN {search_results} AS sr ON sr.element_id=e.id AND sr.table_name='clauses'";
    $inner .= " INNER JOIN {search_index} AS i ON sr.id=i.result_id AND i.keyword_id IN ('".implode("', '", $keys)."') AND i.rating=0";
    }
    if($this->diafan->_site->module == 'clauses' && $this->diafan->_route->show)
    {
    $where .= $where.' AND e.id<>'.$this->diafan->_route->show;
    }
    if($tag)
    {
    $t = DB::query_fetch_array("SELECT id, [name] FROM {tags_name} WHERE [name]='%s' AND trash='0'", $tag);
    if(! $tag)
    {
    return false;
    }
    $inner .= " INNER JOIN {tags} AS t ON t.element_id=e.id AND t.element_type='element' AND t.module_name='clauses' AND t.tags_name_id=".$t["id"];
    }

    if ($sort == "rand")
    {
    $max_count = DB::query_result(
    "SELECT COUNT(DISTINCT e.id) FROM {clauses} as e"
    .$inner
    .($this->diafan->configmodules('where_access_element', 'clauses') ? " LEFT JOIN {access} AS a ON a.element_id=e.id AND a.module_name='clauses' AND a.element_type='element'" : "")
    ." WHERE e.[act]='1' AND e.trash='0' AND e.created<%d"
    .($this->diafan->_site->module == 'clauses' && $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)"
    .$where
    .($this->diafan->configmodules('where_access_element', 'clauses') ? " AND (e.access='0' OR e.access='1' AND a.role_id=".$this->diafan->_users->role_id.")" : ''),
    $time, $time, $time
    );
    $rands = array();
    for ($i = 1; $i <= min($max_count, $count); $i++)
    {
    do
    {
    $rand = mt_rand(0, $max_count - 1);
    }
    while (in_array($rand, $rands));
    $rands[] = $rand;
    }
    }
    else
    {
    $rands[0] = 1;
    }
    $result["rows"] = array();

    foreach ($rands as $rand)
    {
    switch($sort)
    {
    case "date":
    $order = ' ORDER BY e.created DESC, e.id DESC';
    break;

    case "rand":
    $order = '';
    break;

    default:
    $order = ' ORDER BY e.sort DESC, e.id DESC';
    break;
    }
    $rows = DB::query_range_fetch_all(
    "SELECT e.id, e.[name],e.[anons], e.timeedit, e.site_id, e.created FROM {clauses} AS e"
    .$inner
    .($this->diafan->configmodules('where_access_element', 'clauses') ? " LEFT JOIN {access} AS a ON a.element_id=e.id AND a.module_name='clauses' AND a.element_type='element'" : "")
    ." WHERE e.[act]='1' AND e.trash='0' AND e.created<%d"
    .($this->diafan->_site->module == 'clauses' && $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)"
    .$where
    .($this->diafan->configmodules('where_access_element', 'clauses') ? " AND (e.access='0' OR e.access='1' AND a.role_id=".$this->diafan->_users->role_id.")" : '')
    ." GROUP BY e.id"
    .$order,
    $time, $time, $time,
    $sort == "rand" ? $rand : 0,
    $sort == "rand" ? 1 : $count
    );

    $result["rows"] = array_merge($result["rows"], $rows);
    }
    $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 {clauses_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"], 'clauses', '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;
    }
    if(! empty($result["rows"]) && $tag)
    {
    $result["name"] .= ': '.$t["name"];
    }
    //сохранение кеша
    if ($sort != "rand")
    {
    $this->diafan->_cache->save($result, $cache_meta, "clauses");
    }
    }
    foreach ($result["rows"] as &$row)
    {
    $this->prepare_data_element($row);
    }
    foreach ($result["rows"] as &$row)
    {
    $this->format_data_element($row);
    }

    // это то, что добавили
    foreach ($result["rows"] as $key => $r_w)
    $result["rows"][$key]["counter"] = $this->get_counter_view($r_w["id"]);

    return $result;
    }

    Можно продолжить теперь не только для шаблонного тега статей, но и для вывода похожих статей. Находим функцию
    Код
    public function show_block_rel($count, $images, $images_variation){ ... }
    и излагаем ее вот так
    Код
    public function show_block_rel($count, $images, $images_variation)
    {
    $time = mktime(23, 59, 0, date("m"), date("d"), date("Y"));

    //кеширование
    $cache_meta = array(
    "name" => "block_rel",
    "count" => $count,
    "lang_id" => _LANG,
    "element_id" => $this->diafan->_route->show,
    "images" => $images,
    "images_variation" => $images_variation,
    "access" => ($this->diafan->configmodules('where_access_element', 'clauses') || $this->diafan->configmodules('where_access_cat', 'clauses') ? $this->diafan->_users->role_id : 0),
    "time" => $time
    );

    if (! $result = $this->diafan->_cache->get($cache_meta, "clauses"))
    {
    $result["rows"] = DB::query_range_fetch_all(
    "SELECT e.id, e.[name], e.[anons], e.created, e.timeedit, e.site_id FROM {clauses} AS e"
    ." INNER JOIN {clauses_rel} AS r ON e.id=r.rel_element_id AND r.element_id=%d"
    .($this->diafan->configmodules("rel_two_sided") ? " OR e.id=r.element_id AND r.rel_element_id=".$this->diafan->_route->show : '')
    .($this->diafan->configmodules('where_access_element', 'clauses') ? " LEFT JOIN {access} AS a ON a.element_id=e.id AND a.module_name='clauses' AND a.element_type='element'" : "")
    ." WHERE e.[act]='1' AND e.trash='0' AND e.created<%d"
    ." AND e.date_start<=%d AND (e.date_finish=0 OR e.date_finish>=%d)"
    .($this->diafan->configmodules('where_access_element', 'clauses') ? " AND (e.access='0' OR e.access='1' AND a.role_id=".$this->diafan->_users->role_id.")" : '')
    ." GROUP BY e.id"
    ." ORDER BY e.sort DESC",
    $this->diafan->_route->show, $time, $time, $time, 0, $count
    );
    $this->elements($result["rows"], array("count" => $images, "variation" => $images_variation));
    $this->diafan->_cache->save($result, $cache_meta, "clauses");
    }
    foreach ($result["rows"] as &$row)
    {
    $this->prepare_data_element($row);
    }
    foreach ($result["rows"] as &$row)
    {
    $this->format_data_element($row);
    }

    // это то, что добавили
    foreach ($result["rows"] as $key => $r_w)
    $result["rows"][$key]["counter"] = $this->get_counter_view($r_w["id"]);

    return $result;
    }


    М-да. Если у кого-нибудь не получилось (а данный код я проверил - работает), то не забудьте в настройках модуля отметить следующие пункты, а то наверняка будите думать, что приведенный код - ошибочный. См. картинку.


    Ну, как-то так. Надеюсь принцип понятен. Успехов, коллеги.
  • 08 февраля 2016 г. , редакция: 1454963070
  • Для страницы статьи и для страницы списка статей в model формируются значения. Соответственно у Вас не выводится значение на страницы списка статей, т.к. это значение в model не было передано. Вам нужно по аналогии с функцией подготовки значений для страницы статьи скорректировать функцию подготовки значений для страницы списка статей. Дело минутное, но у меня сейчас в распоряжении только телефон. А на нем сложно вывести сюда нужное Вам решения. В принципе я уверен, что у Вас получится сделать это самостоятельно. Если нет, пишите постараюсь помочь или кто-то еще поможет.
  • 10 февраля 2016 г. , редакция: 1455088987
  • В файл clauses.model.php добавте следующую функцию
    Код
    function get_counter_view($element_id)
    {
    if (! $element_id)
    {
    return 0;
    }
    if($this->diafan->configmodules('counter'))
    {
    $counter = DB::query_fetch_array("SELECT id, count_view FROM {%s_counter} WHERE element_id=%d LIMIT 1", $this->diafan->_site->module, $element_id);
    if($counter)
    {
    if(empty($_SESSION[$this->diafan->_site->module."_view"][$element_id]))
    {
    $_SESSION[$this->diafan->_site->module."_view"][$element_id] = 1;
    DB::query("UPDATE {%s_counter} SET count_view=%d WHERE id=%d LIMIT 1", $this->diafan->_site->module, ++$counter["count_view"], $counter["id"]);
    }
    }
    else
    {
    DB::query("INSERT INTO {%s_counter} (count_view, element_id) VALUES (1, %d)", $this->diafan->_site->module, $element_id);
    $counter["count_view"] = 1;
    $_SESSION[$this->diafan->_site->module."_view"][$element_id] = 1;
    }
    if($this->diafan->configmodules('counter_site'))
    {
    return $counter["count_view"];
    }
    }
    else return 0;
    }


    Теперь ей можно воспользоваться так, как Вам угодно. Т.е. в параметр функции $element_id записываем id конкретной статьи и получаем на выходе количество просмотров. При этом
    Цитата
    Количество просмотров на сайте текущей статьи. Статистика ведется и параметр выводится, если в настройках модуля отмечена опция «Подключить счетчик просмотров».


    Пример:
    ПЕРЕМЕННАЯ_ДЛЯ_КОЛИЧЕСТВА_ПРОСМОТРОВ = get_counter_view(ЗДЕСЬ_id_СТАТЬИ);

Новости

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

Форум