Перейти к контенту

Журнал - Дневник


Рекомендуемые сообщения

Arhar

видео с экрана снять?

давай. снимай. :D форум оригинальный английский без кучи модификаций. ;)

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

Серьезно. Интересно. Может все молчали просто все это время. И на самом деле у всех так и не работает ничего до сих пор...

 

надо переписать более 40 файлов...

Ну точно. Еще пол форума и галерею заодно....

Ссылка на комментарий
Поделиться на других сайтах

  • Ответы 1k
  • Создана
  • Последний ответ

Лучшие авторы в этой теме

Лучшие авторы в этой теме

глюк такой - не передается DB

я уже писал выше

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

Ссылка на комментарий
Поделиться на других сайтах

polluw

2.2.2

Ну вот с этого и надо было начинать. Тут несколькими страницами раньше уже писали про это и кажется было решение.

А если кто ставил на 2.2.х поделитесь опытом с однофорумниками. Желательно с подробностями.

 

Arhar

глюк такой - не передается DB

В форуме версии 2.1.х ? Где именно ?

Без обид только... Че-то ты "надулся" похоже... :D

Ссылка на комментарий
Поделиться на других сайтах

это я пытаюсь подключить класс обработки ббкодов из 2.1.х

дело в том, что там используется

$this->ipsclass->DB->func()

а при передаче

$parser->ipsclass =& $ibforums;
$parser->ipsclass->DB =& $DB;

или даже просто

$parser->ipsclass =& $ibforums;

получаю call to a member function on a non-object

тоесть $parser->ipsclass->DB остается пустым, что видно при проверке его через

print_r(get_class_methods($parser->ipsclass->DB ));

причем тут же выше

print_r(get_class_methods($ibforums->DB ));

или

print_r(get_class_methods($DB ));

дает не пустой результат

Ссылка на комментарий
Поделиться на других сайтах

Arhar

$ipsclass уже прописан в journal.php зачем $parser->ipsclass &= $ibforums; ?

Или global $ipsclass с последующим $parser->ipsclass = &$ipsclass; так же не сработает ? Давно че-то я с пхп не возился не помню уже ничего :D

Ссылка на комментарий
Поделиться на других сайтах

сделал как в 21, немного переписав "индексный" файл журнала и основные файлы действий

при вызове файла через реквайр во всех файлах есть, например

$idx = new legends();

вот эти штуки комментирую

потом в индексе их вызываю

(там немного подумать надо)

и добавляю переменную $runme->ipsclass =& $ipsclass;

а потом делаю запускающую функцию

короче можно наверно проще

Ссылка на комментарий
Поделиться на других сайтах

сейчас напишу, что у меня получилось...

 

смайлы должны заработоть после этого:

(или не должны вообще)

1. ./journal/legends.php

найти

   require ROOT_PATH.'sources/lib/post_parser.php';
 $parser = new post_parser();

заменить на

  require_once( ROOT_PATH."sources/handlers/han_parse_bbcode.php" );
  $parser = new parse_bbcode();
 $parser->ipsclass =& $ibforums;
 $parser->parse_bbcode = 1;

найти

$after = $parser->convert( array( 'TEXT' => $open.$content.$close, 'CODE' => 1 ) );

 

заменить на

 

$after = $parser->pre_db_parse( $open.$content.$close );

 

2. ./journal/misc/comment_edit.php

 

найти

 

		require ROOT_PATH.'sources/lib/post_parser.php';
	$parser = new post_parser();
	$parser->ipsclass = &$ibforums;

 

заменить на

 

  require_once( ROOT_PATH."sources/handlers/han_parse_bbcode.php" );
 $parser = new parse_bbcode();  
 $parser->ipsclass =& $ibforums;  
 $parser->parse_bbcode = 1;

 

найти

 

$post = $parser->unconvert($row['post'],1,0);

 

заменить на

 

$post = $parser->pre_edit_parse($row['post']);

 

3. ./journal/misc/post_edit.php

 

найти

 

		require ROOT_PATH.'sources/lib/post_parser.php';
	$parser = new post_parser();
	$parser->ipsclass = &$ibforums;

 

заменить на

 

  require_once( ROOT_PATH."sources/handlers/han_parse_bbcode.php" );
 $parser = new parse_bbcode();  
 $parser->ipsclass =& $ibforums;  
 $parser->parse_bbcode = 1;

 

