форум vBSupport.ru > vBulletin > Вопрос — Ответ
Register Меню vBsupport Изображения Files Manager О рекламе Today's Posts Search
  • Родная гавань
  • Блок РКН снят
  • Premoderation
  • For English speaking users
  • Каталог Фрилансеров
  • If you want to buy some product or script
  • Администраторам
VBsupport перешел с домена .ORG на родной .RU Ура! Пожалуйста, обновите свои закладки - VBsupport.ru
Блок РКН снят, форум доступен на всей территории России, включая новые терртории, без VPN
На форуме введена премодерация ВСЕХ новых пользователей

Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
for English speaking users:
You may be surprised with restriction of access to the attachments of the forum. The reason is the recent change in vbsupport.org strategy:

- users with reputation < 10 belong to "simple_users" users' group
- if your reputation > 10 then administrator (kerk, Luvilla) can decide to move you into an "improved" group, but only manually

Main idea is to increase motivation of community members to share their ideas and willingness to support to each other. You may write an article for the subject where you are good enough, you may answer questions, you may share vbulletin.com/org content with vbsupport.org users, receiving "thanks" equal your reputation points. We should not only consume, we should produce something.

- you may:
* increase your reputation (doing something useful for another members of community) and being improved
* purchase temporary access to the improved category:
10 $ for 3 months. - this group can download attachments, reputation/posts do not matter.
20 $ for 3 months. - this group can download attachments, reputation/posts do not matter + adds eliminated + Inbox capacity increased + files manager increased permissions.

Please contact kerk or Luvilla regarding payments.

Important!:
- if your reputation will become less then 0, you will be moved into "simple_users" users' group automatically.*
*for temporary groups (pre-paid for 3 months) reputation/posts do not matter.
Уважаемые пользователи!

На форуме открыт новый раздел "Каталог фрилансеров"

и отдельный раздел для платных заказов "Куплю/Закажу"

Если вы хотите приобрести какой то скрипт/продукт/хак из каталогов перечисленных ниже:
Каталог модулей/хаков
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота.
Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
 
 
 
 
USvER
Простоузер
Default Вызвать PHP код с параметрами
1

Добрый день... Меня зовут Юрий и я новичок =)

Стоит задача: Для определенных приаттаченных файлов сделать парсинг и отображать результат под спойлером.

Как я вижу решение этой задачи:
В шаблон postbit_attachment добавить вызов php скрипта с параметрами нужного аттача...

Подскажите пожалуйста как это правильно сделать...
Bot
Yandex Bot Yandex Bot is online now
 
Join Date: 05.05.2005
Реклама на форуме А что у нас тут интересного? =)
 
 
Ghost
Гуру
 
Ghost's Avatar
Default
0

USvER, а подробнее? Показывать прикрепленное изображение? Показывать информацию об аттаче? Об каком-то определенном аттача? Или о тех что прикреплены к этому сообщению? Приведите пример: сейчас пост выглядит так-то, а нужно, чтобы выглядел так-то (куда добавить, что добавить, в каком случае добавить).
 
 
USvER
Простоузер
Default
1

Спасибо огромное за помощь!

Рассказываю в деталях...
Сейчас каждый аттач отображается одной строкой. Иконка, ссылка на
сам аттач, а в скобках размер и количество скачиваний.

Задача розпарсить *.w3g файлы и отобразить полученную информацию сделав из этой строки спойлер.

Таким образом пользователь сможет предварительно посмотреть сводную информацию из w3g файлов.
Сам скрипт парсинга уже написан. Теперь его нужно только прикрутить.

Задача очень похожа на превью картинок... Спасибо за подсказочку... Как-то сразу и не подумал...
 
 
Ghost
Гуру
 
Ghost's Avatar
Default
1

