Помощник
Дата поста: | В теме: | За сообщение: | Поблагодарили: | ||
---|---|---|---|---|---|
11.6.2015, 23:35 |
Верстка HTML/CSS Верстка по низкой цене |
Заказывал, по необходимости, верстку у ТС. Понравилась валидность HTML "из коробки". Пара мелких правок было исправлено сразу же после сдачи работы. Итог: доволен. Рекомендую к сотрудничеству. |
|||
25.2.2013, 21:38 |
Наглость заказчика или откуда такое воспитание. Речь пойдет о юзере Маулталка |
Приветствую Маулчан. Сей пост пишу потому, что был удивлен наглостью одного из заказчиков (PriM). Поступил заказ на верстку макета и созданию шаблона под DLE. Работу выполнил, успешно отдал заказчику и получил оплату. После, ежедневно стал засыпаться вопросами от этого человека, который, как оказалось, не понимает даже элементарных вещей. Я пару дней терпеливо отвечал и выполнял кое-какую работу за "просто так", после чего мне это надоело. Поступила партия новых задач, решать которые я предложил за энную сумму и человек согласился. Опять же, работу выполнил и сдал, а оплату, в полном размере, не получил. Напоминал около месяца, потом поставил минус в карму и забил. Я же не попугай, да и сумма - мелочь. Проходит почти четыре месяца и он пишет мне в скайп (копирую историю переписки): Развернуть/Свернуть
[1:34:33] Антон - svetti.net: Добрый день на днях я отправлю свой долг. И надо будет что то переделать на сайте. А то много косяков осталось. Много чего не работает, довести до ума. А то все как то криво получилось. За это заплачю естественно
[1:35:20] Антон - svetti.net: и мне псд исходничек шапки ты не скинул [18:30:16] BR0kEN: Привет-привет. Во-первых, не "ты", а "вы". Во-вторых, никаких дел с вами иметь я не собираюсь. [19:05:42] Антон - svetti.net: ну дело твое. [19:05:49] Антон - svetti.net: Не хоч дак не хоч [19:06:08] Антон - svetti.net: Найду друго исполнителя [19:08:07] BR0kEN: "Ваше", а не "твое", еще раз повторяю. Ищите кого угодно, но оставшиеся 5 WMZ пришлите на: Z304876283258 [19:09:06] Антон - svetti.net: Я не понимаю почему ты не хочешь дальше сотрудничать если честно. По моему я сам написал [19:09:20] Антон - svetti.net: Готов вернуть 5 у.е и продолжить сотрудничество [19:10:15] BR0kEN: Опять же таки, повторюсь, - не хочу из-за банального отношения к себе. Вторая причина - нет интереса. [19:10:45] Антон - svetti.net: ну нет так нет [19:10:55] BR0kEN: Но остаток я жду [19:11:35] Антон - svetti.net: Если уберешь после возврата свой минус [19:11:37] Антон - svetti.net: То верну [19:12:29] BR0kEN: Нет, не уберу. Пол года почти прошло. А с таким подходом как у вас, поставлю еще один и запощу этот разговор. [19:12:56] Антон - svetti.net: А ну если не уберете то смысла возвращать не вижу я по моему по нормальному написал [19:13:02] Антон - svetti.net: и ничего плохого не хотел [19:13:19] BR0kEN: Есть банальная деловая этика. Прощайте. [19:13:27] Антон - svetti.net: Удачи. [19:14:28] Антон - svetti.net: Если не сложно дай ссылку на топик [19:14:29] Антон - svetti.net: свой Немного поясню. Во время нашего сотрудничества, этот человек показал себя невеждой. Обращался ко мне на "ты", в то время как я просил этого не делать и обращался к нему в противоположной, официальной, форме. Когда я раз 4-5 напомнил о его задолженности, он обозвал меня, то-ли "бомжом", то-ли еще кем-то. Не запомнил и, к сожалению, не сохранилась старая история скайпа. Но, думаю, что и этот новоиспеченный "кусок истории" подойдет для составления некой картины. По-этому, если к кому-либо обратиться этот человек, дважды подумайте перед сотрудничеством. |
|||
3.11.2012, 13:10 |
Сайт с исходниками ajax |
jquery pjax - как самый простой способ. Материал по теме: http://habrahabr.ru/post/154617/ http://habrahabr.ru/post/123972/
|
|||
3.11.2012, 13:09 |
DLE Вывод двух разных новостей |
Учтите, что каждый подключенный custom - это 1 запрос к БД. Советую почитать о block.pro |
|||
7.9.2012, 13:02 |
Кэш изображения. |
Если сервер apache то: <IfModule mod_expires.c> ExpiresActive On ExpiresByType image/gif "access plus 1 month" ExpiresByType image/png "access plus 1 month" ExpiresByType image/jpeg "access plus 1 month" ExpiresByType image/jpg "access plus 1 month" </IfModule> <ifModule mod_headers.c> <filesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|swf)$"> Header set Cache-Control "max-age=2592000, public" </filesMatch> </ifModule> Не будет работать на связках и чистом nginx. |
|||
5.9.2012, 22:13 |
Вывод новостей только на главной странице. CMS DLE |
Версия какая? Вы точно все верно делаете? Конструкция такова: [aviable=main] [not-category=все категории] [page-count=1] code [/page-count] [/not-category] [/aviable] |
|||
5.9.2012, 22:09 |
Слайды в категории. Новости как слайды на Dle 9.5. Как реализовать? Слайды в категории. Новости как слайды на DLE 9.5. Как реализовать? |
blockpro + слайдер. Реализую за пол часа. Цена: 10$.
|
|||
29.8.2012, 6:21 |
Вставить Adsence в недоступные места |
position:absolute и z-index спозиционируют блоки как нужно. |
|||
19.7.2012, 13:41 |
Флэш перекрывает выпадающее меню |
Если СУК DLE, то при вставке через <object> будет перекрываться. А если взять ссылку и запихнуть ее в теги, такие как flash, youtube, то не будет. По идее можно покопаться в parse.class.php, посмотреть как происходит обработка и сделать чтобы при вставке object он тоже был на заднем плане. И да, wmode и z-index не помогают. Давно пробовал.
|
|||
18.7.2012, 15:02 |
Валидная Html верстка любой сложности Верстка макетов на DLE и обычных HTML страниц |
Цены: * - верстка полноценного DLE шаблона - от 50$ + от 15$ за адаптивную верстку** - верстка main.tpl - от 15$ - верстка отдельных элементов шаблона - от 5$ - натяжка HTML + CSS на DataLife Engine - от 20$ * - Цены варьируются в зависимости от сложности поставленной задачи. ** - Такой тип верстки сложней, но используя его можно создать адаптирующийся под разные разрешения экрана (устройства) шаблон. Дополнительные услуги: - верстка отдельных HTML страниц - от 10$ - правка существующих страниц и шаблонов DLE - от 5$ - реализация кроссбраузерности (если таковая отсутствует) - от 15$ - установка CMS, модулей и хаков - от 2$* - решение проблем с CMS: устранение возникших неисправностей - от 2$ - добавление необходимого функционала из новых версий движка в старые - от 5$ - оптимизация системы, снижение нагрузки, удаление ненужного функционала - от 10$ * - бесплатно при заказе верстки. CMS или модули предоставляются заказчиком. Что я гарантирую в своих работах? - проходящий проверку валидатором код - кроссбраузерность - структурированные документы шаблона (как некоторые выражаются - красивый код) - помощь в настройке* * - При заказе сложного шаблона для DLE может потребоваться правка файлов движка. Ко всем своим работам я прилагаю инструкцию, но случается так, что у человека что-то не выходит. В таких ситуациях смело обращайтесь ко мне за решением проблемы. Оговорки: - передача макетов и прочих файлов только через email - комиссия при оплате за ваш счет Старые работы - http://www.weblancer.net/users/BR0kEN/portfolio/ Новые работы - http://firstvector.org/portfolio П.С. Что забыл - допишу позже. |
|||
13.7.2012, 19:42 |
Сделать возможность вставлять HTML в новость на DLE движке |
Откройте engine/inc/addnews.php и найдите строку: if( $config['allow_admin_wysiwyg'] != "yes" ) $fix_br = "<input type=\"checkbox\" name=\"allow_br\" value=\"1\" checked> {$lang['allow_br']}"; Вставьте ниже: if( $config['allow_admin_wysiwyg'] != "yes" ) $fix_bre = "<input type=\"radio\" name=\"allow_br\" value=\"0\"> {$lang['static_br_html_1']}"; if( $config['allow_admin_wysiwyg'] != "yes" ) $fix_brd = "<input type=\"radio\" name=\"allow_br\" value=\"2\" checked> {$lang['static_br_html_2']}"; Далее найдите {$fix_br} и замените на: <br/> {$fix_br} {$fix_bre} {$fix_brd} С фильтрацией: http://savepic.ru/3199617.jpg Без нее: http://savepic.org/2359027.jpg upd: Кстати, при редактировании новостей нужна данная возможность? Разберетесь как портировать? |
|||
13.7.2012, 18:41 |
Бесплатный информационный шаблон ДЛЕ |
Посмотрите этот: http://pafnuty.name/portfolio/shablony/124...lya-dle-96.html |
|||
7.7.2012, 8:50 |
Исправление формы добавления файлов на сервер |
Изменилось, активная ссылка нужного вам вида выводиться как в кратких, так и в полных новостях. Но как вы сказали - я вас не понял. Чтобы ссылка "http://example.com/engine/download.php?id=75" не выводилась в новостях - проделайте обратные действия. Вам в админке при добавлении/редактировании публикации нужна ссылка типа: "http://example.com/engine/download.php?id=75", так? Вижу два решения, причем первой до жути смешное и, на мой взгляд, правильное. Первый: 1. Загрузили файл, получили bbcode вида "[attachment=75:name.rar]". 2. Вставляете сыылку "http://example.com/engine/download.php?id=75" и это будет равносильно коду аттача. Плюсы: никаких правок кода и использование двух вариантов аттача. Минусы: отсутствуют. Второй: 1. Я сделаю правки СУК и вы получите ссылку "http://example.com/engine/download.php?id=75" сразу при вставке. Плюсы: отсутствуют. Минусы: я попрошу оплату, потеряете bbcode аттача и останется только ссылка. Изменилось, активная ссылка нужного вам вида выводиться как в кратких, так и в полных новостях. Но как вы сказали - я вас не понял. Чтобы ссылка "http://example.com/engine/download.php?id=75" не выводилась в новостях - проделайте обратные действия. Вам в админке при добавлении/редактировании публикации нужна ссылка типа: "http://example.com/engine/download.php?id=75", так? Вижу два решения, причем первой до жути смешное и, на мой взгляд, правильное. Первый: 1. Загрузили файл, получили bbcode вида "[attachment=75:name.rar]". 2. Вставляете сыылку "http://example.com/engine/download.php?id=75" и это будет равносильно коду аттача. Плюсы: никаких правок кода и использование двух вариантов аттача. Минусы: отсутствуют. Второй: 1. Я сделаю правки СУК и вы получите ссылку "http://example.com/engine/download.php?id=75" сразу при вставке. Плюсы: отсутствуют. Минусы: я попрошу оплату, потеряете bbcode аттача и останется только ссылка. Изменилось, активная ссылка нужного вам вида выводиться как в кратких, так и в полных новостях. Но как вы сказали - я вас не понял. Чтобы ссылка "http://example.com/engine/download.php?id=75" не выводилась в новостях - проделайте обратные действия. Вам в админке при добавлении/редактировании публикации нужна ссылка типа: "http://example.com/engine/download.php?id=75", так? Вижу два решения, причем первой до жути смешное и, на мой взгляд, правильное. Первый: 1. Загрузили файл, получили bbcode вида "[attachment=75:name.rar]". 2. Вставляете сыылку "http://example.com/engine/download.php?id=75" и это будет равносильно коду аттача. Плюсы: никаких правок кода и использование двух вариантов аттача. Минусы: отсутствуют. Второй: 1. Я сделаю правки СУК и вы получите ссылку "http://example.com/engine/download.php?id=75" сразу при вставке. Плюсы: отсутствуют. Минусы: я попрошу оплату, потеряете bbcode аттача и останется только ссылка. Изменилось, активная ссылка нужного вам вида выводиться как в кратких, так и в полных новостях. Но как вы сказали - я вас не понял. Чтобы ссылка "http://example.com/engine/download.php?id=75" не выводилась в новостях - проделайте обратные действия. Вам в админке при добавлении/редактировании публикации нужна ссылка типа: "http://example.com/engine/download.php?id=75", так? Вижу два решения, причем первой до жути смешное и, на мой взгляд, правильное. Первый: 1. Загрузили файл, получили bbcode вида "[attachment=75:name.rar]". 2. Вставляете сыылку "http://example.com/engine/download.php?id=75" и это будет равносильно коду аттача. Плюсы: никаких правок кода и использование двух вариантов аттача. Минусы: отсутствуют. Второй: 1. Я сделаю правки СУК и вы получите ссылку "http://example.com/engine/download.php?id=75" сразу при вставке. Плюсы: отсутствуют. Минусы: я попрошу оплату, потеряете bbcode аттача и останется только ссылка. Изменилось, активная ссылка нужного вам вида выводиться как в кратких, так и в полных новостях. Но как вы сказали - я вас не понял. Чтобы ссылка "http://example.com/engine/download.php?id=75" не выводилась в новостях - проделайте обратные действия. Вам в админке при добавлении/редактировании публикации нужна ссылка типа: "http://example.com/engine/download.php?id=75", так? Вижу два решения, причем первой до жути смешное и, на мой взгляд, правильное. Первый: 1. Загрузили файл, получили bbcode вида "[attachment=75:name.rar]". 2. Вставляете сыылку "http://example.com/engine/download.php?id=75" и это будет равносильно коду аттача. Плюсы: никаких правок кода и использование двух вариантов аттача. Минусы: отсутствуют. Второй: 1. Я сделаю правки СУК и вы получите ссылку "http://example.com/engine/download.php?id=75" сразу при вставке. Плюсы: отсутствуют. Минусы: я попрошу оплату, потеряете bbcode аттача и останется только ссылка. Изменилось, активная ссылка нужного вам вида выводиться как в кратких, так и в полных новостях. Но как вы сказали - я вас не понял. Чтобы ссылка "http://example.com/engine/download.php?id=75" не выводилась в новостях - проделайте обратные действия. Вам в админке при добавлении/редактировании публикации нужна ссылка типа: "http://example.com/engine/download.php?id=75", так? Вижу два решения, причем первой до жути смешное и, на мой взгляд, правильное. Первый: 1. Загрузили файл, получили bbcode вида "[attachment=75:name.rar]". 2. Вставляете сыылку "http://example.com/engine/download.php?id=75" и это будет равносильно коду аттача. Плюсы: никаких правок кода и использование двух вариантов аттача. Минусы: отсутствуют. Второй: 1. Я сделаю правки СУК и вы получите ссылку "http://example.com/engine/download.php?id=75" сразу при вставке. Плюсы: отсутствуют. Минусы: я попрошу оплату, потеряете bbcode аттача и останется только ссылка. |
|||
6.7.2012, 7:27 |
Исправление формы добавления файлов на сервер |
Найти код в engine/modules/functions.php: } elseif( $config['files_count'] == 'yes' ) { $replace_1[] = "<span class=\"attachment\"><a href=\"{$config['http_home_url']}engine/download.php?id={$row['id']}{$area}\" >{$row['name']}</a> [{$size}] ({$lang['att_dcount']} {$row['dcount']})</span>"; $replace_2[] = "<span class=\"attachment\"><a href=\"{$config['http_home_url']}engine/download.php?id={$row['id']}{$area}\" >\\1</a> [{$size}] ({$lang['att_dcount']} {$row['dcount']})</span>"; } else { $replace_1[] = "<span class=\"attachment\"><a href=\"{$config['http_home_url']}engine/download.php?id={$row['id']}{$area}\" >{$row['name']}</a> [{$size}]</span>"; $replace_2[] = "<span class=\"attachment\"><a href=\"{$config['http_home_url']}engine/download.php?id={$row['id']}{$area}\" >\\1</a> [{$size}]</span>"; } и заменить его на: } elseif( $config['files_count'] == 'yes' ) { $replace_1[] = "<span class=\"attachment\"><a href=\"{$config['http_home_url']}engine/download.php?id={$row['id']}{$area}\" >{$config['http_home_url']}engine/download.php?id={$row['id']}{$area}</a></span>"; $replace_2[] = "<span class=\"attachment\"><a href=\"{$config['http_home_url']}engine/download.php?id={$row['id']}{$area}\" >{$config['http_home_url']}engine/download.php?id={$row['id']}{$area}</a></span>"; } else { $replace_1[] = "<span class=\"attachment\"><a href=\"{$config['http_home_url']}engine/download.php?id={$row['id']}{$area}\" >{$config['http_home_url']}engine/download.php?id={$row['id']}{$area}</a></span>"; $replace_2[] = "<span class=\"attachment\"><a href=\"{$config['http_home_url']}engine/download.php?id={$row['id']}{$area}\" >{$config['http_home_url']}engine/download.php?id={$row['id']}{$area}</a></span>"; } Будет выводиться активная ссылка вида: "http://example.com/engine/download.php?id=75". Или вам нужна неативная для формирования кода, например такого: <a href="[attachment=1]">attach</a>? |
|||
4.7.2012, 6:35 |
Как вырезать запятую из Облако тегов (DLE) |
Чтобы убрать запятую в самом облаке, открываем engine/modules/tagscloud.php и ищем строку: $tpl->result['tags_cloud'] = implode(", ", $tags); заменяем на: $tpl->result['tags_cloud'] = implode(" ", $tags); Чтобы убрать запятую в новостях, открываем engine/modules/show.short.php и ищем строку: $tpl->set( '{tags}', implode( ", ", $tags ) ); заменяем на: $tpl->set( '{tags}', implode( " ", $tags ) ); Действие №2 также нужно повторить для show.custom.php и show.full.php из этой же папки.
|
|||
30.6.2012, 10:09 |
Добавляем новые теги [x][/x] и [not-x][/not-x] для различных переменных. DataLife Engine 9.0 |
Приветствую вас, господа. В этой статье я хочу рассказать о кастомизации профиля пользователя, а именно о добавлении собственных тегов: [foto], [not-foto], [not-signature] и переносе существующих с DLE 9.6. Использую я DataLife Engine девятой версии и, для моих целей, в этой СУК есть не только очень много ненужного функционала, но и существенная недостача необходимого. Очень часто встают задачи, которые не решить без "хирургического вмешательства". Обновляться тоже, по многочисленным причинам, нельзя. В новых версиях движка появились замечательные теги для шаблона userinfo.tpl, такие как [news-num][/news-num], [not-comm-num][/not-comm-num] и им подобные. Перенести их не составляет труда. 1. Добавляем теги [news-num], [not-news-num], [comm-num], [not-comm-num], [rss] в DLE 9.0: Развернуть/Свернуть
Открыть engine/modules/profile.php и найти:
if( $row['news_num'] ) { if( $config['allow_alt_url'] == "yes" ) { $tpl->set( '{news}', "<a href=\"" . $config['http_home_url'] . "user/" . urlencode( $row['name'] ) . "/news/" . "\">" . $lang['all_user_news'] . "</a>" ); $tpl->set( '[rss]', "<a href=\"" . $config['http_home_url'] . "user/" . urlencode( $row['name'] ) . "/rss.xml" . "\" title=\"" . $lang['rss_user'] . "\">" ); $tpl->set( '[/rss]', "</a>" ); } else { $tpl->set( '{news}', "<a href=\"" . $PHP_SELF . "?subaction=allnews&user=" . urlencode( $row['name'] ) . "\">" . $lang['all_user_news'] . "</a>" ); $tpl->set( '[rss]', "<a href=\"engine/rss.php?subaction=allnews&user=" . urlencode( $row['name'] ) . "\" title=\"" . $lang['rss_user'] . "\">" ); $tpl->set( '[/rss]', "</a>" ); } } else { $tpl->set( '{news}', $lang['all_user_news'] ); $tpl->set_block( "'\\[rss\\](.*?)\\[/rss\\]'si", "" ); } Заменить найденый код на: if( $row['news_num'] ) { if( $config['allow_alt_url'] == "yes" ) { $tpl->set( '{news}', "<a href=\"" . $config['http_home_url'] . "user/" . urlencode( $row['name'] ) . "/news/" . "\">" . $lang['all_user_news'] . "</a>" ); $tpl->set( '[rss]', "<a href=\"" . $config['http_home_url'] . "user/" . urlencode( $row['name'] ) . "/rss.xml" . "\" title=\"" . $lang['rss_user'] . "\">" ); $tpl->set( '[/rss]', "</a>" ); } else { $tpl->set( '{news}', "<a href=\"" . $PHP_SELF . "?subaction=allnews&user=" . urlencode( $row['name'] ) . "\">" . $lang['all_user_news'] . "</a>" ); $tpl->set( '[rss]', "<a href=\"engine/rss.php?subaction=allnews&user=" . urlencode( $row['name'] ) . "\" title=\"" . $lang['rss_user'] . "\">" ); $tpl->set( '[/rss]', "</a>" ); } $tpl->set( '{news-num}', $row['news_num'] ); $tpl->set( '[news-num]', "" ); $tpl->set( '[/news-num]', "" ); $tpl->set_block( "'\\[not-news-num\\](.*?)\\[/not-news-num\\]'si", "" ); } else { $tpl->set( '{news}', $lang['all_user_news'] ); $tpl->set_block( "'\\[rss\\](.*?)\\[/rss\\]'si", "" ); $tpl->set( '{news-num}', 0 ); $tpl->set_block( "'\\[news-num\\](.*?)\\[/news-num\\]'si", "" ); $tpl->set( '[not-news-num]', "" ); $tpl->set( '[/not-news-num]', "" ); } Найти: if( $row['comm_num'] ) { $tpl->set( '{comments}', "<a href=\"$PHP_SELF?do=lastcomments&userid=" . $row['user_id'] . "\">" . $lang['last_comm'] . "</a>" ); } else { $tpl->set( '{comments}', $lang['last_comm'] ); } Заменить на: if( $row['comm_num'] ) {
$tpl->set( '[comm-num]', "" ); $tpl->set( '[/comm-num]', "" ); $tpl->set( '{comm-num}', $row['comm_num'] ); $tpl->set( '{comments}', "<a href=\"$PHP_SELF?do=lastcomments&userid=" . $row['user_id'] . "\">" . $lang['last_comm'] . "</a>" ); $tpl->set_block( "'\\[not-comm-num\\](.*?)\\[/not-comm-num\\]'si", "" ); } else { $tpl->set( '{comments}', $lang['last_comm'] ); $tpl->set( '{comm-num}', 0 ); $tpl->set_block( "'\\[comm-num\\](.*?)\\[/comm-num\\]'si", "" ); $tpl->set( '[not-comm-num]', "" ); $tpl->set( '[/not-comm-num]', "" ); } Идем дальше и малость усложняем задачу. До этого мы просто скопировали функционал, а на сей раз кое-что допишем. Случилось так, что на одном из моих сайтов понадобился тег [not-signature]. Он выводит текст если отсутствует подпись. Его и добавим. 2. Добавляем теги [not-signature][/not-signature] в DLE 9.0: Развернуть/Свернуть
Открыть engine/modules/profile.php и найти:
if( $row['signature'] and $user_group[$row['user_group']]['allow_signature'] ) { $tpl->set_block( "'\\[signature\\](.*?)\\[/signature\\]'si", "\\1" ); $tpl->set( '{signature}', stripslashes( $row['signature'] ) ); } else { $tpl->set_block( "'\\[signature\\](.*?)\\[/signature\\]'si", "" ); } Заменить найденый код на: if( $row['signature'] and $user_group[$row['user_group']]['allow_signature'] ) {
$tpl->set( '[signature]', "" ); $tpl->set( '[/signature]', "" ); $tpl->set( '{signature}', stripslashes( $row['signature'] ) ); $tpl->set_block( "'\\[not-signature\\](.*?)\\[/not-signature\\]'si", "" ); } else { $tpl->set( '{signature}', "" ); $tpl->set_block( "'\\[signature\\](.*?)\\[/signature\\]'si", "" ); $tpl->set( '[not-signature]', "" ); $tpl->set( '[/not-signature]', "" ); } Гулять, так гулять. Добавим еще несколько. Принцип их работы идентичен предыдущим, но направлен на присутствие/отсутствие аватара у пользователя. 3. Добавляем теги [foto][/foto] и [not-foto][/not-foto] в DLE 9.0: Развернуть/Свернуть
Открыть engine/modules/profile.php и найти:
if( $row['foto'] and (file_exists( ROOT_DIR . "/uploads/fotos/" . $row['foto'] )) ) $tpl->set( '{foto}', $config['http_home_url'] . "uploads/fotos/" . $row['foto'] ); else $tpl->set( '{foto}', "{THEME}/images/noavatar.png" ); Заменить найденый код на: if( $row['foto'] and (file_exists( ROOT_DIR . "/uploads/fotos/" . $row['foto'] )) ) $tpl->set( '{foto}', $config['http_home_url'] . "uploads/fotos/" . $row['foto'] );
else $tpl->set( '{foto}', "{THEME}/images/noavatar.png" ); if( $row['foto'] ) { $tpl->set( '[foto]', "" ); $tpl->set( '[/foto]', "" ); $tpl->set( '{foto}', $config['http_home_url'] . "uploads/fotos/" . $row['foto'] ); $tpl->set_block( "'\\[not-foto\\](.*?)\\[/not-foto\\]'si", "" ); } else { $tpl->set_block( "'\\[foto\\](.*?)\\[/foto\\]'si", "" ); $tpl->set( '{foto}', "{THEME}/images/noavatar.png" ); $tpl->set( '[not-foto]', "" ); $tpl->set( '[/not-foto]', "" ); } Вот и все. Посмотрев на код можно понять что ничего сложного в нем нет и, по надобности, идентичные теги можно создать для любой переменной.
|
|||
28.6.2012, 20:49 |
Подбор ключевых слов к сайту - Бесплатно Ну можно за отзыв. |
Заплатил деньги за подбор описаний для категорий 15.06.2012. На сегодняшний день, 28.06.2012, я не получил ни ответа от пользователя, ни описаний, ни возвращенных средств. Обещал же keyseo сделать все за один вечер. После того как прошло столько времени я самостоятельно решил с ним связаться. Прилагаю историю переписки с ТС: Развернуть/Свернуть
BR0kEN, 28.06.2012 16:34:46:
Добрый день. Мой ник на мауле - "Сергуня" Заказывал у вас описания для категрий. Прошу вернуть деньги. BR0kEN, 16:34:48: http://www.maultalk.com/topic125462s0.html Virus, 16:35:20: Здраствуйте, наконецто ви появились. Меня там забанили. Потому не мог свами связатса. BR0kEN, 16:36:16: Дескрипшены готовы? Virus, 16:36:18: Если вам ещо надо доделать ваш заказ то немогли би нашу всю переписку мне скинуть на емейл и я доделаю. BR0kEN, 16:36:42: Сроки? Virus, 16:37:25: ну надо всю переписку. и я посмотю что к чему и скажу вам. когда будет. BR0kEN, 16:37:51: Обещали сделать в тот же день. Пишите email. Virus, 16:38:17: обещал делал потом хотел уточнить и меня забанили ппц кароче. много заков задержалить и проблеми типерь. Virus, 16:38:19: danken@list.ru BR0kEN, 16:39:16: Простите, а в составленных описания будут такие же орфограф. ошибки как и в ваших сообщениях? Virus, 16:40:39: ладно я понял, давай те свой кошельок потом верну вам етот бакс. BR0kEN, 16:41:16: Дело не в деньгах. Описания мне нужны, но качественные. Ответите на вопрос? Virus, 16:42:35: напомните мне какие там описание должни бить? BR0kEN, 16:42:47: Сейчас пришлю копию на email. Virus, 16:43:07: ок BR0kEN, 16:44:18: Отправил Virus, 16:48:04: опа, цени на ето уже поднялись. блин фигово. я помню ви мне 1$ прислали. да? BR0kEN, 16:50:58: Если я делал заказ по одной цене, то повышение их в последствии меня не интересует. Я выслал доллар и он является 80% от общей суммы. Должен я, якобы, еще 13 рублей. Virus, 16:52:53: напешите мне свйо WMZ я просто небуду делать такой заказ за такие деньги извените. Virus, 16:52:57: нету стоко времени BR0kEN, 16:54:57: Т.е. вы подтверждаете что приняли заказ по вами же установленной цене, не связались со мной на протяжении двух недель (хотя обещали сделать все за один день), а теперь просите повышенную оплату или же отказываетесь от выполнения? Virus, 16:57:21: Я извенятсь конешно, я невиноват что меня забанили на форуме. ето раз. во вторих я добавил вас в ICQ в тот же день, написал вам вы ничево неотписало до типерь. Я небуду делать за ето цену описание так как еже прошло время делать такое за копейки. Ето виходит что надо писать 2700 символов. Virus, 16:57:42: если хотите можете доплатить если нет я верну вам день. Извените. BR0kEN, 17:00:02: Во-первых, ICQ в профиле у меня не указан, добавить вы меня не могли. Во-вторых, вы сами себе противоречите - никто не мешал устанавливать нужную вам цену изначально. Кошель: Z142748166989 Virus, 17:00:13: укразан Virus, 17:02:43: я понимаю, потому верну вам деньги. BR0kEN, 17:06:12: Перевода ждать еще 2 недели? Virus, 17:06:21: вечером будет как буду дома. Virus, 17:06:32: я щас наработе и у меня нету доступа. Virus, 17:07:23: у меня кроме вас ещо много заказов. Так что ждите. Севодня будут точно. BR0kEN, 17:08:01: Как ваши заказы относятся к моим деньгам? Virus, 17:08:12: никак. Virus, 19:32:39: тут? BR0kEN, 19:32:46: Да, тут Virus, 19:33:13: отослал проверте BR0kEN, 19:34:05: Есть Деньги я, в итоге, получил. Очень неприятными стали моменты: пользователь предоставляющий услугу особо не старался выйти на связь, начал рассказывать о каком-то подорожании и смене цены которую сам назначил изначально. Абсолютно неграмотен, что видно из истории переписки. Заказывая у него платные услуги - задумайтесь нужен ли вам такой исполнитель. |
|||
13.6.2012, 16:06 |
Как сделать дублирование содержимого одного поля в другое на CMS DLE? |
У меня версия движка намного старее и код совсем не такой. Но это роли не играет. Проблема решена подставлением этой же строки после функции вывода тегов. Спасибо вам огромное.
|
|||
10.6.2012, 18:04 |
Joomla vs. Drupal. Как Джумла подвела. И кого теперь выбрать? |
Сослаться на руки проще всего. А бывает же и такое, что не устраивает какой-то момент. |
|||
5.6.2012, 5:20 |
пара вопросов по dle |
На первый вопрос: "phpmyadmin → имя БД → таблица dle_users" |
|||
27.5.2012, 0:38 |
Help: Ссылка в движке DLE |
GR1DER правильно написал. Файл navigation.tpl формируется в show.short.php. Откройте его, найдите раздел "Pages" и промониторте его до следующего, "Next Link". Ссылка там.
|
|||
21.12.2011, 16:41 |
Рекомендации по настройке сервера и системы управления контентом DataLife Engine. |
Приветствую всех, кто посвящает этим строкам свое драгоценное время. В этой статье я хочу рассказать о способах оптимально настроить сервер и систему управления контентом DataLife Engine. За 4 года работы с интернет сайтами и серверами я усвоил, что безопасность превыше удобства и что ей нужно уделять внимание. Оговорка: я не претендую на авторство чьей-либо интеллектуальной собственности! Весь материал собран на просторах интернета. Ниже будут описаны действия, которые помогут распределить нагрузку сервера, обезопасить его от DOS атак, ограничить доступ к FTP протоколу и правильно сконфигурировать систему DataLife Engine. Защита и конфигурация вашего сервера. 1. Настройка конфигурации сервера с использованием связки front-end Nginx к Apache. Преимущества подобной схемы можно понять на небольшом примере. Представьте себе, что вашему веб серверу Apache необходимо обслужить порядка 1000 запросов одновременно, причем многие из них подключены к медленным каналам связи. В случае использования Apache мы получим 1000 процессов httpd, на каждый из которых будет выделена оперативная память, и эта память не освободится до тех пор, пока клиент не получит запрошенный контент. В случае схемы с применением front-end сервера получим значительную экономию ресурсов за счет того, что после поступления запроса, nginx передает запрос Apache и быстро получает ответ. В итоге, Apache, после того как отдал ответ nginx, освобождает память. Далее с клиентом взаимодействует веб-сервер nginx, который как раз и написан для раздачи статического контента большому количеству клиентов при незначительном потреблении системных ресурсов. Для корректной работы нашей связки понадобиться модуль mod_rpaf для Apache. Возникает такая необходимость по следующей причине: запросы к Apache приходят с IP-адреса, на котором работает nginx, соответственно, в журнальных файлах Apache будет фигурировать только IP-адрес nginx сервера. Также без использования данного модуля начнутся проблемы со скриптами, в которых используется IP-адрес посетителя и перестанет правильно работать механизм ограничения доступа по IP-адресам с помощью .htaccess. Установка NGINX на популярные ОС. Red Hat Enterprise Linux 4 / CentOS 4 Для установки nginx в этих операционных системах вам необходимо подключить дополнительный репозиторий пакетов. Red Hat Enterprise Linux 5 / CentOS 5 Для установки nginx в этих операционных системах вам необходимо подключить дополнительный репозиторий пакетов EPEL. ASPLinux Server 5 / Fedora nginx присутствует в стандартной поставке дистрибутива. Если репозитории подключены или просто не требуются, выполняем: yum install nginx Установка Apache. Чтобы установить Apache веб-сервер достаточно выполнить: yum install httpd Установка mod_rpaf. 1. Устанавливаем пакет httpd-devel: yum -y install httpd-devel 2. Скачиваем и устанавливаем mod_rpaf: Входим в директорию /usr/local/src cd /usr/local/src Загружаем в /usr/local/src файл mod_rpaf-0.6.tar.gz wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz Распаковываем mod_rpaf-0.6.tar.gz tar xzf mod_rpaf-0.6.tar.gz Переходим в каталог в который распаковали cd mod_rpaf-0.6 Ставим модуль в систему apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c 3. Далее нужно создать файл конфигурации mod_rpaf - /etc/httpd/conf.d/rpaf.conf и добавить в него следующие строки: LoadModule rpaf_module modules/mod_rpaf-2.0.so RPAFenable On RPAFproxy_ips 127.0.0.1 xx.xx.xx.xx yy.yy.yy.yy где xx.xx.xx.xx и yy.yy.yy.yy - IP адреса вашего сервера. Если на сервере более двух IP, добавьте их по той же аналогии. Далее требуется перезапустить Apache, для этого выполните команду service httpd restart 4. В nginx внутри блока http {} должны быть указаны строки: proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; Если данные строки указаны, дописывать не нужно. Если модифицируется nginx.conf, следует перезапустить nginx: /etc/init.d/nginx stop /etc/init.d/nginx start 5. Как проверить, работает ли установленный модуль? На любом из доменов, которые расположены на Вашем сервере, разместите файл test.php с содержимым: "<? echo $_SERVER['REMOTE_ADDR']; ?>" Далее зайдите по ссылке http://domain.com/test.php, где domain.tcom - имя вашего домена. Если отображается IP, отличающийся от IP вашего сервера, модуль работает корректно. Настройка NGINX. Ниже приведен конфигурационный файл nginx для работы в качестве front-end сервера. Подразумевается, что nginx будет работать на всех интерфейсах на 80 порту, а Apache будет работать на интерфейсе 127.0.0.1 и порту 8080. Сохраните данный конфигурационный файл в каталоге /etc/nginx/ с именем nginx.conf. user nginx; worker_processes 10; error_log /var/log/nginx/error.log debug; pid /var/run/nginx.pid; events { worker_connections 20000; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] $status ' '"$request" $body_bytes_sent "$http_referer" ' '"$http_user_agent" "http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 30; send_timeout 900; server_tokens off; server { listen 80; server_name _; server_name_in_redirect off; access_log /var/log/nginx/host.access.log main; location / { proxy_pass http://127.0.0.1:8080/; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 10m; } } } Настройка Apache. В файле конфигурации Apache /etc/httpd/conf/httpd.conf найдите строку: Listen:80 и замените ее строкой: Listen 127.0.0.1:8080 Настройка mod_rpaf. Добавьте модуль mod_rpaf в файл конфигурации Apache. Для этого в файл /etc/httpd/conf/httpd.conf добавьте следующую строку: LoadModule rpaf_module modules/mod_rpaf-2.0.so Затем в этот же файл добавьте строки: RPAFenable On RPAFsethostname Off RPAFproxy_ips 127.0.0.1 192.168.0.1 RPAFheader X-Real-IP Вместо 192.168.0.1 необходимо поставить IP-адрес сервера. 2. Конфигурация сервера для защиты от dos-атак. Включаем в nginx кеширование главной страницы для тех у кого нет cookie. Добавляем ограничения в nginx.conf: limit_req_zone $binary_remote_addr zone=two:20m rate=2r/s; server{ location / { limit_req zone=two burst=5; } } } Пользуемся tail и awk: tail -f /var/log/nginx/access.log | grep GET / HTTP/1.1" 503 Подключаем лог: tail -f /var/log/nginx/access.log | grep GET / HTTP/1.1" 503 | awk '{ print $1 }' Получаем IP машин: iptables -A INPUT -p tcp -j DROP -s $IP Заносим IP в Firewall: tail -f /var/log/nginx/access.log | grep GET / HTTP/1.1" 503 | awk '{ print $1 }' | xargs -t -l iptables -A INPUT -p tcp -j DROP –s Теперь установим connlimit для iptables чтобы ограничить подключения ботов. В правилах ставим разрешение на 5 подключений с одного IP, и 25 из подсети класса С. DDOS атака с 16000 ботов - Load average : 1.4 1.9 2.0 Ограничение доступа по FTP Для этого нам понадобитсья файл .ftpaccess. Он поможет запретить или разрешить доступ по FTP с указанных IP адресов. Кто-то может задать вопрос: «У меня динамический IP, как мне правильно использовать .ftpaccess?» Ответ я подразумеваю только такой: «Если вам нужна данная надстройка безопасности - приобретите у вашего провайдера статический IP. Много денег у вас за него не попросят.» Чтобы создать .ftpacces файл нам понадобиться SSH доступ. Можно воспользоваться программой winscp. Настроек в .ftpaccess может быть большое множество, однако нас интересует только один параметр. Прописав эти строки в файле вы закроете полностью доступ от всех: <Limit ALL> Deny from all </Limit> После написанного выше, никто не сможет зайти на ФТП. Для добавления разрешения доступа определенному IP нужно указать следующие параметры: <Limit ALL> Allow from 127.0.0.1 Deny from all </Limit> Естественно адрес 127.0.0.1 указан для примера и его нужно заменить на собственный. Важно! Лучше всего запретить доступ по FTP абсолютно всем и подклчаться только по SSH. Защита системы управления контентом DataLife Engine. 1. Установите и настройте ZEOS Antivirus. 2. Переименуйте файл админпанели и сделайте фейк по старому адресу (www.sait.com/admin.php) при переходе на который пользователь будет заблокирован посредством запрета его ip в .htaccess. Переименовали? Теперь создаем в корневом каталоге файл ip.txt для хранения ip-адресов. Даем ему и .htaccess права CHMOD – 777. Создаем файл admin.php следующего содержания: <?php $ip = getenv ("REMOTE_ADDR"); $log = fopen("ip.txt", "a+"); fwrite($log, "// ".$ip."\n"); fclose($log); $f = fopen($_SERVER['DOCUMENT_ROOT'] . '/.htaccess', "a"); fwrite($f, "\ndeny from " . $ip); fclose($f); echo <<<HTML <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru"> <head> <meta http-equiv="content-type" content="text/html; charset=1251" /> <meta name="author" content="admin" /> <title>Админ панель DataLife Engine</title> </head> <body bgcolor="black" text="white"> <center><img src="тут изображение выводимое на странице"></center> <center><h1>Текст, например: Твой ip в логах, я найду тебя!</h1></center> </body> </html> HTML; echo "<center><h1>Бойся, ничтожество, ха-ха!</center></h1>" ?> 3. Добавим дополнительную аутентификацию в админцентре. Необходимо придумать еще один логин и пароль (не используйте данные вашего административного аккаунта). Второй логин и пароль должен в корне отличаться от первого. Определились? Отлично! Теперь зашифруем наш пароль в md5 (сделать это можно на сайте md5encryption.com). Далее открываем admin.php (вспомните, ранее мы его переименовали и, по этому, если вы назвали его superadmin.php - вам необходимо открывать именно этот его) и после строки: <?php добавляем: $login="вписываем придуманный логин"; $password="и сгенерированный пароль в md5"; if (!isset($_SERVER['PHP_AUTH_USER']) || $_SERVER['PHP_AUTH_USER']!==$login || md5($_SERVER['PHP_AUTH_PW'])!==$password) { header('WWW-Authenticate: Basic realm="Admin Panel"'); header('HTTP/1.0 401 Unauthorized'); exit("Access Denied");} 4. Отключим неиспользуемые системой функции php. Для поиска файла php.ini создаем файл phpinfo.php с текстом: <? phpinfo() ?> После поиска обязательно удалить phpinfo.php! Далее открываем php.ini и выключаем следующие функции: disable_functions = allow_url_fopen, eval, exec, system, passthru, scandir, popen, shell_exec, proc_open, proc_close, proc_nice, get_current_user, getmyuid, posix_getpwuid, apache_get_modules, virtual, posix_getgrgid, getmyinode, fileowner, filegroup, getmypid, apache_get_version, apache_getenv, apache_note, apache_setenv, disk_free_space, diskfreespace, dl, ini_restore, openlog, syslog, highlight_file, show_source, symlink, disk_total_space, ini_get_all, get_current_user, posix_uname, allow_url_fopen 5. Создаем фильтрацию GET и POST запросов, предотвращаем инъекции в БД и получение из нее данных. Создаем файл .php с произвольным названием и следующим содержимым: <?php //поставить еденицу если хотите включить отладку запросов $debug = 0; $bag_req = array("select", "eval", "echo", "UPDATE", "LIMIT", "INSERT", "INTO", "union", "CONCAT", "INFORMATION_SCHEMA", "OUTFILE", "DUMPFILE", "LOAD_FILE", "BENCHMARK", "SUBSTRING", "ASCII", "CHAR", "database", "HEX", "\\.\\/", "%00", "\\.htaccess", "config\\.php", "document\\.cookie"); $request = serialize($_GET); $urequest = urldecode($request); $brequest = base64_decode($request); if($_GET) { foreach ($bag_req as $key => $value) { if(preg_match("/$value/i", $request) || preg_match("/$value/i", $urequest) || preg_match("/$value/i", $brequest)) { if($debug == "1") $do_debug = "<br>В массиве найден запрос <b>$value</b> , который блокирует правильную работу<br>$request"; die("BAD REQUEST $do_debug"); } } } if($_POST) { $request = str_replace("selected_language", "sl", serialize($_POST)); $urequest = urldecode($request); $brequest = base64_decode($request); foreach ($bag_req as $key => $value) { if(preg_match("/$value/i", $request) || preg_match("/$value/i", $urequest) || preg_match("/$value/i", $brequest)) { if($debug == "1") $do_debug = "<br>В массиве найден запрос <b>$value</b> , который блокирует правильную работу<br>$request"; die("BAD REQUEST $do_debug"); } } } ?> Сохраняем его на сервере в любом каталоге системы DLE. Открываем файл engine/classes/mysql.php и после: <?php if(!defined('DATALIFEENGINE')) { die("Hacking attempt!"); } подключаем созданный файл: include_once( ENGINE_DIR."/путь_к_файлу/название.php" ); 6. Используя бесплатные компоненты к DLE обязательно узнайте мнение специалиста о их надежности. При возникновении вопросов обращайтесь к поисковым системам - весь материал в свободном доступе! Есть что добавить? Милости прошу к обсуждению! Удачи вам и вашим проектам!
|
|||
12.12.2011, 5:37 |
Починить DLE Взломали... |
Рекомендую вам снести все и установить на чистую. После чего установить ZEOS Antivirus и проделать действия описанные ниже. А также советую купить лицензию на двиг и своевременно получать заплатки. Ибо не все они в паблике, по себе знаю. Защита от показов во фрейме: В index.php ищем: var dle_root = '{$config['http_home_url']}'; заменяем на: if(top!=self) top.location.href='/'; var dle_root = '{$config['http_home_url']}'; Все, установка закончена. Теперь при попытке показа во фрейме будет автоматически редиректить на главную страницу, сайт будет "выпрыгивать" из фрейма. Банально защитите админку данным методом (автор: DotNet): 1. Создайте в корне файл ip.txt и поставьте права 777. Там будут храниться ip попытавшихся обратиться к странице http://site.ru/admin.php. 2. Переименуйте в настройках скрипта свой файл admin.php, например, на vasya.php. 3. Создайте новый файл admin.php с таким содержимым: <?php $ip = getenv ("REMOTE_ADDR"); $log = fopen("ip.txt", "a+"); fwrite($log, "// ".$ip."\n"); fclose($log); $f = fopen($_SERVER['DOCUMENT_ROOT'] . '/.htaccess', "a"); fwrite($f, "\ndeny from " . $ip); fclose($f); echo <<<HTML <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru"> <head> <meta http-equiv="content-type" content="text/html; charset=1251" /> <meta name="author" content="admin" /> <title>Админ панель DataLife Engine</title> </head> <body bgcolor="black" text="white"> <center><img src="картинка"></center> <center><h1>Прости, но ты от него не отличаешься...</h1></center> <!-- Пошел как ты отсюда, нефиг исх. код смотреть :) --> </body> </html> HTML; echo "<center><h1>Кстати, твой ип($ip) в логах;)</center></h1>" ?> Теперь при заходе на сайт/admin.php вы увидите ошибку и ip будет занесен в ip.txt и забанен посредством htaccess. И еще забыл сказать! Отключите в php.ini функцию allow_url_fopen. Чтобы ее выключить, откройте сам php.ini (обычно валяется в корневой директории), найдите функцию allow_url_fopen и напротив поставьте "OFF". То бишь получиться строка: "allow_url_fopen OFF" |
|||
8.12.2011, 0:40 |
DoS или нет? |
Из забугорных есть отличный Адивохост. Сервера в Голландии и США. На голландских можно без опасения размещать то, что у нас прикрывается цензурой. И саппорт там отличный, и манибэк моментальный. |
|||
8.12.2011, 0:23 |
Оцените и посоветуйте мозги застыли, нужны ваши советы ;) |
Мне нравится, хотя при входе, я бы советовал убрать болтики (макет будет смотреться серьезнее). Рекомендую, пока не наплыло в тему много людей, на макет прикрепить надпись на всю ширину, иначе он может очень быстро превратиться в паблик :-) Название то МехАдмин, по-этому болтики ничем не выделяются и не кажутся лишними. Также по ним не меряется "серьезность". По сабжу: хороший дизайн, но чего-то нехватает, какой-то краски. |
|||
Текстовая версия | Сейчас: 26.4.2024, 3:32 |