найти

 

'post'   => $parser->unconvert($row['post'],1,0),

 

заменить на

 

'post'   => $parser->pre_edit_parse($row['post']),

 

4. ./journal/misc/post_functions.php

 

найти

 

  require ROOT_PATH."sources/lib/post_parser.php";
 $parser = new post_parser();

 

заменить на

 

  require_once( ROOT_PATH."sources/handlers/han_parse_bbcode.php" );

 $parser = new parse_bbcode();  
 $parser->ipsclass =& $ibforums;
 $parser->parse_bbcode = 1;
 $parser->parse_smilies = $ibforums->input['enableemo'] == 'yes' ? 1 : 0;

 

найти

 

  $post = $parser->convert(array( TEXT	=> $ibforums->input['Post'],
	  SMILIES => $ibforums->input['enableemo'] == 'yes' ? 1 : 0,
	  CODE	=> 1,
	  HTML	=> 0 ));

 

заменить на

 

  $post = $parser->pre_db_parse($ibforums->input['Post']);

 

найти

 

		require ROOT_PATH.'sources/lib/post_parser.php';
	$parser = new post_parser();

 

заменить на

 

  require_once( ROOT_PATH."sources/handlers/han_parse_bbcode.php" );
 $parser = new parse_bbcode();  
 $parser->ipsclass =& $ibforums;
 $parser->parse_bbcode = $this->allow_ibcode();
 $parser->parse_smilies = $ibforums->input['enableemo'] == 'yes' ? 1 : 0;

 

найти

 

  $post = $parser->convert(array( TEXT	=> $ibforums->input['Post'],
	  SMILIES => $ibforums->input['enableemo'] == 'yes' ? 1 : 0,
	  CODE	=> $this->allow_ibcode(),
	  HTML	=> 0 ));

 

заменить на

 

  $post = $parser->pre_db_parse($ibforums->input['Post']);

Ссылка на комментарий
Поделиться на других сайтах

Arhar

Это для какой версии форума ?

 

polluw

Только что установил 2.2.2 и на нее дневники 2.0pb7 с приведенными тут на форуме изменениями.

1. до установки в файле journal/install.php заменить

	$DB = new db_driver();

на

	$classname = "db_driver_".$ibforums->vars['sql_driver'];

$DB = new $classname;

2. установить в соответствии с инструкцией.

3. в файле journal/misc/post_function.php найти:

$smilies	= "<tr align='center'>\n";

добавить ниже:

		$ibforums->vars['emo_per_row'] = 5;

4. скопировать из форума 2.0.х файл jscripts/ipb_bbcode.js в папку jscripts/

 

все вроде.

очень сильно я не копал. может что и не корректно работает, но смайлы отображаются правильно, посты постятся, настройки работают.

Ссылка на комментарий
Поделиться на других сайтах

Вобщем модификация в том виде, в каком я ее помню "Запись Х закрыта для всех кроме Вас".

 