USvER, понято. Итак
  1. Нужно сделать функцию, которая парсит файл (назовем ее parse_w3g) и поместим ее в файл "includes/functions_w3g.php". Должно это выглядеть как так:
    PHP Code:
    <?php
    function parse_w3g($attachmentid$userid)
    {
        
    // здесь собственно код для выборки файла аттача с указанным ID и USERID
        // парсинг этого файла и возврат HTML-кода для спойлера
    }
    ?>
    т.е. результат этой функции должен выглядет как-то так:
    HTML Code:
    <div class="spoiler"> здесь информация о файле </div>
    я не заостряю на этом внимания, т.к. не знаю какой код спойлера используешь и какой скрипт для парсинга w3g
  2. Далее нужно создать модуль на хук "postbit_display_complete" -- этот модуль будет вызываться непосредственно перед вставкой данных поста в шаблон. Делается это так: идем в админку -- Продукты и модули -- Добавить новый модуль и заполняй форму: Продукт = vBulletin, Местоположение модуля = postbit_display_complete, Заголовок = любой на вкус, Порядок выполнения = 5, Модуль включен = Да, Код PHP модуля = пока ничего не значащий, например
    PHP Code:
    $a 0
    (чтобы там что-то было). Жмем кнопку "Сохранить" (или сперва читаем следующие пункты). Потом будем этот модуль редактировать.
  3. Теперь смотрим шаблоны postbit/postbit_legacy -- это можно не делать, просто почитай, каким образом находится путь решения проблемы В этих шаблонах несложно найти кусок, отвечающий за вывод аттачей:
    HTML Code:
    <if condition="$show['otherattachment']">
    	<fieldset class="fieldset">
    		<legend>$vbphrase[attached_files]</legend>
    		<table cellpadding="0" cellspacing="$stylevar[formspacer]" border="0">
    		$post[otherattachments]
    		</table>
    	</fieldset>
    </if>
    значит нам нужно в своем модуле также проверить значение $show['otherattachment'] и как-то изменить $post[otherattachments].
  4. Загружаем любой пост вложениями и смотрим, как они выглядят в HTML -- это нужно будет для парсинга. Выглядит это как-то так:
    HTML Code:
    <a href="attachment.php?attachmentid=XXX&amp;d=YYY">FILENAME</a> (FILESIZE, FILEVIEW)
  5. Остается написать целиком текст для модуля:
    PHP Code:
    // если есть аттачи
    if ($show['otherattachment'])
    {
        
    // подключаем функцию
        
    require_once(DIR '/includes/functions_w3g.php');

        
    // парсим список аттачей
        
    $post['otherattachments'] = preg_replace(
            
    '/<a href="attachment\.php\?attachmentid=(\d+)\&amp;d=(\d+)">([^<]+)\.w3g<\/a> \(([^\)]+)\)/ie',
            
    '\'<a href="attachment.php?attachmentid=\\1&amp;d=\\2">\\3.w3g</a> (\\4)\' . parse_w3g(\\1, $post[\'userid\'])',
            
    $post['otherattachments']
        );

Вот как-то так... Я это все пишу сразу здесь, т.е. на своем форуме не проверял. Пока.
 
 
USvER
Простоузер
Default
0

Вот это да! Просто не знаю даже как отблагодарить!
Появился только вопрос почему хукаем "postbit_display_complete" если каждый в отдельности аттач отрабатывается "postbit_attachment" с переменными $attachment[filename], $attachment[attachmentextension], $attachment[attachmentid], $attachment[dateline]?
Тоесть в этих переменных там лежит нужная нам информация.
 
 
Ghost
Гуру
 
Ghost's Avatar
Default
0

USvER, каюсь -- не заметил этот хук. Но проблема заключается здесь в том, что этот хук расположен до формироавния строки со ссылкой на аттач, тебе же необходимо внести в нее дополнения после. Хотя... Ща посмотрю, как это обойти.

Придется править шаблоны. Точнее только один шаблон: postbit_attachment -- добавить вызов переменной "$attachment[w3ginfo]", т.е. шаблон должен быть, например, таким:
HTML Code:
<tr>
	<td><img class="inlineimg" src="$stylevar[imgdir_attach]/$attachment[attachmentextension].gif" alt="<phrase 1="$attachment[attachmentextension]">$vbphrase[file_type_x]</phrase>" width="16" height="16" border="0" style="vertical-align:baseline" /></td>
	<td><a href="attachment.php?$session[sessionurl]attachmentid=$attachment[attachmentid]&amp;d=$attachment[dateline]"<if condition="$show['newwindow']"> target="_blank"</if>>$attachment[filename]</a> ($attachment[filesize]<if condition="$show['views']">, <phrase 1="$attachment[counter]">$vbphrase[x_views]</phrase></if>)</td>
</tr>
<if condition="$attachment['attachmentextension'] == 'w3g'">
<tr>
	<td colspan="2"><div class="spoiler">$attachment[w3ginfo]</div></td>
</tr>
</if>
а в модуль на хук "postbit_attachment" вставляем:
PHP Code:
if ($attachment['attachmentextension'] == 'w3g')
{
    require_once(
DIR '/includes/functions_w3g.php');
    
$attachment['w3ginfo'] = parse_w3g($attachment['attachmentid'], $attachment['userid']);


Last edited by Ghost : 06-26-2009 at 02:23 PM. Reason: Добавлено сообщение
 
 
USvER
Простоузер
Default
0

Вот!..... Точно!... Оно! = )
Благодарствую сударь! Респект и уважуха...

Я думаю наш топик будет интересным и остальным... Инфа очень полезная на мой взгляд!
 
 
Ghost
Гуру
 
Ghost's Avatar
Default
0

USvER, не за что.

я рекомендую задуматься над тем, как облегчить парсинг этих файлов. я бы эту функцию делал как-то так (как минимум):
  1. сперва в какой-то заранее определенной папке ищу файл "w3ginfo$attachmentid.txt"
  2. если файл есть -- include его
  3. если файла нет -- нахожу w3g-файл, парсю в массив w3ginfo, при помощи функции var_dump создаю файл "w3ginfo$attachmentid.txt" с содержимым вида
    PHP Code:
    <?php $w3ginfo=array(...); ?>
  4. обрабатываю массив $w3ginfo -- вставляю данные в HTML-код спойлера и возвращаю результат
это снижает нагрузку на базу (не надо каждый раз считывать инфо о файле и сам файл, если он хранится в базе) и файловую систему (не надо каждый раз считывать файл, что плохо, если файлы большие по размерам). по хорошему же нужно вообще это запихивать даже не в отдельные файлы, а в дополнительное поле в таблице 'attachment'. ;)
 
 
USvER
Простоузер
Default
0

Да... Я понимаю о чем вы...
Я думаю добавить в базу к аттачу поле где буду хранить закешированый результат...
Функции сериализации/десериализации результата скрипта уже написал один хороший дядько =)
 
 
Ghost
Гуру
 
Ghost's Avatar
Default
0

Quote:
Originally Posted by USvER View Post
Функции сериализации/десериализации результата скрипта уже написал один хороший дядько
Дядька обманывает Эти функции уже давно написаны: serialize и unserialize.

удачи.
 


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off




All times are GMT +4. The time now is 08:38 PM.


Powered by vBulletin® Version 3.0.15
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.