Регистрация    Забыли пароль?        Правила форума    FAQ (читать перед созданием новой темы)
Имя   Пароль  запомнить
  
Просмотр темы
Вернуться на сайт: PHP-Fusion SF Russian Support Site

Форум поддержки PHP-Fusion SF | PHP-Fusion SF - Моды/Плагины | Моды/Mods
# 21 Тема: все тотже хайд
Psc
SF Team

Avatar пользователя

Psc

SF Support Team

Почетный SF

Сообщений: 2515
Откуда: As is
Зарегистрирован: 10 Ноября 2007, 13:15:07
Сказали спасибо 353 раз
Статус: offline
Опубликовано 31 Августа 2008, 18:23:05
Ой я даже не в курсе своих разработок... Код полностью рабочий, единственно может криво работать если его КРИВО использовать (типа [hide=500][hide=400][/hide]. То есть не проверны баги, но дело не в этом.

1. Вариант обхода - кнопка цитата. Есть идеи как править?
2. Вариант, сервисы типа RSS портала дают полный код (проблема админа имхо уже,чтобы проганять парсером пол рсс)
3. Вариант, всякие моды печати (?)
4. Вариант - код видять все модеры (редактирование никто не отменял)

В данном случае - меня интересует остро только 1ый вариант, ибо нет смысла в коде изза него.

Гыгы а штука прикольная все таки smiley


--------------------
Retired
^ наверх ^
# 22  
mishqa35
SF Team

Avatar пользователя

.jQ*

SF Support Team

Немогу без SF

Сообщений: 732
Откуда: Череповец
Зарегистрирован: 08 Ноября 2007, 20:35:30
Сказали спасибо 129 раз
Статус: offline
ICQ статус 6698669
Опубликовано 01 Сентября 2008, 14:45:03
Psc, выложи то что сделал


--------------------
Fusion и jQuery
^ наверх ^ 6698669 http://sf-fusion.ru
# 23  
Psc
SF Team

Avatar пользователя

Psc

SF Support Team

Почетный SF

Сообщений: 2515
Откуда: As is
Зарегистрирован: 10 Ноября 2007, 13:15:07
Сказали спасибо 353 раз
Статус: offline
Опубликовано 01 Сентября 2008, 15:53:07
Ну вот вроде отлажено, потому выложу.

Открытым кодом, ибо она небольшая (затачивать далее не вижу смысла - пока не будет решена проблема с обходом)

$hide_u = substr_count($text, '[hide=');
global $userdata,$user_posts_now;

if(iMEMBER){
//[hide=?] parse
$user_posts_now = ( $userdata['user_posts'] > 0 ? $userdata['user_posts'] : 0 );

//callback iSee
if (!function_exists(iseepost_now)) {
function iseepost_now($matches)
{
$postsneed = $matches[1]; //|| iADMIN
global $user_posts_now;
if ( ( $user_posts_now >= $postsneed ) || iMOD || iSUPERADMIN ) { //users post >= needed
return '<div class=\'quote\'> ['.$postsneed.'] Скрытый текст:<br>'.$matches[2].'</div>';
}
else { //not enough messages
return '<div class=\'quote\'><center>Для просмотра скрытого текста - оставьте столько сообщений:

'.$matches[1].'</b></a></center></div>';
}
}
}

for ($i=0;$i < $hide_u;$i++) {
$text = preg_replace_callback(
'#\[hide=([0-9]*?)\](.*?)\[/hide\]#si',
'iseepost_now',
$text);
}

} //iMem end
else {
for ($i=0;$i < $hide_u;$i++) $text = preg_replace('#\[hide=([0-9]*?)\](.*?)\[/hide\]#si', '<div

class=\'quote\'><center>Для просмотра скрытого текста - <a href=\'/register.php\'><u>зарегистрируйтесь</u></a> и

оставьте столько сообщений: <b>\1</b></center></div>', $text);

}



Все просто и понятно (разве что кроме callback, но это тоже несложно)
Ставим в мейн коре, ищем решения, радуем юзеров.

PS Кто знает как лучше подрубать функцию чтоб оно не потворяло саму себя? У меня вот так, но ето тормозит цикл (а выносить за парсер неприемлимо)

Блин самое главное, вдруг кто не знает, юзать так:
[hide=10]скрыть на 10 постов[/hide]


[Изменил(а) Psc, 01 Сентября 2008, 15:57:38]

--------------------
Retired
^ наверх ^
# 24  
Psc
SF Team

Avatar пользователя

Psc

SF Support Team

Почетный SF

Сообщений: 2515
Откуда: As is
Зарегистрирован: 10 Ноября 2007, 13:15:07
Сказали спасибо 353 раз
Статус: offline
Опубликовано 02 Сентября 2008, 09:15:14
Ну куда все пропали, не будем доделывать? Кинем так? smiley

Приаттачьте все таки модуль хайда, вроде на булке есть такой. Или какой найдете.


[Изменил(а) Psc, 02 Сентября 2008, 13:54:21]

--------------------
Retired
^ наверх ^
# 25  
mishqa35
SF Team

Avatar пользователя

.jQ*

SF Support Team

Немогу без SF

Сообщений: 732
Откуда: Череповец
Зарегистрирован: 08 Ноября 2007, 20:35:30
Сказали спасибо 129 раз
Статус: offline
ICQ статус 6698669
Опубликовано 08 Сентября 2008, 19:54:15
Вот так делается в дле.
Я пробывал и так и сяк, все краказябры получаются.. попробуй приюти код
---------------------------------------------------
ХАК ДЛЯ СКРЫТОГО ТЕКСТА ОТ ТЕХ, КТО НЕ НАБРАЛ НУЖНОЕ КОЛ-ВО КОММЕНТОВ.
---------------------------------------------------

Как установить в ручную ?

1. Открываем engine/modules/show.short.php

Ищем :

if ($user_group[$member_id['user_group']]['allow_hide'])

$tpl->set_block("'\[hide\](.*?)\[/hide\]'si","\\1");
else
$tpl->set_block("'\\[hide\\](.*?)\\[/hide\\]'si","<div class=\"quote\">".$lang['news_regus']."</div>");

ниже добовляем :

// -------------------------------------------::code::---------------------------------------------------------------------------------------------
$tpl->set_block( "#\\[hide=(.+?)\\](.*?)\\[/hide\\]#ies","comm_protect('\\1', '\\2')");
// ------------------------------------------::end code::------------------------------------------------------------------------------------------


2. Открываем engine/modules/show.full.php

Ищем:
else $tpl->set_block("'\\[hide\\](.*?)\\[/hide\\]'si","<div class=\"quote\">".$lang['news_regus']."</div>");

ниже вставляем


// ------------------------------------------------------------------------------------------------------------------------------------
$tpl->set_block( "#\\[hide=(.+?)\\](.*?)\\[/hide\\]#ies","comm_protect('\\1', '\\2')");
// ------------------------------------------------------------------------------------------------------------------------------------

else $tpl->set_block("'\\[hide\\](.*?)\\[/hide\\]'si","<div class=\"quote\">".$lang['news_regus']."</div>");

// ------------------------------------------------------------------------------------------------------------------------------------
$tpl->set_block( "#\\[hide=(.+?)\\](.*?)\\[/hide\\]#ies","comm_protect('\\1', '\\2')");
// ------------------------------------------------------------------------------------------------------------------------------------

3. Открываем engine/ajax/addcomments.php

ищем :
else $tpl->set_block("'\\[hide\\](.*?)\\[/hide\\]'si","<div class=\"quote\">".$lang['news_regus']."</div>");

Ниже вставляем:

// ------------------------------------------------------------------------------------------------------------------------------------
$tpl->set_block( "#\\[hide=(.+?)\\](.*?)\\[/hide\\]#ies","comm_protect('\\1', '\\2')");
// ------------------------------------------------------------------------------------------------------------------------------------

4. Открываем engine/ajax/editcomments.php

ищем :

$comm_txt = preg_replace ("'\[hide\](.*?)\[/hide\]'si","\\1", $comm_txt);

Ниже вставляем :

// -------------------------------------------::code::---------------------------------------------------------------------------------------------
$comm_txt = preg_replace("#\\[hide=(.+?)\\](.*?)\\[/hide\\]#ies","comm_protect('\\1', '\\2')",$comm_txt);
// ------------------------------------------::end code::------------------------------------------------------------------------------------------

5. Открываем engine/ajax/editnews.php

// -------------------------------------------::code::---------------------------------------------------------------------------------------------
$news_txt = preg_replace("#\\[hide=(.+?)\\](.*?)\\[/hide\\]#ies","comm_protect('\\1', '\\2')",$news_txt);
// ------------------------------------------::end code::------------------------------------------------------------------------------------------

6. ОТКРЫВАЕМ engine/modules/bbcode.php
ищем :
<div id="b_hide" class="editor_button" onclick="simpletag('hide')"><img title="$lang[bb_t_hide]" src="{THEME}/bbcodes/hide.gif" width="23" height="25" border="0"></div>

ниже вставляем:

<div class="editor_button" onclick="tag_comm()"><img title="Вставить скрытый текст (по кол-ву коммов)" src="{THEME}/bbcodes/xvalue.gif" width="23" height="25" border="0"></div>
Открываем engine/modules/function.php

Ищем:

$block = str_replace('\"', '"', str_replace("&", "&", $block));

return $block;

}


НИЖЕ ВСТАВЛЯЕМ:

function comm_protect ($comms, $block) {
global $member_id;
$targ = $member_id['comm_num'];
$group = $member_id['user_group'];
$uname = $member_id['name'];
$allow_groups = array(1,2); // Группы которым скрытый текст доступен напостой!
if (in_array($group,$allow_groups)) return $block;
if($targ < $comms)
$summ = (int)($comms-$targ);
return "<div class=\"quote\">Для просмотра скрытого текста надо <b>".$comms."</b> комментариев. У вас <b>".$targ."</b> еще надо <b>" . $summ ."</b> сообщений</div>";
$block = str_replace('\"', '"', str_replace("&", "&", $block));

return $block;
}
// ------------------------------------------::end code::------------------------------------------------------------------------------------------

ОТКРЫВАЕМ `engine/ajax/bbcodes.js`

ИЩЕМ :
doInsert("[url="+enterURL+"]"+enterTITLE+"[/url]", "", false);
};