Я мог что-то пропустить или забыть со временем, потому что выдирал мод из сильно модифицированных файлов. В частности тем кто использует тег CUT от Vicer'a советую внимательнее читать код, потому что модификацию надо проводить прямо по коду моду тега CUT или без него! Тег CUT от Vicer'a искать в этой теме (это единственный аттачный файл во всей теме http://www.ibresource.ru/forums/index.php?...ost&id=1314 )

 

Простой мод не для слабых духом, потому что надо будет убрать из кода ненужные вещи, если не хотите ставить тег CUT :D

 

Затронутые файлы:

posts.php

skin_posts.php

list_post.php

user_search.php (прописывать в main_search.php не стал, т.к. у меня несколько иная система поиска, поэтому кому надо сделают по аналогии с user_search.php

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

 

Итак смотрим.

 

skin_post.php добавим под функцию post_closed новую функцию

 

//================================================
// post_closed2
//================================================
function post_closed2($row="") {
global $ibforums, $journal;
$IPBHTML = "";
//--starthtml--//


$IPBHTML .= <<<EOF
<tr><td class='catend'></td></tr>
<tr>
<td class='postparam' align='right'><a name='p{$row['pid']}'></a>{$row['journal_link']} {$ibforums->lang['j_closed_title2']} <b>{$row['title']}</b> {$ibforums->lang['j_closed_title3']}</td>
</tr>
{$row['post_nav']}
EOF;

//--endhtml--//
return $IPBHTML;
}

 

j_closed_title2 и j_closed_title3 определите сами в lang файле!

 

list_post.php (показываю просто кусок как сделано у меня кода в render post)

 

// render post

				$row['journal_link'] = $journal->skin->html['posts']->journal_link($row);

				if ($row['closed'] == 1)
				{
				$this->output['POSTS'] .= $journal->skin->html['posts']->post_closed2($row);
				$this->output['POSTS'] .= $journal->skin->html['posts']->post_row($this->post_render->process_post($row));
				}
				else 
				{
				$this->output['POSTS'] .= $journal->skin->html['posts']->post_row($this->post_render->process_post($row));
				}
				$start_post = false;
			}

 

user_search.php (с учетом модификации тега CUT) логика примерно такова, если пост закрыт и вы в списке j_view, то рендерить c учетом post_closed2, если нет, то ренедерить пост как обычно, но кода много из-за того что у меня в процедуру рендера поста встроена обработка тега CUT, выкиньте ее и получится чистый код, мне было реально влом ;)

 

			// show closed post ?

		if ($row['closed'] == 1 and !$ibforums->member['j_view'])
		{
			$output['POSTS'] .= $journal->skin->html['posts']->post_closed($row);
		}
		elseif ($row['closed'] == 1 and $ibforums->member['j_view'])
		{
			if ($row['has_poll'])
			{
				$poll_pids[$row['pid']] = $row['journal_id'];
			}

			if ($row['attach_key'] != "")
			{
				$attach_pids[] = $row['pid'];
			}
	//strip post
			$cut_pos = stripos($row['post'], '[CUT]');
			if ($cut_pos!==false) {
				if ( strlen($row['post']) > $cut_pos+5){
					$row['post_body'] = substr( $row['post'], 0, $cut_pos);
					$row['post_body_extra'] = "<br /><br />[<a href='{$journal->base_url}user=".$row['journal_id']."&comm=".$row['pid']."'>Читать далее</a>...]";
				}else{
					$row['post_body'] = str_replace('[CUT]', '', $row['post']);
					$row['post_body_extra'] = "";
				}
				$row['post'] = $row['post_body'].$row['post_body_extra'];
			}
			// render post
			$q = $post_render->process_post($row);
			if (count($search['HLITE']))
			{
				foreach($search['HLITE'] as $val)
				{
					if ( preg_match( "/(^|\s|'|\"|>|\S)(".preg_quote($val, '/').")(\S|\s|'|\"|,|\.|!|<br|$)/is", $q['post'] ) )
					{
					//	$q['post'] = preg_replace( "/(^|\s|'|\"|>|\S)(".preg_quote($val, '/').")(\S|\s|'|\"|,|\.|!|<br|$)/is", "\\1<span class='searchlite'>\\2</span>\\3", $q['post'] );
						$q['post'] = preg_replace( "/(^|\s|'|\"|>|\S)(".preg_quote($val, '/').")(\S|\s|'|\"|,|\.|!|<br|$)/is", "\\1\\2\\3", $q['post'] );
					}
				}
			}
			$output['POSTS'] .= $journal->skin->html['posts']->post_closed2($q);
			$output['POSTS'] .= $journal->skin->html['posts']->post_row($q);
		}
		else
		{
			if ($row['has_poll'])
			{
				$poll_pids[$row['pid']] = $row['journal_id'];
			}

			if ($row['attach_key'] != "")
			{
				$attach_pids[] = $row['pid'];
			}
	//strip post
			$cut_pos = stripos($row['post'], '[CUT]');
			if ($cut_pos!==false) {
				if ( strlen($row['post']) > $cut_pos+5){
					$row['post_body'] = substr( $row['post'], 0, $cut_pos);
					$row['post_body_extra'] = "<br /><br />[<a href='{$journal->base_url}user=".$row['journal_id']."&comm=".$row['pid']."'>Читать далее</a>...]";
				}else{
					$row['post_body'] = str_replace('[CUT]', '', $row['post']);
					$row['post_body_extra'] = "";
				}
				$row['post'] = $row['post_body'].$row['post_body_extra'];
			}
			// render post
			$q = $post_render->process_post($row);
			if (count($search['HLITE']))
			{
				foreach($search['HLITE'] as $val)
				{
					if ( preg_match( "/(^|\s|'|\"|>|\S)(".preg_quote($val, '/').")(\S|\s|'|\"|,|\.|!|<br|$)/is", $q['post'] ) )
					{
					//	$q['post'] = preg_replace( "/(^|\s|'|\"|>|\S)(".preg_quote($val, '/').")(\S|\s|'|\"|,|\.|!|<br|$)/is", "\\1<span class='searchlite'>\\2</span>\\3", $q['post'] );
						$q['post'] = preg_replace( "/(^|\s|'|\"|>|\S)(".preg_quote($val, '/').")(\S|\s|'|\"|,|\.|!|<br|$)/is", "\\1\\2\\3", $q['post'] );
					}
				}
			}
			$output['POSTS'] .= $journal->skin->html['posts']->post_row($q);
		}

		$start_post = false;
	}

	$output['POSTS'] .= $journal->skin->html['posts']->post_bottom();

 

