Дополнительный модуль для RS-BLOG v2.8.0. Модуль Виджет

 

Доброго времени суток дорогие читатели моего блога. Я заметил, что не публикуя новый материал, моя посещалка так и не упал, это радует УлыбаюсьДумаю если бы я публиковался чаще, то давно бы уже имел огромною аудиторию читателей. А может быть и нет.. надо будет как нибудь проверить...

О чем сегодня я напишу? Очень давно читатель по имени Егор, попросил меня поведать о чудо модуле "Еще модули...". В своих бесконечно долгих делах, я откладывал данную тему на завтра. До откладывал ее до такой степени, что она попала, так сказать, в долгий ящик.

 

 

Но время пришло, и я решил все же дописать начатую заметку.

Сегодня на повестке дня, беглый разбор работы дополнительного модуля для системы RS-BLOG. Как понятно из названия поста, модуль называется "Виджет". Результат его работы Вы можете лицезреть на моем блоге. Видите с права картинку:

 

дополнительный модуль

 

Данный блок был вставлен как раз с помощью данного дополнительного модуля. Модуль позволяет вставлять блоки с html кодом в сайтбар блога. Этот блок может быть списком, или, в моем случае, ссылкой на статью, или на чужой ресурс. В общем довольно простая и нужная штука.

 

Из чего состоит модуль?

 

Модуль можно поделить на две части.

  1. Пользовательская часть
  2. Админ часть

Пользовательская часть вытаскивает блоки из базы данных, вставляет их в шаблон и выводит на экран.

Админ часть добавляет список блоков, форму добавления и редактирования.

Технически все реализовано точно так же как и сама система. Есть папка moduls есть папка templates и есть файл index.php в котором прописаны условия вызовов нужных функций. По сути эта такая мини системка встроенная в основную систему. Улыбаюсь

Я думаю если у Вас будет желание разобраться как сие чудо работает, то Вам будет достаточно прогуляться по файлам которые Вы можете скачать в конце данной заметки.

А теперь давайте попробуем его поставить.

 

Ставим модуль виджета на систему RS-BLOG

 

Для начала спускаемся в низ заметки и качаем модуль. Теперь распаковываем его в папку /moduls/moremoduls/

 

путь распаковки модуля

 

Обратите внимание на пути, и на то, что в папке rs_widget находится не еще одна папка rs_widget, а именно файлы модуля.

После распаковки проходим в админ панель, в раздел настроек блога

 

настройки блога rs-blog

 

Щелкаем по ссылке "Еще модули...".

 

модуль еще модули...

 

Если Вы распаковали модуль правильно, то должны увидеть вот такое окошко

 

страница дополнительных модулей

 

В общем то тут все ясно. Это табличка с описанием дополнительных модулей. Обратите внимание на колонку "Описание". В ней описано как вывести данные модуля в публичную часть блога. (кстати, данная информация берется из файла config.xml)

Для активации модуля нажмите на пустой кружочек

 

активация модуля

 

Если кружочек потемнел, значит модуль установился.

Для того что бы закончить установку, необходимо выполнить инструкцию описанную в описание модуля, а именно, зайти в пользовательский шаблон /templates/имя_шаблона/main.tpl.php, и прописать переменную вызова $rs_widget.

 

переменная вызова модуля

 

Я вставил данную переменную в сайтбар (правый блок) блога.

Одно маленькое предостережение. При активации модуля в БД создается таблица (код установщика можно поглядеть в файле installer.php), а при дезактивации модуля таблица будет удалена, стало быть все блоки, что Вы на создаете будут удалены.

 

Управление модулем

 

После установки, модуль должен появится в главной панели админки (при условии что данным модулем можно управлять. В config.xml есть параметр control, если у параметра стоит 1, значит у модуля есть панель управления. Если же там стоит 0, то панель не предусмотрена. Кстати обратите внимание, что у параметра installer, после установки модуля, стоит единица. Это означает что модуль активен. Если же стоит ноль - значит модуль не установлен)

появление модуля в меню

 

В управление данным модулем не должно быть затруднений, но есть один момент, о котором Вы должны знать. У модуля есть два режима публикации блоков.

  1. С шаблоном
  2. Без шаблона

На моем блоге, блок информации опубликован без шаблона. Вот пример видов блока с шаблоном и без:

 

виды блоков

 

Так вот, в режиме публикации с шаблоном, модуль использует шаблон widget_y.tpl.php, который лежит вот в этой папке: /moduls/moremoduls/rs_widget/templates/. Данный шаблон необходимо подстраивать для каждой темы блога в ручную. То же в принципе касается и шаблона widget_n.tpl.php который используется в режиме "Без шаблона". По мне там геморроя совсем ничего, но может поставить в ступор человека который не понимает html Удивляюсь

 