НИЖЕ ВСТАВЛЯЕМ:
function tag_comm()
{
var FoundErrors = '';
var thesel ='';
if ( (ua_vers >= 4) && is_ie && is_win)
{
thesel = document.selection.createRange().text;
} else thesel ='текст доступный для просмотра';

if (!thesel) {
thesel ='текст доступный для просмотра';
}

var comm_num = prompt("Введите кол-во комментариев которое должен набрать пользователь для просмотра скрытого текста", "10");
var enterTEXT = prompt("Введите текст:", thesel);

if (!comm_num) {
FoundErrors += " " + "Вы не ввели число комментариев";
}
if (!enterTEXT) {
FoundErrors += " " + "Не ввели текст!";
}

if (FoundErrors) {
alert("Обнаружены ошибки:"+FoundErrors);
return;
}

doInsert("[hide="+comm_num+"]"+enterTEXT+"[/hide]", "", false);
};


откройте `engine/modules/functions.php` ищем:

$allow_groups = array(1,2); // Группы которым скрытый текст доступен напостой!

Где 1,2 - группы (ID ) которым доступно всегда.

УСТАНОФКА завершена!



--------------------
Fusion и jQuery
^ наверх ^ 6698669 http://sf-fusion.ru
# 26  
Psc
SF Team