posts.php - почти полная аналогия с user_search.php

 

								// show closed post ?

							if ($row['closed'] == 1 and !$ibforums->member['j_view'])
							{
									$output['POSTS'] .= $journal->skin->html['posts']->post_closed($row);
							}
							elseif ($row['closed'] == 1 and $ibforums->member['j_view'])
							{

									if ($row['has_poll'])
									{
											$poll_pids[$row['pid']] = $row['journal_id'];
									}

									if ($row['attach_key'] != "")
									{
											$attach_pids[] = $row['pid'];
									}

			  //strip post
				$cut_pos = stripos($row['post'], '[CUT]');
				if ($cut_pos!==false) {
					if ( strlen($row['post']) > $cut_pos+5){
						$row['post_body'] = substr( $row['post'], 0, $cut_pos);
						$row['post_body_extra'] = "<br /><br />[<a href='{$journal->base_url}user=".$row['journal_id']."&comm=".$row['pid']."'>Читать далее</a>...]";
					}else{
						$row['post_body'] = str_replace('[CUT]', '', $row['post']);
						$row['post_body_extra'] = "";
					}
					$row['post'] = $row['post_body'].$row['post_body_extra'];
				}

									// render post
									$output['POSTS'] .= $journal->skin->html['posts']->post_closed2($row);
									$output['POSTS'] .= $journal->skin->html['posts']->post_row($this->post_render->process_post($row));

							}
							else
							{

									if ($row['has_poll'])
									{
											$poll_pids[$row['pid']] = $row['journal_id'];
									}

									if ($row['attach_key'] != "")
									{
											$attach_pids[] = $row['pid'];
									}
			  //strip post
				$cut_pos = stripos($row['post'], '[CUT]');
				if ($cut_pos!==false) {
					if ( strlen($row['post']) > $cut_pos+5){
						$row['post_body'] = substr( $row['post'], 0, $cut_pos);
						$row['post_body_extra'] = "<br /><br />[<a href='{$journal->base_url}user=".$row['journal_id']."&comm=".$row['pid']."'>Читать далее</a>...]";
					}else{
						$row['post_body'] = str_replace('[CUT]', '', $row['post']);
						$row['post_body_extra'] = "";
					}
					$row['post'] = $row['post_body'].$row['post_body_extra'];
				}
									// render post

									$output['POSTS'] .= $journal->skin->html['posts']->post_row($this->post_render->process_post($row));
							}

							$start_post = false;
					}

					$output['POSTS'] .= $journal->skin->html['posts']->post_bottom();

Ссылка на комментарий
Поделиться на других сайтах

Теперь более интересный мод в состоянии разработки "ЗАГРУЗКА ФАЙЛОВ ДРУГИХ ТИПОВ"!

У меня возникли проблемы с загрузкой ZIP архивов, система говорит что неправильный тип файла!

 

В идеале необходимо дописать управление из админки на разрешение загрузки других файлов и на разрешенный размер аттачей, но это не сейчас.

 

Подозреваю что проблемы в add_attachments2 ... но где найти не могу, аттачи txt и doc проходят без проблем ...

 

смотреть пример можно по адресу http://bbs.krasnogorsk.ru/forum/dm

 

 

Модуль загрузки файлов (mp3,doc,txt,zip)