Заключение

 

В общем то на этом все.. Извиняюсь за долгий отклик на вопрос о модулях, и за то, что данный обзор из категории "Галопом по Европам", уж очень хочется после рабочего дня прилечь...

Ах, да.. Если будут какие то вопросы, оставляйте комментарии, будем думать

Прошу меня извинить, на этом все. Удачи Вам!

Модуль rs_widget
 

Возможно Вам будут интересны следующие заметки

Комментарии (22)

Ваше имя *
Сайт
Ваш E-mail *
Ваше сообщение *
 
Егор, 02 Марта 2013 г. 16:19 пишет:
Читатель
Спасибо!
Алексей, 02 Марта 2013 г. 17:16 пишет:
Читатель
Спасибо. Долго ждали мы что-то нового :)
Я уже подумал, что вы забросили данный блог..

Вы знайте, что ваш блог очень полезен для людей, которые хотят знать HTML, CSS, PHP - писать сайты.

У вас не то, что в книге там всякого дерьма побольше, а толкового поменьше. У вас именно все по теме.

Я прочел ваши статьи очень много раз. Даже сделали распечатки нужной информации и повесил на стенку перед собой.
Rio-Shaman, 03 Марта 2013 г. 20:38 пишет:
Автор
Я бы рад пополнять блог чаще, но у меня просто не хватает времени... работа с утра до вечера, а дома движок блога переписываю. В выходные личные дела. Свободным пока бываю очень редко... но это пока =)
Ответ для пользователя: Алексей
Сергей, 04 Марта 2013 г. 21:44 пишет:
Гость
на тему создания собственного блога вы наверное единственные в интернете, где только не смотришь везде одна белеберда, а тут все разложенно по разделам от самого начала и до конца.

У меня такая просьба, не могли бы вы (если будет свободное время) написать статью как создать свой портал или новостной блог современного вида (это с поддержкой html 5), хотел бы чтобы вы писали побольше модулей, а главное чтобы по чаще обновляли сайт (хотя бы оставляли посты поздравления с праздниками 23 и 8 и другими прочими праздниками) различными постами, ведь вы у меня в закладках и когда то я писал свой блог от вас и до сих пор его улучшаю, практически скоро наверное перегоню dle, хотя они тоже не отстают:(
Sergey, 17 Марта 2013 г. 02:04 пишет:
Гость
В принципе правильный подход к созданию виджетов многие именно так и делают, я решил пойти немного дальше и в своей CMS добавил еще возможность выбирать страницы на которых виджет будет отображаться. Кстати мы почти в одно время начали разработку своих CMS если интересно вот что в итоге получилось у меня http://gir-cms.com :D
СергейК, 18 Июля 2013 г. 04:07 пишет:
Гость
Привет

Не подскажешь где здесь ошибка? (всю ночь сижу ломаю голову))))
function last_news_lenta($scin){
	$result_index = mysql_query("SELECT `active_news_lenta`,`sch_news_lenta` FROM `page` ORDER BY id DESC");
	$myrow_index = mysql_fetch_array($result_index);
	if($myrow_index[0] == 1){
		if($myrow_index != ""){
			$sm_read = file("templates/".$scin."/last_news_lenta.html");
			$sm_read = implode("",$sm_read);
			preg_match("/\[_lastnewslenta\](.*?)\[_lastnewslenta\]/s",$sm_read,$last_news_lenta1);
			$i = 1;
			do{
				$result_lastnewslenta = mysql_query("SELECT * FROM last_news_lenta ORDER BY id DESC");
				$myrow_lastnewslenta = mysql_fetch_array($result_lastnewslenta);
				$edd_tamp = $last_news_lenta1[$i];
				$edd_tamp = str_replace("[last_news]",$myrow_lastnewslenta[last_news],$edd_tamp);
				$edd_tamp = str_replace("[data_news]",$myrow_lastnewslenta[data_news],$edd_tamp);
				$last_news_lenta2 .= $edd_tamp;
				$i++;
			}
			while($myrow_index[1] = mysql_fetch_array($result_index));
			$last_news_lenta = preg_replace("/\[_lastnewslenta\](.*?)\[_lastnewslenta\]/s",$last_news_lenta2,$sm_read);
		}else $last_news_lenta = "<p align='center'>Пусто</p>";
	}else $last_news_lenta = "1";
	return $last_news_lenta;
}

//////////
Дело вот в чем..
У меня есть 4 записи в таблице last_news_lenta,
Как мне реализовать чтобы они все выводились через do while,
У меня почему то выводится только одна последняя запись(,
И как мне через таблицу sch_news_lenta (допустим там число 2) ограничить циклов do while?

Буду рад любому ответу)

