2008-07-29
2008-07-05
В путь ...дорогу...в далекие домены
Сегодня открыт тестовый сайт для SEO-оптимизации
Этот блог будет продолжать работать. Ждите новых статей.
http://account-trade.net
Заходите еще и оставляйте комментарии) Полезно почитать критику своего творчества и узнать мнение других.
2008-06-27
Движок е107. Структура скрипта администрирования RSS-потоков
Сегодня я решил что лучше не описывать весь движок полностью(если в нем куча файлов как например в DataLifeEngine или е107). Поэтому теперь буду расписывать конкретные функции и плагины скрипта.
Начем с движка е107, а точнее, RSS-потоки и их возможности.
Распишем для начала структуру плагина:
12 768 admin_prefs.php
1 367 e_meta.php
images
languages
4 040 plugin.php
23 435 rss.php
2 506 rss_menu.php
6 479 rss_shortcodes.php
455 rss_sql.php
5694 rss_template.php
e107rus\e107_plugins\rss_menu\images
e107rus\e107_plugins\rss_menu\languages
3723 English.php
3944 Russian.php
Теперь расмотрим каждый нужный нам файл:
admin_prefs.php
Рекомендации:
Array_flip метод не рекомендуется для удаления пункта обнаружения.
Использовать форму “handler” не рекомендуется, она присутствует только для обратной совместимости.
Редактировать и удалять языковый файл не рекомендуется, используйте вместо LAN_EDIT т.д..
Используя слова, как created, update, options т.д.. Следует использовать не стандартные переменные..
Общие админ значки используются. ADMIN_ICON_EDIT т.д.
Использовать $caption = "whatever" — нет необходимости .
Код файла:
require_once("../../class2.php");
if(!getperms("P")){ header("location:".e_BASE."index.php"); }
$lan_file = e_PLUGIN."rss_menu/languages/".e_LANGUAGE.".php";
require_once(file_exists($lan_file) ? $lan_file : e_PLUGIN."rss_menu/languages/English.php");
require_once(e_ADMIN."auth.php");
$imagedir = e_IMAGE."admin_images/";
$lan_file = e_PLUGIN.'rss_menu/languages/'.e_LANGUAGE.'.php';
include_once(file_exists($lan_file) ? $lan_file : e_PLUGIN.'rss_menu/languages/English.php');
require_once(e_PLUGIN.'rss_menu/rss_shortcodes.php');
$rss = new rss;
global $tp;
//удалить запись
if(isset($_POST['delete'])){
$d_idt = array_keys($_POST['delete']);
$message = ($sql -> db_Delete("rss", "rss_id='".$d_idt[0]."'")) ? LAN_DELETED : LAN_DELETED_FAILED;
$e107cache->clear("rss");
}
//создать RSS канал
if(isset($_POST['create_rss'])){
$message = $rss -> dbrss("create");
}
//обновить RSS канал
if(isset($_POST['update_rss'])){
$message = $rss -> dbrss("update");
}
//импортировать RSS канал
if(isset($_POST['import_rss'])){
$message = $rss -> dbrssimport();
}
//обновить предел
if(isset($_POST['update_limit'])){
$message = $rss -> dbrsslimit();
}
//настройки обновления
if(isset($_POST['updatesettings'])){
$message = $rss->dboptions();
}
//config check
if($rss->file_check()){
$message = RSS_LAN_ERROR_2; // space found in file.
}
//показать сообщение
if(isset($message)){
$rss->show_message('', $message);
}
//выгрузить шаблон
if (is_readable(THEME."rss_template.php")) {
require_once(THEME."rss_template.php");
} else {
require_once(e_PLUGIN."rss_menu/rss_template.php");
}
//листинг
if(e_QUERY){
$qs = explode(".", e_QUERY);
$field = (isset($qs[1])) ? $qs[1] : "";
$sort = (isset($qs[2])) ? $qs[2] : "";
}
//создать
if(isset($qs[0]) && $qs[0] == 'create' && !$_POST){
$rss -> rssadmincreate();
//импортировать
}elseif(isset($qs[0]) && $qs[0] == 'import'){
$rss -> rssadminimport();
//настройки
}elseif(isset($qs[0]) && $qs[0] == 'options'){
$rss -> rssadminoptions();
//список
}else{
$rss -> rssadminlist();
}
require_once(e_ADMIN."footer.php");
Настройки отображения
function admin_prefs_adminmenu(){
global $sql, $qs;
$act = $qs[0];
if($act==""){$act="list";}
$var['list']['text'] = RSS_LAN_ADMINMENU_2;
$var['list']['link'] = e_SELF."?list";
$var['create']['text'] = LAN_CREATE;
$var['create']['link'] = e_SELF."?create";
$var['import']['text'] = RSS_LAN_ADMINMENU_4;
$var['import']['link'] = e_SELF."?import";
$var['options']['text'] = LAN_OPTIONS;
$var['options']['link'] = e_SELF."?options";
show_admin_menu(RSS_LAN_ADMINMENU_1, $act, $var);
}
Конец настроек отображения
class rss{
//проверка конфигурации
function file_check(){
$arrays = file_get_contents(e_BASE."e107_config.php");
$arrays2 = file_get_contents(e_PLUGIN."rss_menu/languages/".e_LANGUAGE.".php");
if($arrays[0] != "<" || $arrays2[0] != "<"){
return TRUE;
}
}
//Администратор: список: существующие rss-ленты
function rssadminlist(){
global $qs, $ns, $sql, $rs, $tp, $field, $sort, $rss_shortcodes, $row, $RSS_ADMIN_LIST_HEADER, $RSS_ADMIN_LIST_TABLE, $RSS_ADMIN_LIST_FOOTER;
$fieldstag = array('id'=>'rss_id','path'=>'rss_path','name'=>'rss_name','url'=>'rss_url','limit'=>'rss_limit');
$order = (isset($fieldstag[$field])) ? "ORDER BY ".$fieldstag[$field]." ".$sort : "ORDER BY rss_id";
$query = "SELECT * FROM #rss ".$order;
if(!$sql->db_Select_gen($query))
{
$this->show_message(LAN_ERROR, RSS_LAN_ERROR_3);
}
else
{
$text = $tp -> parseTemplate($RSS_ADMIN_LIST_HEADER, FALSE, $rss_shortcodes);
while($row=$sql->db_Fetch())
{
$text .= $tp -> parseTemplate($RSS_ADMIN_LIST_TABLE, FALSE, $rss_shortcodes);
}
$text .= $tp -> parseTemplate($RSS_ADMIN_LIST_FOOTER, FALSE, $rss_shortcodes);
$ns->tablerender(RSS_LAN_ADMIN_1, $text);
}
}
//создать
function rssadmincreate(){
global $ns, $qs, $rs, $sql, $tp, $rss_shortcodes, $row, $RSS_ADMIN_CREATE_TABLE;
if( isset($qs[1]) && $qs[1] == "edit" && isset($qs[2]) && is_numeric($qs[2]) ){
if(!$sql -> db_Select("rss", "*", "rss_id='".intval($qs[2])."' ")){
$this->show_message(LAN_ERROR, RSS_LAN_ERROR_5);
}else{
$row = $sql -> db_Fetch();
$row['rss_name'] = $tp -> toForm($row['rss_name']);
$row['rss_path'] = $tp -> toForm($row['rss_path']);
$row['rss_url'] = $tp -> toForm($row['rss_url']);
$row['rss_text'] = $tp -> toForm($row['rss_text']);
}
}
$text = $tp -> parseTemplate($RSS_ADMIN_CREATE_TABLE, FALSE, $rss_shortcodes);
$ns->tablerender(RSS_LAN_ADMIN_10, $text);
}
//импортировать
function rssadminimport(){
global $sql, $ns, $i, $qs, $rs, $tp, $rss_shortcodes, $feed, $pref;
global $RSS_ADMIN_IMPORT_HEADER, $RSS_ADMIN_IMPORT_TABLE, $RSS_ADMIN_IMPORT_FOOTER;
$sqli = new db;
$feedlist = array();
//новости
$feed['name'] = ADLAN_0;
$feed['url'] = 'news'; //the identifier for the rss feed url
$feed['topic_id'] = ''; //the topic_id, empty on default (to select a certain category)
$feed['path'] = 'news'; //this is the plugin path location
$feed['text'] = RSS_PLUGIN_LAN_7;
$feed['class'] = '0';
$feed['limit'] = '9';
$feedlist[] = $feed;
//новостные категории
if($sqli -> db_Select("news_category", "*","category_id!='' ORDER BY category_name ")){
while($rowi = $sqli -> db_Fetch()){
$feed['name'] = ADLAN_0.' > '.$rowi['category_name'];
$feed['url'] = 'news';
$feed['topic_id'] = $rowi['category_id'];
$feed['path'] = 'news';
$feed['text'] = RSS_PLUGIN_LAN_10.' '.$rowi['category_name'];
$feed['class'] = '0';
$feed['limit'] = '9';
$feedlist[] = $feed;
}
}
//download
$feed['name'] = ADLAN_24;
$feed['url'] = 'download';
$feed['topic_id'] = '';
$feed['path'] = 'download';
$feed['text'] = RSS_PLUGIN_LAN_8;
$feed['class'] = '0';
$feed['limit'] = '9';
$feedlist[] = $feed;
//категории загрузок
if($sqli -> db_Select("download_category", "*","download_category_id!='' ORDER BY download_category_order ")){
while($rowi = $sqli -> db_Fetch()){
$feed['name'] = ADLAN_24.' > '.$rowi['download_category_name'];
$feed['url'] = 'download';
$feed['topic_id'] = $rowi['download_category_id'];
$feed['path'] = 'download';
$feed['text'] = RSS_PLUGIN_LAN_11.' '.$rowi['download_category_name'];
$feed['class'] = '0';
$feed['limit'] = '9';
$feedlist[] = $feed;
}
}
//comments
$feed['name'] = RSS_PLUGIN_LAN_14;
$feed['url'] = 'comments';
$feed['topic_id'] = '';
$feed['path'] = 'comments';
$feed['text'] = RSS_PLUGIN_LAN_9;
$feed['class'] = '0';
$feed['limit'] = '9';
$feedlist[] = $feed;
//Плагин канал, используя e_rss.php плагина в папку
$plugin_feedlist = array();
foreach($pref['e_rss_list'] as $val)
{
if (is_readable(e_PLUGIN.$val."/e_rss.php")) {
require_once(e_PLUGIN.$val."/e_rss.php");
$plugin_feedlist = $eplug_rss_feed;
}
}
/* if($sqli -> db_Select("plugin","plugin_path","plugin_installflag = '1' ORDER BY plugin_path ")){
while($rowi = $sqli -> db_Fetch()){
if (is_readable(e_PLUGIN.$rowi['plugin_path']."/e_rss.php")) {
require_once(e_PLUGIN.$rowi['plugin_path']."/e_rss.php");
$plugin_feedlist = $eplug_rss_feed;
}
}
}*/
$feedlist = array_merge($feedlist, $plugin_feedlist);
$render=FALSE;
$i=0;
$text = $RSS_ADMIN_IMPORT_HEADER;
foreach($feedlist as $k=>$feed){
$feed['topic_id'] = $tp -> toDB($feed['topic_id']);
$feed['url'] = $tp -> toDB($feed['url']);
//проверка, если канал еще не готов
if(!$sql -> db_Select("rss", "*", "rss_path='".$feed['path']."' AND rss_url='".$feed['url']."' AND rss_topicid='".$feed['topic_id']."' "))
{
$render=TRUE;
$text .= $tp -> parseTemplate($RSS_ADMIN_IMPORT_TABLE, FALSE, $rss_shortcodes);
$i++;
}
}
$text .= $tp -> parseTemplate($RSS_ADMIN_IMPORT_FOOTER, FALSE, $rss_shortcodes);
if(!$render){
$this->show_message(RSS_LAN_ADMIN_11, RSS_LAN_ERROR_6);
}else{
$ns->tablerender(RSS_LAN_ADMIN_11, $text);
}
}
//настройки
function rssadminoptions(){
global $ns, $qs, $rs, $sql, $tp, $rss_shortcodes, $row, $RSS_ADMIN_OPTIONS_TABLE;
$text = $tp -> parseTemplate($RSS_ADMIN_OPTIONS_TABLE, FALSE, $rss_shortcodes);
$ns->tablerender(LAN_OPTIONS, $text);
return;
}
//показать сообщение
function show_message($caption='', $text=''){
global $ns;
$ns -> tablerender($caption, "
}
//Создать, обновить базу данных
function dbrss($mode='create'){
global $qs, $sql, $ns, $rs, $tp, $e107cache;
if($_POST['rss_name'] && $_POST['rss_url'] && $_POST['rss_path']){
$_POST['rss_name'] = $tp -> toDB(trim($_POST['rss_name']));
$_POST['rss_url'] = $tp -> toDB($_POST['rss_url']);
$_POST['rss_topicid'] = $tp -> toDB($_POST['rss_topicid']);
$_POST['rss_path'] = $tp -> toDB($_POST['rss_path']);
$_POST['rss_text'] = $tp -> toDB($_POST['rss_text']);
$_POST['rss_class'] = (intval($_POST['rss_class']) ? intval($_POST['rss_class']) : '0');
$_POST['rss_limit'] = intval($_POST['rss_limit']);
if(isset($_POST['rss_datestamp']) && $_POST['rss_datestamp']!=''){
$datestamp = intval($_POST['rss_datestamp']);
}else{
$datestamp = time();
}
if($mode == 'create'){
$message = ($sql -> db_Insert("rss", "'0', '".$_POST['rss_name']."', '".$_POST['rss_url']."', '".$_POST['rss_topicid']."', '".$_POST['rss_path']."', '".$_POST['rss_text']."', '".$datestamp."', '".$_POST['rss_class']."', '".$_POST['rss_limit']."' ")) ? LAN_CREATED : LAN_CREATED_FAILED;
$e107cache->clear("rss");
}elseif($mode == 'update'){
$message = ($sql -> db_Update("rss", "rss_name = '".$_POST['rss_name']."', rss_url = '".$_POST['rss_url']."', rss_topicid = '".$_POST['rss_topicid']."', rss_path = '".$_POST['rss_path']."', rss_text = '".$_POST['rss_text']."', rss_datestamp = '".$datestamp."', rss_class = '".$_POST['rss_class']."', rss_limit = '".$_POST['rss_limit']."' WHERE rss_id = '".intval($_POST['rss_id'])."' ")) ? LAN_UPDATED : LAN_UPDATED_FAILED;
$e107cache->clear("rss");
}
}else{
$message = RSS_LAN_ERROR_7;
}
return $message;
}
//ипортировать rss-потоки
function dbrssimport(){
global $sql, $tp;
foreach($_POST['importid'] as $key=>$value)
{
$rss_topcid = ($_POST['topic_id'][$key] ? $tp -> toDB($_POST['topic_id'][$key]) : '');
$rss_url = ($_POST['url'][$key] ? $tp -> toDB($_POST['url'][$key]) : '');
$rss_path = ($_POST['path'][$key] ? $tp -> toDB($_POST['path'][$key]) : '');
$rss_name = ($_POST['name'][$key] ? $tp -> toDB($_POST['name'][$key]) : '');
$rss_text = ($_POST['text'][$key] ? $tp -> toDB($_POST['text'][$key]) : '');
$rss_datestamp = time();
$rss_class = ($_POST['class'][$key] ? intval($_POST['class'][$key]) : '0');
$rss_limit = ($_POST['limit'][$key] ? intval($_POST['limit'][$key]) : '0');
$sql -> db_Insert("rss", "'0', '".$rss_name."', '".$rss_url."', '".$rss_topcid."', '".$rss_path."', '".$rss_text."', '".$rss_datestamp."', '".$rss_class."', '".$rss_limit."' ");
}
$message = count($_POST['importid'])." ".RSS_LAN_ADMIN_18;
return $message;
}
function dbrsslimit(){
global $sql, $tp;
foreach($_POST['limit'] as $key=>$value)
{
$sql -> db_Update("rss", "rss_limit = '".intval($value)."' WHERE rss_id = '".intval($key)."' ");
}
header("location:".e_SELF."?r3");
}
//обновить настройки
function dboptions(){
global $tp, $pref;
$pref['rss_othernews'] = $_POST['rss_othernews'];
save_prefs();
return LAN_SAVED;
}
} //end class
?>
Здесь мы рассмотрели ваозможности скрипта в администрировании RSS-потоков движка е107.
Спасибо за прочтение =) Заходите еще на мой блог:
PHPMYSQLCODER.blogpost.com
2008-06-26
.htaccess - что и как?
.htaccess - это файл конфигурации веб-сервера(Apache). Он не обязателен но тем не менее используеться очень часто. Практически .htaccess это аналог файла httpd.conf но в отличии от него .htaccess влияет только на папку в которой находиться.
Сейчас я роспишу главные вопросы(и ответы на них) которые можно решить с помощью даного файла:
1) Как сделать перенаправление на другую страницу?
5) Как закрыть каталог паролем?Redirect / http://www.phpmysqlcoder.blogspot.com
2) Как запретить отображение содержимого каталога если нет индексного файла?3) Страницы ошибокOptions -Indexes4) Как запретить доступ к файлам?ErrorDocument 401 /401error.html
ErrorDocument 403 /403error.html
ErrorDocument 404 /404error.html
ErrorDocument 500 /500error.htmldeny from all
AuthName "Auth message"
AuthType Basic
require[имяпользователя2] ... [имяпользователяN]>
AuthUserFile "/полный путь к файлу/.имя файла"
PHPMYSQLCODER.blogpost.com
2008-06-25
Структура CMS-движка DataLifeEngine. Мои описания и комментарии
\upload\backup
45 index.html
ajax
57 .htaccess
5 885 download.class.php - клас загрузки
\upload\engine\classes\flashplayer
35 118 mp3.swf 42 696 player.swf
\upload\engine\classes\highslide
graphics
\upload\engine\classes\highslide\graphics
\upload\engine\data
57 .htaccess
\upload\engine\data\emoticons
\upload\engine\editor
3 873 comments.php - комментарии
\upload\engine\editor\scripts
\upload\engine\editor\scripts\border
\upload\engine\editor\scripts\icons
\upload\engine\editor\scripts\icons\english
\upload\engine\editor\scripts\language
english
594 bookmark.js - закладка
\upload\engine\editor\scripts\moz
\upload\engine\editor\scripts\quick
ie
\upload\engine\editor\scripts\quick\ie
3 031 main.js - главная
\upload\engine\editor\scripts\style
\upload\engine\editor\scripts\style\silver
\upload\engine\editor\scripts\table
\upload\engine\inc
30 693 addnews.php - добавить новость
12 857 addcomments.php - добавить комментарий
\upload\engine\modules\fonts
\upload\engine\skins
\upload\engine\skins\bbcodes
7 688 color.html - цвет images
\upload\engine\skins\bbcodes\images
\upload\engine\skins\images
\upload\language
English Russian
77 207 adminpanel.lng - англ язык админпанели
\upload\language\Russian
92 270 adminpanel.lng - рус язык админпанели
1 397 banned.tpl - список забаненых
\upload\templates\Default
\upload\templates\Default\bbcodes
\upload\templates\Default\css
36 .htaccess
\upload\templates\Default\dleimages
\upload\templates\Default\images
\upload\templates\Simple
Шаблонные файлы - отсюда \upload\engine\modules
31 .htaccess
\upload\templates\Simple\css
Стили движка
36 .htaccess
PHPMYSQLCODER.blogpost.com
Ищу друзей блоггеров ;)
ЗЫ: Желающие отписуйтесь в комментариях
PHPMYSQLCODER.blogpost.com
Мой обзор и комментарии Vkontakte messenger by DX 1.1
В последнее время очень сильно начали развиваться социальные сети, а особенно в последнее время известный сайт(кстати первый по посещаемости в "русском интернете") vkontakte.ru.
Так вот сегодня я хотел бы описать возможности использования использования этой социальной сети как способ рекламы.
- Рассылать сообщения на стены ВКонтакте по диапазону id
- Рассылать сообщения на стены друзей каждого заданного аккаунта
- Флуд на стену конкретного человека
- Рассылать сообщения на собственные стены каждого заданного аккаунта
- Позволяет указать задержку отправки
- Позволяет рандомизировать сообщение
- Позволяет задать список прокси-серверов
- Добавлять предложение каждому заданному аккаунту
- Добавлять вопрос каждому заданному аккаунту
- Добавлять заметку каждому заданному аккаунту
- Имеется чекер аккаунтов
Советы по использованию скрипта:
-Ставьте побольше задержку отправления(пордяка 2000-3000 мс)
-Используйте побольше аккаунтов
-Обязательно рандомизируйте сообщение(лучше не цифрами а текстом)
-Рейтинг всех аккаунтов должен быть больше чем 30%(иначе аккаунт не имеет права писать на стены)
-Сообщение может пройти только на открытую стену ;)
И естественно где можно использовать данный скрипт:
1) На моем хостинге http://antichat.sich.in.ua/vkmes.php
2) Можете скачать скрипт и поставить на своем(почти все бесплатные хостинги контакт уже забанил такчто лучше юзайте платный)
Скачать
Спасибо за прочтение =) Заходите еще на мой блог:
PHPMYSQLCODER.blogpost.com
2008-06-23
Розложеный по полочкам движок CMSImple
К достоинствам Cmsimple можно отнести:
* Простоту установки, настройки, создания сайта и шаблонов на базе Cmsimple
* Наличие визуального редактор позволяет создавать сайты полным чайникам
* Весь текст сайта хранится в одном html файле, который можно создать в любом удобном редакторе
* Система бесплатна при сохранении ссылки на сайт разработчика
* Дешевый хостинг (нужен только PHP, СУБД не требуется)
* Малый вес: до 100Kb
* Трехуровневая структура создаваемого сайта
* Наличие гостевой, почтовой формы, поиска, проверки на "битые" ссылки, печатный просмотр страниц
* Простое cоздание мультиязычных сайтов
* PHP-скриптинг
* Простая и удобная админка
* Автоматическая «карта сайта»
* Автоматический backup
* Множество готовых шаблонов и плагинов Наличие русской версии, русского сайта поддержки Техническую поддержку Cmsimple, регулярные обновления, форум
Минусы тоже есть
* Возможность сделать только одно динамическое меню
* Хранение контента в текстовом файле, а не в СУБД: при большом объеме текста на сайте (свыше 2Mb текста или 1000 страниц) и приличного потока посетителей (свыше 10 000 посетителей в день), система способна неплохо нагрузить сервер
* Одинаковые мета-тэги страниц - минус для SEO (легко лечится скриптингом)
1) Папки и файлы на которые поделен скрипт:
1.1) 2lang - информация о скрипте
1.2) cmsimple - содержит в себе каталог
1.2.1) languages - содержит 12 файлов со следующими названиями: da.php, de.php, en.php, es.php, fi.php, fr.php, gr.php, nl.php, no.php, pt.php, ru.php, se.php - соответственно постранам. Вывод - скрипт поддерживает 12 языков.
1.2.2) Также в папке cmsimple следующие файлы -
.htaccess
adm.php - админка сайта
cms.php - основные функции скрипта
config.php - файл конфигурации настроек сайта
functions.php - дополнительные функции скрипта
image.php - файл картинок скрипта
log.txt - лог входов
login.php - вход в админку(только в админку. регистрации в скрипте нет что я считаю плюсом)
mailform.php - файл обратной связи
oedit.php - редактирование контента
search.php - скрипт поиска по сайту
1.3) content - контент сайта
.htacces
content.html - вся информация сайта находиться в этом файле - если не получаеться что-то изменить через админку - просто редактируйте этот файл. Достаточно иметь начальный знание html для редактирования этого файла
1,4) downloads - все файлы загружаемые через админку находяться здесь
1,5) images - все картинки загружаемые из админки
flags - подпапка с каритнками-флагами стран поддерживающих CMSimple
1.6) Plugins - здесь храняться дополнительные плагины
1,7) Templates - в папке находяться шаблоны сайта
по умолчанию это 1.7.1) cmsimple_ru_bordo
1.7.2) default
1.7.3) subsilverlike
Так как файлы в шаблонах одинаковый рассмотрим шаблон subsilverlike
1.7.3.1) папка images - содежит файл top.jpg - верхнее лого сайта.
1.7.3.2) папка menu - содержит 4 gif картинки - иконки для меню.
1.7.3.3) файл stylesheet.css - главный файл стилей шаблона
1.7.3.4) файл template.htm - глайный файл шаблона. В нем описано размещение обьектов страницы
Спасибо за прочтение =) Заходите еще на мой блог:
PHPMYSQLCODER.blogpost.com
Первый пост
Здесь я буду вылаживать различные бесплатные скрипты с полными комментариями и описаниями от меня на PHP и MySQL. Вы сможете найти здесь описания от скриптов простейших плагинов до сложнейших CMS.