--------------------------------------------------------------------------------

Затронутые файлы:

------------------

post_functions.php

skin_q_reply.php

post_new.php

upload_lib.php (содержимое ниже)

skin_posts.php

post_render.php

post_edit.php

comment_new.php

comment_edit.php

--------------------------------------------------------------------------------

Открыть post_functions.php

 

Находим:

 

$data['_UPLOAD_FIELD'] = $journal->skin->html['q_reply']->upload_field($max_upload_info,$attach_field);

 

Добавляем:

 

$data['_UPLOAD_FIELD2'] = $journal->skin->html['q_reply']->upload_field2($max_upload_info,$attach_field);

 

Находим функцию function add_attachment()

 

По окончании функции добавляем еще одну:

 

function add_attachment2()
	{
			global $ibforums, $journal, $DB;

			require JOURNAL_ROOT."misc/upload_lib.php";
			$upload_lib = new upload_lib();

			$attach_post = 0;

			if ($ibforums->input['attach_key'] != "")
			{
					$this->cache_attachment();

					foreach ($this->attach_cache as $row)
					{
							$attach_post += $row['attach_size'];
					}
			}

			if ( $ibforums->cache['group_cache'][$journal->users['mgroup']]['g_j_attach_max'] > 0 )
			{
					if ( $ibforums->cache['group_cache'][$journal->users['mgroup']]['g_j_attach_per_post'] )
					{
							$this->main_space_left = intval( ( $ibforums->cache['group_cache'][$journal->users['mgroup']]['g_j_attach_per_post'] * 1024 ) - $attach_post );
					}
					else
					{
							$this->get_attachment_sum();

							$this->main_space_left = intval( ( $ibforums->cache['group_cache'][$journal->users['mgroup']]['g_j_attach_max'] * 1024 ) - $this->attach_sum );
					}
			}
			else
			{
					if ( $ibforums->cache['group_cache'][$journal->users['mgroup']]['g_j_attach_per_post'] )
					{
							$this->main_space_left = intval( ( $ibforums->cache['group_cache'][$journal->users['mgroup']]['g_j_attach_per_post'] * 1024 ) - $attach_post );
					}
					else
					{
							$this->main_space_left = 1000000000;
					}
			}

			$ibforums->input['attach_key'] = ($ibforums->input['attach_key'] != "") ? $ibforums->input['attach_key'] : md5(microtime());

			$upload_lib->max_file_size = $this->main_space_left;
			$upload_lib->name = "j".$journal->users['id']."_".time();

			if ($upload_lib->upload('FILE_UPLOAD2'))
			{
				 #   $image_lib->thumb_width = $ibforums->vars['j_th_width'];
				 #   $image_lib->thumb_height = $ibforums->vars['j_th_height'];
				 #   $image_lib->make_thumbnail();

					$attach_db = array( 'attach_file'	=> $upload_lib->name,
															'attach_name'	=> $upload_lib->original_name,
															'attach_size'	=> $upload_lib->file_size,
															'attach_date'	=> time(),
															'attach_temp'	=> 1,
															'attach_pid'	 => 0,
															'attach_cid'	 => 0,
															'attach_journal' => $journal->users['id'],
															'attach_key'	 => $ibforums->input['attach_key']);

					$db_string = $DB->compile_db_insert_string($attach_db);
					$DB->query("INSERT INTO ibf_jattach (" .$db_string['FIELD_NAMES']. ") VALUES (". $db_string['FIELD_VALUES'] .")");
					$attach_db['attach_id'] = $DB->get_insert_id();
					$this->attach_cache[$attach_db['attach_id']] = $attach_db;
			}

			return $upload_lib->error;
	}

 

--------------------------------------------------------------------------------

 

Открываем файл skin_q_reply.php

 

Находим функцию function attach_rows($row="")

 

меняем в ней

{$row['attach_size']}

 

на

 {$row['attach_size']} (лучше смотрится)

 

Находим function upload_field($max_upload_info="",$attach_field="")

 

Меняем на function upload_field($max_upload_info="")

 

В теле функции удаляем:

{$max_upload_info} и {$attach_field}

 

По окончании функции добавляем еще одну:

 