Avatar пользователя

Psc

SF Support Team

Почетный SF

Сообщений: 2515
Откуда: As is
Зарегистрирован: 10 Ноября 2007, 13:15:07
Сказали спасибо 353 раз
Статус: offline
Опубликовано 09 Сентября 2008, 15:39:02
Так, во первых реализация этого кода есть, а я просил помощи в проблеме "ЦИТАТА" , то есть обхода ограничения.

Код полезен лишь в качестве идеи, да и то весьма относительно, лучше всего взять код с форума - там уже все будет нормальным.


--------------------
Retired
^ наверх ^
# 27  
mishqa35
SF Team

Avatar пользователя

.jQ*

SF Support Team

Немогу без SF

Сообщений: 732
Откуда: Череповец
Зарегистрирован: 08 Ноября 2007, 20:35:30
Сказали спасибо 129 раз
Статус: offline
ICQ статус 6698669
Опубликовано 10 Сентября 2008, 02:47:10
в php-fusion v7 hide идет видным токо админам, когда нажимаеш цитата все че в тегах hide невставляется в пост, тоже самое и при печати.. а переделать под hide=X несоставит труда =).. хотя я с траблой сталкнулся когда делал под v7..
вот в чем трабла.
Notice: Use of undefined constant iseepost_now - assumed 'iseepost_now' in

