Сайт сообщества | Клуб пользователей | О проекте

Имя
Пароль
ПравилаРегистрацияСправка
Сообщения за деньПоиск

Вернуться   Клуб пользователей портальной системы RUNCMS > Опен Ресурс > Разработчикам > Готовые хаки

Ответ
 
Опции темы Опции просмотра
LaRok вне форума LaRok
攻殻機動隊


| Цитировать Старый #1 01-29-2005, 12:56

Тестировалось в работе на RUNCMS 1.1A. Насчет работы на других версиях нет никакой гарантии.

Часть первая. Создание необходимых файлов.

1. Создаем/личим/достаем две картинки для открывания/закрывания. По стандарту плюс и минус.

Обзываем их minus.gif и plus.gif

Бросаем картинки в themes\тема_портала\images\

2. Создаем файл collapse.js с ява скриптом на колапс/ункалапс + куки в themes\тема_портала\

В коде collapse.js меняем "www.сайт.ru" на путь к своему сайту. Меняем "тема_портала" на название используемой темы.

Код файла ниже:

Код:
// #############################################################################
// Хак на колапс/ункалапс + куки.
// #############################################################################
// LaRok [www.e-xoops.ru] 29.01.05
// #############################################################################
function toggle_block(block, icon)
{
if (document.getElementById)
{
if (document.getElementById(block).style.display == 'block')
{
document.getElementById(block).style.display = 'none';
icon.src = 'http://www.сайт.ru/themes/тема_портала/images/plus.gif';
save_collapsed(block, true);
}
else
{
document.getElementById(block).style.display = 'block';
icon.src = 'http://www.сайт.ru/themes/тема_портала/images/minus.gif';
save_collapsed(block, false);
}
}
else if (document.all)
{
if (document.all[block].style.display == 'block')
{
document.all[block].style.display = 'none';
icon.src = 'http://www.сайт.ru/themes/тема_портала/images/plus.gif';
save_collapsed(block, true);
}
else
{
document.all[block].style.display = 'block';
icon.src = 'http://www.сайт.ru/themes/тема_портала/images/minus.gif';
save_collapsed(block, false);
}
}
}
function save_collapsed(objid, addcollapsed)
{
var collapsed = get_cookie("collapse");
var tmp = "";
if (collapsed != null)
{
collapsed = collapsed.split(",");
for (i in collapsed)
{
if (collapsed[i] != objid && collapsed[i] != "")
{
tmp = tmp + collapsed[i];
tmp = tmp + ",";
}
}
}
if (addcollapsed)
{
tmp = tmp + objid;
}
expires = new Date();
expires.setTime(expires.getTime() + (1000 * 86400 * 365));
set_cookie("collapse", tmp, expires);
}
function set_cookie(name, value, expires)
{
if (!expires)
{
expires = new Date();
}
document.cookie = name + "=" + escape(value) + "; expires=" + expires.toGMTString() +  "; path=/";
}
function get_cookie(name)
{
cookie_name = name + "=";
cookie_length = document.cookie.length;
cookie_begin = 0;
while (cookie_begin < cookie_length)
{
value_begin = cookie_begin + cookie_name.length;
if (document.cookie.substring(cookie_begin, value_begin) == cookie_name)
{
var value_end = document.cookie.indexOf (";", value_begin);
if (value_end == -1)
{
value_end = cookie_length;
}
return unescape(document.cookie.substring(value_begin, value_end));
}
cookie_begin = document.cookie.indexOf(" ", cookie_begin) + 1;
if (cookie_begin == 0)
{
break;
}
}
return null;
}
Данный файл также доступен в атаче. Необходимо отредактировать его и поменять "САЙТ" на название вашего сайта и "ТЕМА" на название темы.

Часть вторая. Модификация файлов портала.

1. Открываем class\xoopsblock.php

Ищем код:

PHP код:
function showBlock($sideblock$title$content$force=false)  
        {  
            global  
$xoopsModule;  
            if ( 
$this->getVar('show_mid') != '0' && $force == false ) {  
                if ( 
$xoopsModule ) {  
                    if ( !
in_array($xoopsModule->mid(), explode('|'$this->getVar('show_mid'))) ) return false;  
                } else {  
                    if ( !
in_array('-1'explode('|'$this->getVar('show_mid'))) ) return false;  
                }  
            }
            
$show_template = ($this->getVar('show_template') != '') ? $this->getVar('show_template') : 'standard' ;
            if (
$show_template  == 'standard'){
            switch (
$sideblock){ 
                case  
XOOPS_SIDEBLOCK_LEFT:
                    
themesidebox_left($title$content);
            break;
        case 
XOOPS_SIDEBLOCK_RIGHT:
            
themesidebox_right($title$content);
            break;
        case 
XOOPS_CENTERBLOCK_TOPLEFT || XOOPS_CENTERBLOCK_BOTTOMLEFT:
            
themecenterbox_left($title$content);
            break;
        case 
XOOPS_CENTERBLOCK_TOPRIGHT || XOOPS_CENTERBLOCK_BOTTOMRIGHT:
            
themecenterbox_right($title$content);
            break;    
        case 
XOOPS_CENTERBLOCK_TOPCENTER || XOOPS_CENTERBLOCK_BOTTOMCENTER:
            
themecenterbox_center($title$content);
            break;
        
        }
    }else{
        
themebox_template($title$content$show_template);
    }
            
        } 
Замена на:

PHP код:
function showBlock($sideblock$title$content$force=false)  
        {  
            
$bbid $this->getVar('bid');
            global  
$xoopsModule;  
            if ( 
$this->getVar('show_mid') != '0' && $force == false ) {  
                if ( 
$xoopsModule ) {  
                    if ( !
in_array($xoopsModule->mid(), explode('|'$this->getVar('show_mid'))) ) return false;  
                } else {  
                    if ( !
in_array('-1'explode('|'$this->getVar('show_mid'))) ) return false;  
                }  
            }
            
$show_template = ($this->getVar('show_template') != '') ? $this->getVar('show_template') : 'standard' ;
            if (
$show_template  == 'standard'){
            switch (
$sideblock){ 
                case  
XOOPS_SIDEBLOCK_LEFT:
                    
themesidebox_left($title$content$bbid);
            break;
        case 
XOOPS_SIDEBLOCK_RIGHT:
            
themesidebox_right($title$content$bbid);
            break;
        case 
XOOPS_CENTERBLOCK_TOPLEFT || XOOPS_CENTERBLOCK_BOTTOMLEFT:
            
themecenterbox_left($title$content$bbid);
            break;
        case 
XOOPS_CENTERBLOCK_TOPRIGHT || XOOPS_CENTERBLOCK_BOTTOMRIGHT:
            
themecenterbox_right($title$content$bbid);
            break;    
        case 
XOOPS_CENTERBLOCK_TOPCENTER || XOOPS_CENTERBLOCK_BOTTOMCENTER:
            
themecenterbox_center($title$content$bbid);
            break;
        
        }
    }else{
        
themebox_template($title$content$show_template$bbid);
    }
            
        } 
Закрываем class\xoopsblock.php, несём файл на сервер.

2. Открываем themes\тема_портала\theme.php

2.1 Ищем код:

Код:
</head>
!ВЫШЕ! добавляем:

Код:
<script type="text/javascript" src="<?php echo XOOPS_URL."/themes/".XOOPS_THEME;?>/collapse.js" ></script>
2.2 Ищем код:

PHP код:
function themesidebox_left($title=''$content) { 
Замена на:

PHP код:
function themesidebox_left($title=''$content$bbid) {
    global 
$HTTP_COOKIE_VARS;
    
$bShow true;
    if (isset(
$HTTP_COOKIE_VARS['collapse']))
    {
        
$arrCollapse split(',',$HTTP_COOKIE_VARS['collapse']);
        
$bShow = (in_array($bbid$arrCollapse)) ? false true;
    }
    
$show = ($bShow) ? 'block;' 'none;';
    
$img  = ($bShow) ? ''.XOOPS_URL.'/themes/'.XOOPS_THEME.'/images/minus.gif' ''.XOOPS_URL.'/themes/'.XOOPS_THEME.'/images/plus.gif'
2.3 Ищем код:

PHP код:
function themesidebox_right($title=''$content) { 
Замена на:

PHP код:
function themesidebox_right($title=''$content$bbid) {
    global 
$HTTP_COOKIE_VARS;
    
$bShow true;
    if (isset(
$HTTP_COOKIE_VARS['collapse']))
    {
        
$arrCollapse split(',',$HTTP_COOKIE_VARS['collapse']);
        
$bShow = (in_array($bbid$arrCollapse)) ? false true;
    }
    
$show = ($bShow) ? 'block;' 'none;';
    
$img  = ($bShow) ? ''.XOOPS_URL.'/themes/'.XOOPS_THEME.'/images/minus.gif' ''.XOOPS_URL.'/themes/'.XOOPS_THEME.'/images/plus.gif'

!!! Далее замена только для функций themesidebox_left и themesidebox_right.
$title и $content; встречается в файле доволно часто, но необходимо сменить только для этих функций.
Это самый сложный этап так как скины также бывают разные. Вполне возможно что в скине используется не таблица (<td>) а div или span и так далее.


2.4 Ищем код:

PHP код:
<?php echo $title;?>
Замена для themesidebox_left на:

PHP код:
<?php echo $title;?>&nbsp;<img src='<?php echo $img ;?>' onclick="toggle_block('<?php echo $bbid ?>', this)" align="absmiddle">
и для themesidebox_right на:

PHP код:
<img src='<?php echo $img ;?>' onclick="toggle_block('<?php echo $bbid ?>', this)" align="absmiddle">&nbsp;<?php echo $title;?>

2.5 Ищем код:

PHP код:
$content
Смещаемся влево к началу строки. Внутри тега <td добавляем(вполне может использоваться любой другой тег в скине):

для themesidebox_left и для themesidebox_right:

PHP код:
id='<?php echo $bbid;?>' style='display: <?php echo $show;?>'
На примере EXRU должно получиться:

PHP код:
<td id='<?php echo $bbid;?>' style='display: <?php echo $show;?>' class="rightsideboxcontent"><?php echo $content;?></td>

2.5 Сноска Метод редактирования темы для коллапса описанный выше (через style) может некоректно отображаться в различных типах обозревателей.
Дать же конкретный код для скина который не видел довольно сложно.
Я на сайте использовал код приведенный ниже для function themesidebox_right и function themesidebox_left.
При вставке в свой скин необходимо указать свои размеры для блока ( width="173" ) и поменять все классы ( class= ) для своего стиля, поменять cellpadding="6" cellspacing="1" по необходимости.

PHP код:
<table class="bbordertitle" cellpadding="6" cellspacing="1" border="0" width="173">
    <tr>
        <td class="leftsidboxtitle" style="background: #F7F7F7;">
        <?php echo $title;?>&nbsp;<img src="<?php echo $img ;?>" onClick="toggle_block('<?php echo $bbid ?>', this)" align="absmiddle" alt="Закрыть|Открыть Блок">
        </td>
    </tr>
</table>

<div id='<?php echo $bbid;?>' style='display: <?php echo $show;?>'>
<table class="bbordercontent" cellpadding="6" cellspacing="1" border="0" width="173">
    <tr>
        <td class="leftsidboxcontent" style="background: #F3F3F3;">
        <?php echo $content;?>
        </td>
    </tr>
</table>
</div>

3. Если в скине используются дополнительные шаблоны для блоков.

Ищем в themes\тема_портала\theme.php

PHP код:
function themebox_template($title=''$content$show_template) {
          
$dir  =   XOOPS_ROOT_PATH."/themes/".XOOPS_THEME."/template/";
          include(
$dir.$show_template); 
          } 
Замена на:

PHP код:
function themebox_template($title=''$content$show_template$bbid) {
        global 
$HTTP_COOKIE_VARS;
        
$bShow true;
        if (isset(
$HTTP_COOKIE_VARS['collapse']))
        {
            
$arrCollapse split(',',$HTTP_COOKIE_VARS['collapse']);
            
$bShow = (in_array($bbid$arrCollapse)) ? false true;
        }
        
$show = ($bShow) ? 'block;' 'none;';
        
$img  = ($bShow) ? ''.XOOPS_URL.'/themes/'.XOOPS_THEME.'/images/minus.gif' ''.XOOPS_URL.'/themes/'.XOOPS_THEME.'/images/plus.gif';
          
$dir  =   XOOPS_ROOT_PATH."/themes/".XOOPS_THEME."/template/";
          include(
$dir.$show_template); 
          } 
3.1 Теперь необходимо добавить колапс во все используемые шаблоны блоков.

Открываем шаблон в themes\название_темы\template\название_шаблона.php

Ищем:

$title

Замена на:

$title
<img src='$img' onclick=\"toggle_block('$bbid', this)\" align='absmiddle'>

Далее представляем себе структуру таблицы блока, спускаемся немного ниже, если шаблон блока построен при помощи таблиц то мы увидим что-то похожее:

PHP код:
</tr>
<
tr>
<
td width='180' style='

    padding:6px 6px 6px 6px;
    background: #C3F2E8;
    text-align: left;
    text-decoration: none;
    border-bottom:1px solid #ffffff;
    border-top:1px solid #ffffff;
    
'
>
$content 
В тег <tr> ячейки отвечающий за показ содержания вставляем

PHP код:
id='$bbid' style='display: $show' 
Получаем подобное:

PHP код:
<tr id='$bbid' style='display: $show'>
<
td width='180' style='

    padding:6px 6px 6px 6px;
    background: #C3F2E8;
    text-align: left;
    text-decoration: none;
    border-bottom:1px solid #ffffff;
    border-top:1px solid #ffffff;
    
'
>
$content 
Для тех кто понял концепцию существует возможность по тому же принципу сделать центральные блоки с колапсом. В class\xoopsblock.php ничего менять не надо, просто по тому же принципу отредактировать theme.php и шаблоны.
Вложения
Тип файла: rar collapse.rar (786 байт, 9 просмотров)

Последний раз редактировалось LaRok, 03-21-2005 в 00:15
Причина: Пункт 2.5 о ошибках при просмотре разными обозревателями. Фикс для блоков на темплатах.

Посетить домашнюю страницу LaRok
  Сообщения: 2,045 c 13.09.2003 | Репутация: 25
DR вне форума DR
Старший участник

Аватар для DR

| Цитировать Старый #2 02-08-2005, 23:46

Может все таки решиться переделать на E-Xoops 1.05 Rev3 ?
Я пасс.


Nosce te iptium // Познай самого себя
  Сообщения: 804 c 24.05.2004 | Репутация: 18
LaRok вне форума LaRok
攻殻機動隊


| Цитировать Старый #3 02-09-2005, 09:30

Может лучше решиться поднять E-Xoops 1.05 Rev3 до RC 1.1a?

Посетить домашнюю страницу LaRok
  Сообщения: 2,045 c 13.09.2003 | Репутация: 25
Jax вне форума Jax
Участник

Аватар для Jax

| Цитировать Старый #4 02-09-2005, 11:57

LaRok*
о, спасиб за хак, но есть трабл с шаблонами для блоков
Когда вставляешь:
PHP код:
$title 
<img src='$img' onclick="toggle_block('$bbid', this)\" align='absmiddle'> 
То получается:
PHP код:
Parse errorparse errorunexpected T_STRINGexpecting ',' or ';' in C:\server\www\themes\EXRU\template\red.php on line 21 

Последний раз редактировалось Jax, 02-09-2005 в 12:33
Причина: Возник вопрос.


» http://newage.gcnet.ru/
Посетить домашнюю страницу Jax
  Сообщения: 173 c 08.02.2004 | Репутация: 4
Jax вне форума Jax
Участник

Аватар для Jax

| Цитировать Старый #5 02-10-2005, 07:44

LaRok, проснись, как в шаблонах для блоков задействовать это фишку?

Последний раз редактировалось Jax, 02-10-2005 в 07:47


» http://newage.gcnet.ru/
Посетить домашнюю страницу Jax
  Сообщения: 173 c 08.02.2004 | Репутация: 4
LaRok вне форума LaRok
攻殻機動隊


| Цитировать Старый #6 02-10-2005, 16:13

Jax*Vb съел \ в коде..

Поправил. Смотрим пункт 2.5 с самомого начала.

В остальном работает?

Посетить домашнюю страницу LaRok
  Сообщения: 2,045 c 13.09.2003 | Репутация: 25
Jax вне форума Jax
Участник

Аватар для Jax

| Цитировать Старый #7 02-10-2005, 16:16

Цитата:
В остальном работает?
В остальном все ок, сейчас тогда проверю весь код, потом отредактирую пост.

*** update

Да, все работает полностью. Только надо НЕ:

PHP код:
$title
<img src='$img' onclick=\"toggle_block('$bbid', this)\" align='absmiddle'> 
а:

PHP код:
<img src='$img' onclick=\"toggle_block('$bbid', this)\" align='absmiddle'>
$title 
Чтобы +/- был слева.

--
И можно ли сделать возможность сворачивать и центральные блоки?
--

Последний раз редактировалось Jax, 02-10-2005 в 16:52
Причина: update


» http://newage.gcnet.ru/
Посетить домашнюю страницу Jax
  Сообщения: 173 c 08.02.2004 | Репутация: 4
LaRok вне форума LaRok
攻殻機動隊


| Цитировать Старый #8 02-10-2005, 23:46

Цитата:
Jax:
Только надо НЕ
Естественно..

Аналогично правым-левым делаются центральные.

PS: Поправь "1 Комментариев:" на сайте.

Последний раз редактировалось LaRok, 02-10-2005 в 23:49

Посетить домашнюю страницу LaRok
  Сообщения: 2,045 c 13.09.2003 | Репутация: 25
Jax вне форума Jax
Участник

Аватар для Jax

| Цитировать Старый #9 02-11-2005, 12:54

LaRok, большое спасибо, все сделал, все работает, для всех центральных блоков.

Цитата:
PS: Поправь "1 Комментариев:" на сайте.
thx, fixed


» http://newage.gcnet.ru/
Посетить домашнюю страницу Jax
  Сообщения: 173 c 08.02.2004 | Репутация: 4
GateCrasger вне форума GateCrasger
Младший участник


| Цитировать Старый #10 02-18-2005, 07:21

Цитата:
LaRok:
2.5 Сноска Метод редактирования темы для коллапса описанный выше (через style) может некоректно отображаться в различных типах обозревателей.
Дать же конкретный код для скина который не видел довольно сложно.
Я на сайте использовал код приведенный ниже для function themesidebox_right и function themesidebox_left.
При вставке в свой скин необходимо указать свои размеры для блока ( width="173" ) и поменять все классы ( class= ) для своего стиля, поменять cellpadding="6" cellspacing="1" по необходимости.


PHP код:
<table class="bbordertitle" cellpadding="6" cellspacing="1" border="0" width="173">
<tr>
<td class="leftsidboxtitle" style="background: #F7F7F7;">
<?php echo $title;?>&nbsp;<img src="<?php echo $img ;?>" onClick="toggle_block('<?php echo $bbid ?>', this)" align="absmiddle" alt="Закрыть|Открыть Блок">
</td>
</tr>
</table>

<div id='<?php echo $bbid;?>' style='display: <?php echo $show;?>'>
<table class="bbordercontent" cellpadding="6" cellspacing="1" border="0" width="173">
<tr>
<td class="leftsidboxcontent" style="background: #F3F3F3;">
<?php echo $content;?>
</td>
</tr>
</table>
</div>
А куда именно этот код добавлять?

P.S. Посмотрите что я сделал не так - http://clubpoint.ru/modules/news/

И ещё - возможно ли как-нибуть отредактировать блоки, чтобы они не разъезжались при сворачивании?

Последний раз редактировалось GateCrasger, 02-18-2005 в 07:46

  Сообщения: 14 c 31.01.2005 | Репутация: 1
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Рейтинг@Mail.ru Хостинг провайдер Majordomo. Powered by: vBulletin Version 3.0
Copyright ©2000-2024, Jelsoft Enterprises Ltd.
Все разделы прочитаны - Руководство форума - Архив - Вверх
Rambler's Top100
Output: 142.16 Kb. compressed to 133.94 Kb. by saving 8.23 Kb. (5.79%)
Page generated in 0.13404 seconds with 13 queries