//===========================================================================
// upload_field2
//===========================================================================
function upload_field2($max_upload_info="",$attach_field="") {
global $ibforums, $journal;
$IPBHTML = "";
//--starthtml--//


$IPBHTML .= <<<EOF
	<tr>
			<td class='post'>{$ibforums->lang['j_upload_text2']}</td>
			<td class='post'><input class='input' type='file' size='40' name='FILE_UPLOAD2' /> <input class='button' type="submit" name="postattach2" onclick="skip_check=1" value="{$ibforums->lang['j_add_btn']}" />
			</td>
	</tr>
	<tr>
	<td class='post'>{$max_upload_info}</td>
	<td class='post'>{$attach_field}</td>
	</tr>
EOF;

//--endhtml--//
return $IPBHTML;
}

 

Находим 2 вхождения {$data['_UPLOAD_FIELD']} и после каждого добавляем:

 

{$data['_UPLOAD_FIELD2']}

 

--------------------------------------------------------------------------------

Открываем post_new.php

 

Находим:

// Upload attach

 

И меняем весь if на следующее сочетание:

 

if (($this->post_func->allow_upload())&&($ibforums->input['postattach']!=""))
			{
							$this_error = $this->post_func->add_attachment();
							if ($ibforums->input['postattach'])
							{
									$ibforums->input['preview_post'] = 1;
									$skip_check_error = 1;
							}
					}
			elseif (($this->post_func->allow_upload())&&($ibforums->input['postattach2']!=""))
			{
							$this_error = $this->post_func->add_attachment2();
							if ($ibforums->input['postattach2'])
							{
									$ibforums->input['preview_post'] = 1;
									$skip_check_error = 1;
							}
					}

 

--------------------------------------------------------------------------------

 

 

Создаем новый файл upload_lib.php в директории /misc со следующим содержанием:

<?php


if (!defined('IN_JOURNAL'))
{
	print "<h1>Incorrect access</h1>You cannot access this file directly.";
	exit();
}


class upload_lib {

var $original_name		= '';
var		$name						= '';
var $path						= '';
var		$type						= '';

	// jpeg options

	var $mime_allowed = array (
							  'audio/x-mpeg' => '.mp3',
							  'application/msword' => '.doc',
							  'application/zip' => '.zip',
							  'text/plain'   => '.txt');

	var $error						= '';


function upload_lib()
{
			global $ibforums;

			$this->path = $ibforums->vars['j_upload_dir'];
}



function upload($form_name='FILE_UPLOAD2')
{
			global $ibforums;

	$this->error = '';

			// Return if we don't have a file to upload

			if (trim($_FILES[$form_name]['name']) == "" or
					!$_FILES[$form_name]['name'] or
					$_FILES[$form_name]['name'] == "none")
			{
					return FALSE;
			}

			$this->type = preg_replace( "/^(.+?);.*$/", "\\1",  $_FILES[$form_name]['type']);
			$this->original_name = preg_replace( "/[^\w\.]/", "_", $_FILES[$form_name]['name']);
			$this->file_size = $_FILES[$form_name]['size'];

			// Check the file size

			if ($this->file_size > $this->max_file_size)
			{
					$this->error = $ibforums->lang['j_err_dl_big'];
					return FALSE;
			}

			// Check image by mime

			if(!isset($this->mime_allowed[$this->type]))
			{
					$this->error = $ibforums->lang['j_err_dl_type'];
					return FALSE;
			}

			// Make local name

	if (trim($this->name) == "")
	{
			$this->name = "j_".time();
	}
			$this->name .= $this->mime_allowed[$this->type];

			// Copy the upload to the uploads directory

			if (! @move_uploaded_file( $_FILES[$form_name]['tmp_name'], $this->path.'/'.$this->name) )
			{
					$this->error = $ibforums->lang['j_err_dl_file'];
					return FALSE;
			}
			else
			{
					@chmod( $this->path.'/'.$this->name, 0777 );
			}




			return TRUE;
}

}
?>

--------------------------------------------------------------------------------

Открываем skin_posts.php

 

Находим функцию function attachments_img_thumb

 

По окончании оной добавляем:

 

//===========================================================================
// attachments_file
//===========================================================================
function attachments_file($file_name="",$file="") {
global $ibforums, $journal;
$IPBHTML = "";
//--starthtml--//


$IPBHTML .= <<<EOF
<a href='{$ibforums->vars['j_upload_url']}/{$file_name}' target='_blank'>{$file}</a>
EOF;

//--endhtml--//
return $IPBHTML;
}

 