я eng незнаю так что помогай если че =)


--------------------
Fusion и jQuery
^ наверх ^ 6698669 http://sf-fusion.ru
# 28  
Psc
SF Team

Avatar пользователя

Psc

SF Support Team

Почетный SF

Сообщений: 2515
Откуда: As is
Зарегистрирован: 10 Ноября 2007, 13:15:07
Сказали спасибо 353 раз
Статус: offline
Опубликовано 10 Сентября 2008, 13:56:33
Notice: Use of undefined constant iseepost_now - assumed 'iseepost_now' in
Уведомление: неопределенная константа iseepost_now - принятая 'iseepost_now' в

Где то накосячил smiley

iseepost_now функция обратного вызова а не константа, не может она быть константой smiley

Или это в моем коде? Просто у меня еррор репортс на нуле

PS Насчет вырезать это логично, нада подумать, просто я как всегда минимализирую код, чтоб не было проблем с переносом и работой его.


--------------------
Retired
^ наверх ^
# 29  
mishqa35
SF Team

Avatar пользователя

.jQ*

SF Support Team

Немогу без SF

Сообщений: 732
Откуда: Череповец
Зарегистрирован: 08 Ноября 2007, 20:35:30
Сказали спасибо 129 раз
Статус: offline
ICQ статус 6698669
Опубликовано 10 Сентября 2008, 14:49:26
да это в твоем коде.. я его почти к 7 прикрутил посмотрю че у мня с стоит в e..r..


--------------------
Fusion и jQuery
^ наверх ^ 6698669 http://sf-fusion.ru
# 30  
Psc
SF Team

Avatar пользователя

Psc

SF Support Team

Почетный SF

Сообщений: 2515
Откуда: As is
Зарегистрирован: 10 Ноября 2007, 13:15:07
Сказали спасибо 353 раз
Статус: offline
Опубликовано 10 Сентября 2008, 17:01:46
Ага все верно, не посмотрел синтаксис команды, теперь с фиксами:


$hide_u = substr_count($text, '[hide=');
global $userdata,$user_posts_now;

if(iMEMBER){
//[hide=?] parse
$user_posts_now = ( $userdata['user_posts'] > 0 ? $userdata['user_posts'] : 0 );

//callback iSee
if (!function_exists('iseepost_now')) {
function iseepost_now($matches)
{
$postsneed = $matches[1]; //|| iADMIN
global $user_posts_now;
if ( ( $user_posts_now >= $postsneed ) || iMOD || iSUPERADMIN ) { //users post >= needed
return '<div class=\'quote\'> [<b>'.$postsneed.'</b>] Скрытый текст:<br>'.$matches[2].'</div>';
}
else { //not enough messages
return '<div class=\'quote\' align=\'center\' ><center>Для просмотра скрытого текста - оставьте столько сообщений: <b>'.$matches[1].'</b></a></div>';
}
}
}

for ($i=0;$i < $hide_u;$i++) {
$text = preg_replace_callback(
'#\[hide=([0-9]*?)\](.*?)\[/hide\]#si',
'iseepost_now',
$text);
}

} //iMem end
else {
for ($i=0;$i < $hide_u;$i++) $text = preg_replace('#\[hide=([0-9]*?)\](.*?)\[/hide\]#si', '<div class=\'quote\' align=\'center\' >Для просмотра скрытого текста - <a href=\''.BASEDIR.'register.php\'><u>зарегистрируйтесь</u></a> и оставьте столько сообщений: <b>\1</b></div>', $text);

}




--------------------
Retired
^ наверх ^
# 31  
mishqa35
SF Team

