Писать на форуме DIAFAN.CMS могут только зарегистрированные пользователи. Войдите или зарегистрируйтесь.
Всего найдено: 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 г. , редакция: 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 с удалёнки. Это первое, что ломают (имя - стандарт, остается подбор пароля).
-
-
-
-
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 уже доступна к установке.
Блоги
-
24.04.2024
-
Выпустили новую сборку DIAFAN.CMS 7.1.4.
Блоги
-
12.01.2024
-
В данном руководстве познакомим вас с панелью управления DIAFAN.CMS