--------------------------------------------------------------------------------

Открываем post_render.php

 

Находим функцию function get_attachment($row)

 

В теле функции есть последняя строчка:

 

return $journal->skin->html['posts']->attachments_img( $row['attach_file'] );

 

ПЕРЕД ней добавляем:

 

  if (($row['attach_width'] == 0) and ($row['attach_height']) == 0)
			{
				return $journal->skin->html['posts']->attachments_file($row['attach_file'],$row['attach_name']);
			}

 

--------------------------------------------------------------------------------

Открываем post_edit.php

 

Находим:

// Upload attach

 

И меняем весь if на следующее сочетание:

 

if (($this->post_func->allow_upload())&&($ibforums->input['postattach']!=""))
			{
							$this_error = $this->post_func->add_attachment();
							if ($ibforums->input['postattach'])
							{
									$ibforums->input['preview_post'] = 1;
									$skip_check_error = 1;
							}
					}
			elseif (($this->post_func->allow_upload())&&($ibforums->input['postattach2']!=""))
			{
							$this_error = $this->post_func->add_attachment2();
							if ($ibforums->input['postattach2'])
							{
									$ibforums->input['preview_post'] = 1;
									$skip_check_error = 1;
							}
					}
			}

--------------------------------------------------------------------------------

Открываем comment_new.php

 

Находим:

// Upload attach

 

И меняем весь if на следующее сочетание:

 

if (($this->post_func->allow_upload())&&($ibforums->input['postattach']!=""))
			{
							$this_error = $this->post_func->add_attachment();
							if ($ibforums->input['postattach'])
							{
									$ibforums->input['preview_post'] = 1;
									$skip_check_error = 1;
							}
					}
			elseif (($this->post_func->allow_upload())&&($ibforums->input['postattach2']!=""))
			{
							$this_error = $this->post_func->add_attachment2();
							if ($ibforums->input['postattach2'])
							{
									$ibforums->input['preview_post'] = 1;
									$skip_check_error = 1;
							}
					}
			}

--------------------------------------------------------------------------------

Открываем comment_edit.php

 

Находим:

// Upload attach

 

И меняем весь if на следующее сочетание:

 

if (($this->post_func->allow_upload())&&($ibforums->input['postattach']!=""))
			{
							$this_error = $this->post_func->add_attachment();
							if ($ibforums->input['postattach'])
							{
									$ibforums->input['preview_post'] = 1;
									$skip_check_error = 1;
							}
					}
			elseif (($this->post_func->allow_upload())&&($ibforums->input['postattach2']!=""))
			{
							$this_error = $this->post_func->add_attachment2();
							if ($ibforums->input['postattach2'])
							{
									$ibforums->input['preview_post'] = 1;
									$skip_check_error = 1;
							}
					}
			}

Ссылка на комментарий
Поделиться на других сайтах

кстати я тут подумал, а почему не подключить class_upload форума на одно стандартное поле загрузки файлов?

и тогда не возникнет необходимости делать 2?

Ссылка на комментарий
Поделиться на других сайтах

кстати я тут подумал, а почему не подключить class_upload форума на одно стандартное поле загрузки файлов?

и тогда не возникнет необходимости делать 2?

 

Была такая идея, но решили сделать пока так, чтобы понять проходит ли загрузка и как все будет работать .... это первая версия мода, в ней есть ошибки, потому что как я уже описал не аттачатся zip и mp3 файлы ни на тестовом сервере под win ни на рабочем под *nix ... сначала необходимо раскопать почему так происходит, чтобы двигаться далее. Чем так разительно отличается zip от doc или txt ... вот в чем заковырка-то!?

 

Вобщем привязываться на форум не очень хочется ... лучше позднее сделать управление в админке, к тому же в перспективе сделать для каждого юзера отдельный каталог для аттачей (у меня уже в дневниках более 200 тысяч файлов) по user_id, чтобы не собирать сотни тысяч аттачей в одном каталоге.

 

Также почти готов RSS мод ... первую версию еще не обкатывали на рабочей машине, но тесты прошли нормально.

Ссылка на комментарий
Поделиться на других сайтах

Замечена бага. Если пост в дневе начинается с пустой строки или с состоящей только из пробелов, то его невозможно отправить. Говорит, что сообщение пусто.