Avatar пользователя

.jQ*

SF Support Team

Немогу без SF

Сообщений: 732
Откуда: Череповец
Зарегистрирован: 08 Ноября 2007, 20:35:30
Сказали спасибо 129 раз
Статус: offline
ICQ статус 6698669
Опубликовано 10 Сентября 2008, 17:21:11
сделал для v7 все работает как часики.. но пришлось убрать из строки
if ( ( $user_posts_now >= $postsneed ) || iMOD || iSUPERADMIN ) {


вот это
|| iMOD


ошибка при печати была.

Notice: Use of undefined constant iMOD - assumed 'iMOD' in D:\xampp\htdocs\78\includes\bbcodes\hide_bbcode_include.php on line 33

и несмотря на ошибку все вроде бы нормально но в этой же печати выводился текст из под hide=x.. пришлось обойтись без iMOD.. может конешно это из за груп, там ведь все по другому сделано


[Изменил(а) mishqa35, 10 Сентября 2008, 17:23:15]

--------------------
Fusion и jQuery
^ наверх ^ 6698669 http://sf-fusion.ru
# 32  
Psc
SF Team

Avatar пользователя

Psc

SF Support Team

Почетный SF

Сообщений: 2515
Откуда: As is
Зарегистрирован: 10 Ноября 2007, 13:15:07
Сказали спасибо 353 раз
Статус: offline
Опубликовано 10 Сентября 2008, 17:43:37
По сути мода нет уже в 6 фьжне вроде как :) Но с другой стороны он там есть. А в семерке хз, я токо поверхностно ее знаю.

Так продолжим, вторая часть кода, альфа пока что:


function parse_edithide($text) { //parsing hide func
if(!iMEMBER) die('Ты гость чтоли?'); // ;)
//if all is ok

//include func
if (!function_exists(iseecleanpost_now)) { //callback func
function iseecleanpost_now($matches)
{
$postsneed = $matches[1]; //|| iADMIN
global $user_posts_now;
if ( ( $user_posts_now >= $postsneed ) || iMOD || iSUPERADMIN ) { //users post >= needed
return '[hide='.$postsneed.']'.$matches[2].'[/hide]';
}
else { //not enough messages
return '[qu.''.ote]Для просмотра скрытого текста - оставьте столько сообщений: '.$matches[1].'[/quote]';
}
}
}
//eof inc

global $userdata,$user_posts_now;
$hide_u = substr_count($text, '[hide=');

$user_posts_now = ( $userdata['user_posts'] > 0 ? $userdata['user_posts'] : 0 );

for ($i=0;$i < $hide_u;$i++) {
$text = preg_replace_callback(
'#\[hide=([0-9]*?)\](.*?)\[/hide\]#si',
'iseecleanpost_now',
$text);
}

return $text;
}




Можно вставлять чисто в файл где идет цитирование и печать, вставлять в парсер бб кодов нельзя!
Далее обрабатываем сообщение которое выдается в окно редактирования вот так:

parse_edithide($data['post_message']) , теперь в цитате тоже все глухо.

PS По сути переделанная функция же, но только заточена под цитирование.

PPS Чем больше тестов - тем меньше багов :)

PPPS !!!! Поиск не парсит код, потому нада добавить parse в него. Хотя он все равно будет тупить кажися.


[Изменил(а) Psc, 11 Сентября 2008, 17:57:01]

--------------------
Retired
^ наверх ^
# 33  
Psc
SF Team

Avatar пользователя

Psc

SF Support Team

Почетный SF

Сообщений: 2515
Откуда: As is
Зарегистрирован: 10 Ноября 2007, 13:15:07
Сказали спасибо 353 раз
Статус: offline
Опубликовано 23 Августа 2009, 17:00:31
Если кому интересно - доделал хайд под семерку уже, переделывать под шестерку не буду, но можете на основе моего кода сделать под 6рку например smiley

Здесь

Offtopic: PS мля семерик лочит форум от гостей smiley


--------------------
Retired
^ наверх ^
Перейти на форум:


95,274,803 уникальных посетителей
сейчас: 29 Апреля 2024, 09:45:37
Генерация страницы: 0.35 сек.