Спаасибо
СергейК, 22 Июля 2013 г. 20:21 пишет:
Гость
Всем привет

Может кому понадобится рабочая функция
function newslenta($scin){
	$result_index = mysql_query("SELECT `active_news_lenta`,`col_news_lenta` FROM `option` ORDER BY id DESC");
	$myrow_index = mysql_fetch_array($result_index);
	if($myrow_index[0] == 1){
		if($myrow_index != ""){
			$col_news_lenta = $myrow_index[col_news_lenta];
			
			$result_lastnewslenta = mysql_query("SELECT `id`,`text_lenta`,`data_lenta` FROM `newslenta` ORDER BY id DESC LIMIT $col_news_lenta");
			$myrow_lastnewslenta = mysql_fetch_array($result_lastnewslenta);
			
			$sm_read = file_get_contents("templates/".$scin."/newslenta.html");
			preg_match("/\[newslenta\](.*?)\[\/newslenta\]/s",$sm_read,$newslenta_r);
			
			do{
				$edd_tamp = $newslenta_r[1];
				$edd_tamp = str_replace("[text_lenta]",$myrow_lastnewslenta[text_lenta],$edd_tamp);
				$edd_tamp = str_replace("[data_lenta]",$myrow_lastnewslenta[data_lenta],$edd_tamp);
				$newslenta .= $edd_tamp;
			}
			while($myrow_lastnewslenta = mysql_fetch_array($result_lastnewslenta));
			$sm_read = preg_replace("/\[newslenta\](.*?)\[\/newslenta\]/s",$newslenta,$sm_read);
		}else $newslenta = "<p align='center'>Пусто</p>";
	}else $newslenta = "";
	return $sm_read;
}
Алексей, 22 Июля 2013 г. 22:35 пишет:
Автор
Прошу прощение что не ответил на Ваше сообщение, рад что Вы сами разобрались =)
Ответ для пользователя: СергейК
CoopeR, 08 Августа 2013 г. 12:52 пишет:
Читатель
а как сделать чтоб виджет выходил только на определённых страницах?
Алексей, 08 Августа 2013 г. 14:19 пишет:
Автор
В голову приходит только одна мысль. Применить магию if(). Т.е. если открыта какая либо страница то подключить виджет. Ведь у каждой страницы есть своя переменная (например $cat, $blog или $contact), ну или значение переменной (например $blog = 181).
Ну вообще все зависит от того что за виджет, и как он вообще подключен к блогу
Ответ для пользователя: CoopeR
dlegame, 09 Августа 2013 г. 12:31 пишет:
Читатель
Уважаемый Rio-Shaman!
добавил в news.php: $edd_tamp = str_replace("[_cat]",$myrow_index['cat'],$edd_tamp);
потом в news.tpl.php [_cat] и он вместо названий отображает цыфры...в чем может быть проблема?(
Алексей, 09 Августа 2013 г. 15:04 пишет:
Автор
Название лежат в массиве $station_menu. А то что Вы вытащили, это id пункта, с помощью которого можно отыскать нужную Вам информацию в массиве $station_menu.
Ответ для пользователя: dlegame
dlegame, 10 Августа 2013 г. 15:06 пишет:
Читатель
Блин не у меня не получается :( можете пожалуйста помочь?) вот с отображением тегов я разобрался так:
if($myrow_index['meta_k'] != "")
{
 $sm_read = str_replace("{meta_k}",$myrow_index['meta_k'],$sm_read);
}
else $sm_read = str_replace("{meta_k}",$lang['not_tags'],$sm_read);
А вот насчёт категорий неполучается((( прошу вас пожалуйста помочь :)
Ответ для пользователя: Алексей
Алексей, 12 Августа 2013 г. 10:58 пишет:
Автор
Даю две функции, с помощью которым можно будет отыскать путь до каталога. Запускать нужно функцию get_catalog(). Посылайте в нее id каталога который Вы вытащили из статьи ($myrow_index['cat'])
// функция по id каталога (id берется из статьи) определяет имя категории и путь до нее (путь определяем функция get_path).
// функция возвращает ссылку на категорию
function get_catalog($catalog_id = 0)
{
    // если ничего не найдем, значит категории нет, поэтому создаем переменную с соответствующим сообщением
    $catalog_link = "Нет категории";
    
    // принудительно приводим категорию к числу
    $catalog_id = (int)$catalog_id;
    
    // если id категории равен нулю значит к статье категория не привязана
    if ($catalog_id == 0)
        return $catalog_link;
    
    // объявляем массив с всеми пунктами меню
    global $station_menu;
    
    // если массив пуст или не является массивом то выводим сообщение о том что мы не нашли категорию
    if (empty($station_menu) OR !is_array($station_menu))
        return $catalog_link;
        
    $path = array(); // путь до каталога
    $name = array(); // имя категории
    
    // листаем массив с всеми пунктами
    foreach ($station_menu as $key => $station)
        // если id пункта в массиве совпадает с искомым id категории
        if ($station[0] == $catalog_id) {

            // если данный пункт является ссылкой (href заполнена) или заголовком (href = #)
            // то обрываем поиск
            if ($station[3] != '')
                break;
            
            $path[] = $station[1]; // заполняем массив псевдонимом (urlname) пункта
            $name 	= $station[2]; // сохраняем имя категории (name)
            
            // если подменю не равен нулю (а именно в данный пункт вложен еще один пункт (дерево))
            if ($station[4] != 0)
                // запускаем функцию которая найдет нам путь до каталога
                get_path($path, $station[4], $station_menu);
            
            // так как листать массив больше нет смысла, обрываем цикл
            break;
        }
    
    // если при листание не найден ни один пункт, то возвращаем сообщение что категория не найдена
    if (empty($path))
        return $catalog_link;
    
    // если пукнт найден, то формируем ссылку
    $catalog_link = '/'.implode('/', array_reverse($path));
    
    // после чего выводим ее
    return '<a href="'.$catalog_link.'">'.$name.'</a>';
}

function get_path(&$path, $podmenu, $station_menu)
{
    // листаем массив с всеми пунктами
    foreach ($station_menu as $key => $station)
        // если id пункта в массиве равен присланному в функцию подменю
        if ($station[0] == $podmenu){
            $path[] = $station[1]; // дополняем массив, добавляя urlname родителя (подменю)

            // если у родителя подменю не равен нулю, то перезапускам функцию get_path() с новыми параметрами
            if ($station[4] != 0)
                get_path($path, $station[4], $station_menu);
            
            //  листать далее массив нет смысла, поэтому обрываем цикл
            break;
        }
}
Ответ для пользователя: dlegame
dlegame, 12 Августа 2013 г. 13:06 пишет:
Читатель
Чувак да ты мой спаситель спасибо тебе огромное :)
Ответ для пользователя: Алексей
Станислав, 01 Февраля 2015 г. 20:42 пишет:
Гость
Не скинешь функцию как ты сделал теги, буду очень признателен.
Ответ для пользователя: dlegame
Виктор, 06 Августа 2015 г. 15:27 пишет:
Гость
А как сделать чтобы блок с виджетом выводился в разных местах. Вот допустим, виджет с шаблоном, в нем реклама от яндекса, выводился на странице со статьей. А виджет без шаблона, с каким то другим контетом, выводился в сайдбаре. Подскажите пожалуйста, возможно ли это вообще сделать?
Алексей, 06 Августа 2015 г. 16:49 пишет:
Автор
А как сделать чтобы блок с виджетом выводился в разных местах

С помощью этого модуля к сожалению никак.

Подскажите пожалуйста, возможно ли это вообще сделать?

Теоретически возможно все. Но рекламу яндекса лучше вставлять не через этот модуль, а напрямую (код яндекса) в шаблон впихнуть

Ответ для пользователя: Виктор
Виктор, 06 Августа 2015 г. 23:12 пишет:
Гость
А можно как нибудь сделать, чтобы блокировались 2 или более записей на главной?
Ответ для пользователя: Алексей
Виктор, 07 Августа 2015 г. 14:11 пишет:
Гость
сделал сам)
Ответ для пользователя: Виктор
Виктор, 10 Августа 2015 г. 12:55 пишет:
Гость
Добрый день, Алексей. Не подскажите, как сделать каталог с закрепленным материалом?
Вот я сделал блок, в нем выводится по 7 закрепленных записей, у которых в БД в строке block значение равно 1. А как сделать станицу, допустим "самое популярно", с ссылкой например test.ru/best, и уже на этой странице, выводились все закрепленные записи, то есть не 7 записей, как в блоке на главной, а все записи у которых в БД строка block равна 1. Крч как на странице с категориями.
Ответ для пользователя: Алексей
Алексей, 10 Августа 2015 г. 16:26 пишет:
Автор

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

  1. обратная связь
  2. каталог
  3. статья

Эти три сущности ориентируются на три переменные:

  1. $_GET['contact']
  2. $_GET['cat']
  3. $_GET['blog']

Вам нужно создать еще одну переменную (например $_GET['best']), и при создании такой переменной запускать функцию, которая получит Ваши 7 закрепленных записей.
Создавать эту переменную, в случае если у Вас включен ЧПУ, необходимо с помощью файла .htaccess. Приблизительно вот так:

RewriteEngine on
RewriteRule ^best$ index.php?best [L]

В случае, когда Вы перейдете по ссылке test.ru/best у Вас создастся переменная $_GET['best'].

Ответ для пользователя: Виктор