копаем ValidateForm...

 

все из-за

var m = /^s*(.+?)s*$/im;

$ значит конец строки

значит другие строки не учитываются

 

хотя и стоит m

 

а опере вообще плевать на пробелы,она их считает

два пробела поставил и яваскрипт оперы радостно возвращает тру...

Ссылка на комментарий
Поделиться на других сайтах

Arhar

Да. Там не правильно написано. И $ тут абсолютно не причем.

Вот так должно быть:

var m = /^\s*((.|[\\n\\r])+)\s*$/im;

 

Строка в коде 3 раза встречается.... Заменить все.

Ссылка на комментарий
Поделиться на других сайтах

Ребят, не подскажите, как лечить такой баг?

 

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

 

Вот как было пару дней назад

http://img70.imageshack.us/img70/2133/22bl1.jpg

 

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

http://img166.imageshack.us/img166/3348/11lx5.jpg

 

Может есть решение без переделывания дизайнов?

Ссылка на комментарий
Поделиться на других сайтах

Теперь более интересный мод в состоянии разработки "ЗАГРУЗКА ФАЙЛОВ ДРУГИХ ТИПОВ"!

у меня то же самое сделано через модификацию image_lib.php, post_render.php и немножко - скинов.

 

я бы поделилась, но у меня много чего наверчено в дневниках, мне уже сложно найти концы, где какая модификация... "записи только для автора", произвольная дата записи, загрузка файлов (не картинок), печать списка записей (не одна запись с комментариями, а все записи без комментариев), новый тип доступа в дневник - 'для группы "бывалых пользователей" и друзей', список "кто здесь" на главной странице дневников (в самих дневниках юзеры не захотели подобного списка), и что-то еще... не помню :D

Ссылка на комментарий
Поделиться на других сайтах

Простой вариант добавления возможноти загрузки zip, mp3, doc и txt

http://www.urisoft.ru/journal/upload/upload.txt

 

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

 

Имена загруженных на сервак файлов конечному пользователю не видны и расширение у всех одно. Отдается файл с тем же именем которое было у залившего пользователя. Типа безопасность.... :D

 

Мод хоть и рабочий, но поставляется "как есть" ;) Найдете ошибки, исправим.

Ссылка на комментарий
Поделиться на других сайтах

Во, примерно так у меня и сделана загрузка дополнительных типов файлов, как у urisoft:D

 

Только у меня файлы отдаются не скриптом вроде attach.php, а по прямой ссылке на сам файл. Поэтому дополнительное поле 'attach_type' не понадобилось. Безопасность... ну, те типы, что разрешены, вроде безопасны ;) Имхо через attach.php отдавать правильней, но я на форуме столкнулась с проблемой. Пользователи загружают на форум видео. Потом просматривают его прямо в браузере, не закачивая предварительно к себе на диск. И шлют пулеметной очередью, несколько раз в секунду, однотипные запросы такого вида:

"GET /index.php?act=Attach&type=post&id=44444 HTTP/1.1" 200 12646

Что изрядно загружает сервер. Иногда даже до ошибки "Can't create a new thread (errno 11)". Счетчик количества просмотров видео при этом показывает цифры порядка несколько тысяч, что пугает пользователей :) Поэтому мне больше нравятся прямые ссылки на файлы, а не через скрипт, который, прежде чем отдать файл, авторизует пользователя по полной программе, как положено.

 

Кстати, как оказалось, у некоторых пользователей браузеры указывают нетрадиционные mime-types (выловлено из реальных запросов):

'image/x-png' => '.png'

'image/jpg' => '.jpg'

'audio/x-mpeg' => '.mp3'

'audio/mp3' => '.mp3'

Ссылка на комментарий
Поделиться на других сайтах

replicant
Чем так разительно отличается zip от doc или txt ... вот в чем заковырка-то!

Проверь mime_allowed.

mime на ZIP:

application/zip

application/x-zip-compressed

 

Все работает, раньше работало только из Opera, теперь работает и из IE , сенкс! Значит мод все же был правильно сделан! :D

 

Осталось разобраться только с MP3 почему он не загружается в IE.

Ссылка на комментарий
Поделиться на других сайтах

Гость
Эта тема закрыта для публикации сообщений.

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.