phpBB для WAP

Идеи для расширения функциональности phpBB 2.0.x
Аватара пользователя
InterActiv
phpBB 1.2.0
Сообщения: 10
Стаж: 19 лет 9 месяцев

Сообщение InterActiv »

[R: R@m$e$ :U] писал(а): интересно мод выглядит... =) поделишься? =)
Так я его переделал сам, не отличить от того что было, на это ушло очень много времени. Поделюсь, если ты мне поможешь.
Hellraiser
phpBB 2.0.1
Сообщения: 258
Стаж: 21 год

Сообщение Hellraiser »

http://www.mobilzone.org/phpbbWapGate2.0.1.zip

Почитать тут
http://www.phpbb.com/phpBB/viewtopic.ph ... ap&start=0
Поиск не только рулит и но и экономит 70$ :)

Халява cЭр.....
у меня одно время стоял, работал...
Аватара пользователя
InterActiv
phpBB 1.2.0
Сообщения: 10
Стаж: 19 лет 9 месяцев

Сообщение InterActiv »

Hellraiser

Знал бы я английский, давно бы там посмотрел :(
Аватара пользователя
Nikel
phpBB 2.0.5
Сообщения: 496
Стаж: 20 лет
Откуда: Киев

Сообщение Nikel »

InterActiv
Учится никогда не позно :D
Хочешь помочь коллеге- поделись опытом, хочешь помочь профессионалу-отойди и не мешай, хочешь помочь дураку... Сам дурак
Аватара пользователя
[R: R@m$e$ :U]
phpBB Maniac
Сообщения: 1464
Стаж: 20 лет 3 месяца
Откуда: Novosibirsk,RU

Сообщение [R: R@m$e$ :U] »

Mr. Anderson
посмотрим... =)
InterActiv
я наверно последую предложения Андресона... =) и сам буду писать... =) только потом... =)
Руководство пользователя | FAQ | Правила | Как устанавливать MOD'ы
ВОСПОЛЬЗУЙСЯ ПОИСКОМ, ТАМ ЕСТЬ БОЛЬШИНСТВО ОТВЕТОВ
ЕСЛИ НЕ ПОМОГЛО, ИСПОЛЬЗУЙ ШАБЛОН ЗАПРОСА, ПОМОГИ В РЕШЕНИИ ЗАДАЧИ
БЕСПЛАТНО ПОМОГУ ТОЛЬКО НА ФОРУМЕ!!! (ЛС НЕ В СЧЕТ)

Оставь благодарность, подтверди работоспособность совета.

ВСЕ ПРАВА НА МОДЫ ОТДАНЫ m157y
Аватара пользователя
Chemist
phpBB 1.4.2
Сообщения: 51
Стаж: 20 лет 1 месяц
Откуда: Москва

Сообщение Chemist »

Hellraiser писал(а):Почитать тут
http://www.phpbb.com/phpBB/viewtopic.ph ... ap&start=0
Поиск не только рулит и но и экономит 70$

Халява cЭр.....
у меня одно время стоял, работал...
Это не показатель, что стоял. Вот я себе поставил и настроил, но в нем все равно много ошибок.
Мод еще сырой и дело даже не в кодировке, а в парсинге тэгов к примеру.
InterActiv писал(а):Знал бы я английский, давно бы там посмотрел
Ничего интересного, скажу я тебе.
[R: R@m$e$ :U] писал(а):и сам буду писать... =) только потом... =)
ДАВАЙ! Только не затягивай. А я в тестеры записываюсь, вот!
Последние работы на elist.ws & motozone.ru!

Если фортуна повернулась к тебе задом... не теряйся!
Аватара пользователя
Егор Наклоняев
phpBB 2.0.4
Сообщения: 404
Стаж: 20 лет 6 месяцев
Откуда: оттуда

Сообщение Егор Наклоняев »

Я занимался этой проблемой и решил от неё отказаться.
Писателям на заметку.
1. WAP очень дорогое удовольствие. Серфинг по последним сообщениям встаёт в копеечку.
2. Максимальный размер с WAP-траницы, грубо говоря, 1Кб (зависит от телефона, но всяко не больше 1.5 Кб).
3. Русский язык делать нужно или перекодировкой в коды юникода или транслитом. Второе выгоднее, т.к. UTF-8 телефоны не понимают и требуют коды вида "&#xxx;", т.е. от 6 символов на русскую букву, соответственно (см. п.2) получается весьма много страниц на сообщение
4. HTTP-Идентификация возможна и работает для латинских ников.
------------------------
В качестве пищи для ума привожу простую переделку rss.php для работы с wap. Может кому пригодятся какие-нибудь идеи.


Файл wap.php

Код: Выделить всё

<?php
/***************************************************************************
*					wap.php
*				-------------------
*	copyright	: (c) 2004-2005, Egor Naklonyaeff
*	$Id: wap.php,v 0.0.1 2005/04/11 01:00:00 chyduskam Exp $
*
*
***************************************************************************/

/***************************************************************************
*
*   This program is free software; you can redistribute it and/or modify
*   it under the terms of the GNU General Public License as published by
*   the Free Software Foundation; either version 2 of the License, or
*   (at your option) any later version.
****************************************************************************/
define ('IN_PHPBB', true);
$phpbb_root_path = './';

$ProgName='RSS Feed 2.2.2';
$verinfo='V222';
//
// BEGIN Includes of phpBB scripts
//

include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);
include($phpbb_root_path . 'includes/bbcode.'.$phpEx);
include($phpbb_root_path . 'includes/rss_config.'.$phpEx);
include($phpbb_root_path . 'includes/rss_functions.'.$phpEx);
//
// END Includes of phpBB scripts
//
if(!defined('PAGE_RSS')) define('PAGE_RSS', PAGE_INDEX);
$deadline=0;
if(isset($HTTP_SERVER_VARS['HTTP_IF_MODIFIED_SINCE']))
{
    $deadline=strtotime($HTTP_SERVER_VARS['HTTP_IF_MODIFIED_SINCE']);
	if(CACHE_TIME>0) if((time()-$deadline)<CACHE_TIME)
	{
        ExitWithHeader("304 Not Modified");
	}
}
$sql= "SELECT MAX(post_time) as pt FROM ". POSTS_TABLE;
if ( !($result = $db->sql_query($sql)) )
	{
        ExitWithHeader("500 Internal Server Error","Error in obtaining post data");
	}
if( $row = $db->sql_fetchrow($result) )
{
    if($row['pt']<=$deadline) ExitWithHeader("304 Not Modified");
    $deadline=$row['pt'];
}


//
// gzip_compression
//
$do_gzip_compress = FALSE;
$useragent = (isset($HTTP_SERVER_VARS["HTTP_USER_AGENT"]) ) ? $HTTP_SERVER_VARS["HTTP_USER_AGENT"] : '';
if ( $board_config['gzip_compress'] )
{
	$phpver = phpversion();
	if ( $phpver >= '4.0.4pl1' && ( strstr($useragent,'compatible') || strstr($useragent,'Gecko') ) )
	{
		if ( extension_loaded('zlib') )
		{
			ob_start('ob_gzhandler');
		}
	}
	else if ( $phpver > '4.0' )
	{
		if ( strstr($HTTP_SERVER_VARS['HTTP_ACCEPT_ENCODING'], 'gzip') )
		{
			if ( extension_loaded('zlib') )
			{
				$do_gzip_compress = TRUE;
				ob_start();
				ob_implicit_flush(0);
 				header('Content-Encoding: gzip');
			}
		}
	}
}
// end gzip block

// How many posts do you want to returnd (count)?  Specified in the URL with "c=".  Defaults to 25, upper limit of 50.
$count = ( isset($HTTP_GET_VARS['c']) ) ? intval($HTTP_GET_VARS['c']) : 2;
$count = ( $count == 0 ) ? 1 : $count;
$count = ( $count > MAX_ITEMS ) ? MAX_ITEMS : $count;
// Which forum do you want posts from (forum_id)?  specified in the url with "f=".  Defaults to all (public) forums.
$forum_id = ( isset($HTTP_GET_VARS['f']) ) ? intval($HTTP_GET_VARS['f']) : '';
$no_limit=( isset($HTTP_GET_VARS['nolimit']) ) ? true : false;
$needlogin=( isset($HTTP_GET_VARS['login']) or isset($HTTP_GET_VARS['uid'])) ? true : false;

$sql_forum_where = ( !empty($forum_id) ) ? ' AND f.forum_id = ' . $forum_id : ' ';

// Return topics only, or all posts?  Specified in the URL with "t=".  Defaults to all posts (0).
$topics_only = (isset($HTTP_GET_VARS['t']) ) ? intval($HTTP_GET_VARS['t']) : 0;
$sql_topics_only_where = '';
if ( $topics_only == 1 )
{
	$sql_topics_only_where = 'AND p.post_id = t.topic_first_post_id';
}
//
// BEGIN Session management
//
// Check user
$user_id=($needlogin)? rss_get_user() : ANONYMOUS;
if($user_id==ANONYMOUS && AUTOLOGIN)
{
	$userdata = session_pagestart($user_ip, PAGE_RSS);
	$user_id=$userdata["user_id"];
}
else $userdata=rss_session_begin($user_id, $user_ip, PAGE_RSS);
init_userprefs($userdata);
$username=$userdata["username"];

//
// END session management
//

// Define censored word matches
$orig_word = array();
$replacement_word = array();
obtain_word_list($orig_word, $replacement_word);
//
// BEGIN Create main board information (some code borrowed from functions_post.php)
//

// Build URL components
$script_name = preg_replace('/^\/?(.*?)\/?$/', '\1', trim($board_config['script_path']));
$viewpost = ( $script_name != '' ) ? $script_name . '/viewtopic.' . $phpEx : 'viewtopic.'. $phpEx;
$replypost = ( $script_name != '' ) ? $script_name . '/posting.' . $phpEx.'?mode=quote' : 'posting.'. $phpEx.'?mode=quote';
$index = ( $script_name != '' ) ? $script_name . '/index.' . $phpEx : 'index.'. $phpEx;
$server_name = trim($board_config['server_name']);
$server_protocol = ( $board_config['cookie_secure'] ) ? 'https://' : 'http://';
$server_port = ( $board_config['server_port'] <> 80 ) ? ':' . trim($board_config['server_port']) . '/' : '/';
// Assemble URL components
$index_url = $server_protocol . $server_name . $server_port . (( $script_name != '' )? $script_name . '/':'');
$viewpost_url = $server_protocol . $server_name . $server_port . $viewpost;
$replypost_url =$server_protocol . $server_name . $server_port . $replypost;
// Reformat site name and description
$site_name = strip_tags($board_config['sitename']);
$site_description = strip_tags($board_config['site_desc']);
// Set the fully qualified url to your smilies folder
$smilies_path = $board_config['smilies_path'];
$smilies_url = $index_url . $smilies_path;
$smilies_path = preg_replace("/\//", "\/", $smilies_path);
//
// END Create main board information
//

// Auth check
$sql_forum_where="";
if($userdata['user_level']<>ADMIN)
{
	$is_auth = array();
	$is_auth = auth(AUTH_READ, AUTH_LIST_ALL, $userdata);
	if($forum_id=='') {
		while ( list($forumId, $auth_mode) = each($is_auth) )
		{
			if ( !$auth_mode['auth_read'] )
			{
				$unauthed .= ',' . $forumId;
			}
		}
	$sql_forum_where="AND f.forum_id NOT IN (" . $unauthed . ")";
	}
	else
	{
		if((!$is_auth[$forum_id]['auth_read']) or (strpos(",$unauthed," , ",$forum_id,")))
         {
          if($needlogin) ExitWithHeader("404 Not Found","This forum does not exists");
          else
          {
			header('Location: ' .$index_url.'rss.'.$phpEx.'?f='.$forum_id.(($no_limit)?'&nolimit':'').(isset($HTTP_GET_VARS['atom'])?'&atom':'').(isset($HTTP_GET_VARS['c'])?'&c='.$count:'').(isset($HTTP_GET_VARS['t'])?'&t='.$topics_only:'').(isset($HTTP_GET_VARS['styled'])?'&styled':'').'&login');
          	ExitWithHeader('301 Moved Permanently');
          }
		 }
		else $sql_forum_where = 'AND f.forum_id = ' . $forum_id;
	}
unset($is_auth);
}
elseif($forum_id!='')
{
	$sql_forum_where = 'AND f.forum_id = ' . $forum_id;
}

//
// BEGIN Initialise template
//
$template->set_filenames(array("body" => "wap_body.tpl"));
$verinfo.="W";
//
// END Initialise template
//
//
// BEGIN SQL statement to fetch active posts of allowed forums
//
$sql_limit_by_http='';
$MaxRecordAge=time()-MAX_WEEKS_AGO*604800;
$sql_limit_time=(MAX_WEEKS_AGO>0)?"p.post_time >".$MaxRecordAge:"1";
if (!$no_limit){
	if(isset($HTTP_SERVER_VARS['HTTP_IF_MODIFIED_SINCE'])) {
		$NotErrorFlag=true;
		$NotModifiedSince=strtotime($HTTP_SERVER_VARS['HTTP_IF_MODIFIED_SINCE']);
		if(SEE_MODIFYED) $sql_limit_by_http =  "AND (p.post_time > ".$NotModifiedSince." OR p.post_edit_time >".$NotModifiedSince." )";
		else if($NotModifiedSince>$MaxRecordAge) $sql_limit_time="p.post_time > ".$NotModifiedSince;
	}
}
$getdesc=($forum_id<>'')?'f.forum_desc,':'';
$sql = "SELECT f.forum_name,".$getdesc." t.topic_id, t.topic_title, u.user_id,
	 u.username, u.user_sig, u.user_sig_bbcode_uid,u.user_allowsmile, p.post_time,p.post_username, p.post_edit_time,
	 p.enable_sig,p.enable_smilies,p.enable_bbcode,p.enable_html,pt.*, t.topic_replies, t.topic_first_post_id
	FROM " . FORUMS_TABLE . " AS f, " . TOPICS_TABLE . " AS t, " . USERS_TABLE . " AS u, " . POSTS_TABLE . " AS p, " . POSTS_TEXT_TABLE . " as pt
	WHERE
            $sql_limit_time
            $sql_forum_where
            $sql_limit_by_http
            AND pt.post_id = p.post_id
			AND t.forum_id = f.forum_id
			AND p.poster_id = u.user_id
			AND p.topic_id = t.topic_id
			$sql_topics_only_where
	ORDER BY p.post_time DESC LIMIT $count";
$posts_query = $db->sql_query($sql);
//
// END SQL statement to fetch active posts of public forums
//

//
// BEGIN Query failure check
//
if ( !$posts_query )
{
  ExitWithHeader("500 Internal Server Error","Could not query list of active posts");
}

$allposts = $db->sql_fetchrowset($posts_query);
if(($forum_id<>'')&&(count($allposts) != 0)) {
      $site_name=strip_tags($allposts[0]["forum_name"]);
      $site_description=$allposts[0]["forum_desc"];
      }

//
// BEGIN Assign static variables to template
//
// Variable reassignment for Topic Replies
$l_topic_replies = $lang['Topic'] . ' ' . $lang['Replies'];
$user_lang=$userdata['user_lang'];
if(empty($user_lang))$user_lang=$board_config['default_lang'];
$template->assign_vars(array(
	'BOARD_TITLE' => win2utf($site_name),
	'PROGRAM' => $ProgName,
	'BOARD_DESCRIPTION' => win2utf($site_description),
	'L_AUTHOR' => win2utf($lang['Author']),
	'L_POSTED' => win2utf($lang['Posted']),
	'L_TOPIC_REPLIES' => win2utf($l_topic_replies),
	'L_POST' => win2utf($lang['Post']))
);
//
// END Assign static variabless to template
//
$LastPostTime=0;
if ( count($allposts) == 0 )
{
 	if($NotErrorFlag) ExitWithHeader("304 Not Modified");
}
else
{
//
// BEGIN "item" loop
//
	$PostCount=0;
	$SeenTopics=array();
	foreach ($allposts as $post)
	 {
		if( $post['post_time']>$LastPostTime) $LastPostTime=$post['post_time'];
		if( $post['post_edit_time']>$LastPostTime) $LastPostTime=$post['post_edit_time'];
		$topic_id=$post['topic_id'];
        $PostCount++;
        $SeenTopics["$topic_id"]++;
		// Variable reassignment and reformatting for post text
		$post_id=$post['post_id'];
	   	$post_subject = ( $post['post_subject'] != '' ) ? $post['post_subject'] : '';
        $message = $post['post_text'];
		$bbcode_uid = $post['bbcode_uid'];
		$user_sig = ( $post['enable_sig'] && $post['user_sig'] != '' && $board_config['allow_sig'] ) ? $post['user_sig'] : '';
		$user_sig_bbcode_uid = $post['user_sig_bbcode_uid'];
	//
	// If the board has HTML off but the post has HTML
	// on then we process it, else leave it alone
	//
	if ( !$board_config['allow_html'] )
	{
		if ( $user_sig != '' && $userdata['user_allowhtml'] )
		{
			$user_sig = preg_replace('#(<)([\/]?.*?)(>)#is', "<\\2>", $user_sig);
		}

		if ( $post['enable_html'] )
		{
			$message = preg_replace('#(<)([\/]?.*?)(>)#is', "<\\2>", $message);
		}
	}
	//
	// Parse message and/or sig for BBCode if reqd
	//
	if ( $board_config['allow_bbcode'] )
	{
		if ( $user_sig != '' && $user_sig_bbcode_uid != '' )
		{
			$user_sig = ( $board_config['allow_bbcode'] ) ? bbencode_second_pass($user_sig, $user_sig_bbcode_uid) : preg_replace('/\:[0-9a-z\:]+\]/si', ']', $user_sig);
		}

		if ( $bbcode_uid != '' )
		{
			$message = ( $board_config['allow_bbcode'] ) ? bbencode_second_pass($message, $bbcode_uid) : preg_replace('/\:[0-9a-z\:]+\]/si', ']', $message);
		}
	}

	if ( $user_sig != '' )
	{
		$user_sig = make_clickable($user_sig);
	}
	$message = make_clickable($message);

	//
	// Parse smilies
	//
	if ( $board_config['allow_smilies'] )
	{
		if ( $post['user_allowsmile'] && $user_sig != '' )
		{
			$user_sig = smilies_pass($user_sig);
			$user_sig = preg_replace("/$smilies_path/", $smilies_url, $user_sig);
		}

		if ( $post['enable_smilies'] )
		{
			$message = smilies_pass($message);
			$message = preg_replace("/$smilies_path/", $smilies_url, $message);
		}
	}
	//
	// Replace naughty words
	//
	if (count($orig_word))
	{
		$post_subject = preg_replace($orig_word, $replacement_word, $post_subject);

		if ($user_sig != '')
		{
			$user_sig = str_replace('\"', '"', substr(preg_replace('#(\>(((?>([^><]+|(?R)))*)\<))#se', "preg_replace(\$orig_word, \$replacement_word, '\\0')", '>' . $user_sig . '<'), 1, -1));
		}

		$message = str_replace('\"', '"', substr(preg_replace('#(\>(((?>([^><]+|(?R)))*)\<))#se', "preg_replace(\$orig_word, \$replacement_word, '\\0')", '>' . $message . '<'), 1, -1));
	}

	//
	// Replace newlines (we use this rather than nl2br because
	// till recently it wasn't XHTML compliant)
	//
	if ( $user_sig != '' )
	{
		$user_sig = '________________<br />' . str_replace("\n", "\n<br />\n", $user_sig);
	}

	$message = str_replace("\n", "\n<br />\n", $message);
		if ( $post_subject != '' )
		{
			$post_subject = htmlspecialchars($lang['Subject'].': '.$post_subject.'<br />');
		}
		// Variable reassignment for topic title, and show whether it is the start of topic, or a reply
		$topic_title = $post['topic_title'];
		if ( $post['post_id'] != $post['topic_first_post_id'] )
		{
			$topic_title = 'RE: ' . $topic_title;
		}
		// Variable reassignment and reformatting for author
		$author = $post['username'];
		$author0 =$author;
		if ( $post['user_id'] != -1 )
		{
			 $author = '<a href="' . $index_url . 'profile.' . $phpEx . '?mode=viewprofile&u=' . $post['user_id'] . '" target="_blank">'
			 . $author . '</a>';
		}
		else
		{
			// Uncomment next string if you want or $author0=='Anonymus'.
			//  $author0= $post['post_username'];
		    $author= $post['post_username'];
		}
		$author = make_clickable($author);
		// Assign "item" variables to template
		$template->assign_block_vars('post_item', array(
			'CARD_ID' =>  'C' . $PostCount,
			'NEXT_CARD'=> '<do type="accept" label="NEXT"><go href="#C'.($PostCount+1).' "/></do>',
			'PREV_CARD'=> '<do type="accept" label="PREV"><go href="#C'.($PostCount-1).' "/></do>',
            'TOPIC_TITLE' =>win2utf($topic_title),
			'AUTHOR' => win2utf($author),
			'POST_TIME' => create_date($board_config['default_dateformat'], $post['post_time'], $board_config['board_timezone']).' (GMT ' . $board_config['board_timezone'] . ')',
			'POST_SUBJECT' => win2utf($post_subject),
			'FORUM_NAME' => win2utf($post['forum_name']),
			'POST_TEXT' => win2utf(preg_replace('|[\x00-\x08\x0B\x0C\x0E-\x1f]|','',$message)),
			'USER_SIG' => win2utf($user_sig),
			)
		);
	}
//
// END "item" loop
//
if($user_id!=ANONYMOUS && UPDATE_VIEW_COUNT)
{
    $updlist='';
	foreach ($SeenTopics as $topic_id=>$tcount)
	{
        $updlist.=(empty($updlist))? $topic_id : ",".$topic_id;
		if(defined('TOPIC_VIEW_TABLE') and AUTO_WVT_MOD)
		{
	        $sql='UPDATE '.TOPIC_VIEW_TABLE.' SET topic_id="'.$topic_id.'", view_time="'.time().'", view_count=view_count+1 WHERE topic_id='.$topic_id.' AND user_id='.$user_id;
			if ( !$db->sql_query($sql) || !$db->sql_affectedrows() )
			{
				$sql = 'INSERT IGNORE INTO '.TOPIC_VIEW_TABLE.' (topic_id, user_id, view_time,view_count)
				VALUES ('.$topic_id.', "'.$user_id.'", "'.time().'","1")';
				if ( !($db->sql_query($sql)) )
				{
					ExitWithHeader("500 Internal Server Error",'Error create user view topic information');
				}
			}
		}
		// End add - Who viewed a topic MOD
    }
    if($updlist!='')
    {
        //
		// Update the topic view counter
		//
		$sql = "UPDATE " . TOPICS_TABLE . "
		SET topic_views = topic_views + 1
		WHERE topic_id IN ($updlist)";
		if ( !$db->sql_query($sql) )
		{
			ExitWithHeader("500 Internal Server Error","Could not update topic views");
		}
    }
}
        // LAstvisit MOD
        if(LV_MOD_INSTALLED and $user_id!=ANONYMOUS){
		 $sql = "UPDATE " . USERS_TABLE . "
		  SET user_totalpages=user_totalpages+$PostCount
          WHERE user_id = $user_id";
		  if ( !$db->sql_query($sql) )
		{
			ExitWithHeader("500 Internal Server Error",'Error updating user totalpages ');
		}}
}
// Check for E-Tag
if($LastPostTime==0) $LastPostTime=$deadline;
$MyETag='"RSS'.gmdate("YmdHis", $LastPostTime).$verinfo.'"';
$MyGMTtime=gmdate("D, d M Y H:i:s", $LastPostTime)." GMT";
if(isset($HTTP_SERVER_VARS['HTTP_IF_NONE_MATCH'])&& ($HTTP_SERVER_VARS['HTTP_IF_NONE_MATCH']== $MyETag)) ExitWithHeader("304 Not Modified");
if(isset($HTTP_SERVER_VARS['HTTP_IF_MODIFIED_SINCE']) && ($HTTP_SERVER_VARS['HTTP_IF_MODIFIED_SINCE'] == $MyGMTtime)) ExitWithHeader("304 Not Modified");

//
// BEGIN XML and nocaching headers (copied from page_header.php)
//

header("Last-Modified: ".$MyGMTtime);
header("Etag: ".$MyETag);
header("Expires: ".gmdate("D, d M Y H:i:s", time())." GMT");
header ('Content-Type: text/vnd.wap.wml; charset=utf-8');
//
// End XML and nocaching headers
//
//
// BEGIN Output XML page
//
$template->pparse('body');
//
// END Output XML page
//
$db->sql_close();
//
// Compress buffered output if required and send to browser
//
if ( $do_gzip_compress )
{
	//
	// Borrowed from php.net!
	//
	$gzip_contents = ob_get_contents();
	ob_end_clean();

	$gzip_size = strlen($gzip_contents);
	$gzip_crc = crc32($gzip_contents);

	$gzip_contents = gzcompress($gzip_contents, 9);
	$gzip_contents = substr($gzip_contents, 0, strlen($gzip_contents) - 4);

	echo "\x1f\x8b\x08\x00\x00\x00\x00\x00";
	echo $gzip_contents;
	echo pack('V', $gzip_crc);
	echo pack('V', $gzip_size);
}
exit;
function win2utf($s)    {
$s=str_replace('<br />','~~~',$s);$s=strip_tags($s);$s=htmlspecialchars($s);$s=str_replace('~~~','<br />',$s);
$s=strtr($s,"АБВГДЕЗИЙКЛМНОПРСТУФЦЪЫЬабвгдезийклмнопрстуфцъыь","ABVGDEZIJKLMNOPRSTUFC\"Y'abvgdezijklmnoprstufc\"y'");
$doit=array('Ё'=>'JO','Ж'=>'ZH','Х'=>'KH','Ч'=>'CH','Ш'=>'SH','Щ'=>'SHCH','Э'=>'EH','Ю'=>'JU','Я'=>'JA','ё'=>'jo','ж'=>'zh','х'=>'kh','ч'=>'ch','ш'=>'sh','щ'=>'shch','э'=>'eh','ю'=>'ju','я'=>'ja');
$s=strtr($s,$doit);
$s=preg_replace('|[\x00-\x08\x0B\x0C\x0E-\x1f\x80-\xff]|','',$s);
return $s;
/*   for($i=0,$m=strlen($s); $i < $m; $i++)    {
        $c=ord($s[$i]);
        if ($c<=127) {$t.=chr($c); continue; }
        if ($c>=192) {$t.="&#".(848+$c).";"; continue; }
    }
    return $t; */
}

?>
Пример файла wap_body.tpl

Код: Выделить всё

<?xml version="1.0"?><!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"><wml><card id="C0" title="{BOARD_TITLE}"><p>{BOARD_DESCRIPTION}</p><do type="accept" label="NEXT"><go href="#C1" /></do></card>

<!-- BEGIN post_item -->

<card id="{post_item.CARD_ID}" title="{post_item.FORUM_NAME} :: {post_item.TOPIC_TITLE}"><p>{post_item.PREV_CARD}:{post_item.NEXT_CARD}</p><p>{L_AUTHOR}:{post_item.AUTHOR}<br />{post_item.POST_SUBJECT}<br />{L_POSTED}: {post_item.POST_TIME}</p><p>{post_item.POST_TEXT}{post_item.USER_SIG}</p></card>

<!-- END post_item -->

</wml>
Ну и на закуску полезная функция

Код: Выделить всё

function waptranslit($s)    {
$s=str_replace('<br />','~~~',$s);$s=strip_tags($s);$s=htmlspecialchars($s);$s=str_replace('~~~','<br />',$s);
$s=strtr($s,"АБВГДЕЗИЙКЛМНОПРСТУФЦЪЫЬабвгдезийклмнопрстуфцъыь","ABVGDEZIJKLMNOPRSTUFC\"Y'abvgdezijklmnoprstufc\"y'");
$doit=array('Ё'=>'JO','Ж'=>'ZH','Х'=>'KH','Ч'=>'CH','Ш'=>'SH','Щ'=>'SHCH','Э'=>'EH','Ю'=>'JU','Я'=>'JA','ё'=>'jo','ж'=>'zh','х'=>'kh','ч'=>'ch','ш'=>'sh','щ'=>'shch','э'=>'eh','ю'=>'ju','я'=>'ja');
$s=strtr($s,$doit);
$s=preg_replace('|[\x00-\x08\x0B\x0C\x0E-\x1f\x80-\xff]|','',$s);
return $s;
}
Дерзайте!

Добавлено спустя 2 минуты 19 секунд:

P.S. Лично я отбыл в отпуск, посему в обсуждении принимать участие не буду...
Аватара пользователя
Chemist
phpBB 1.4.2
Сообщения: 51
Стаж: 20 лет 1 месяц
Откуда: Москва

Сообщение Chemist »

Егор Наклоняев писал(а):function win2utf и function waptranslit
делают одно и тоже, не смотря на разные названия: гонят все в транслит.
аwin в юникод делается одной встроенной функцией

Код: Выделить всё

$str = iconv('windows-1251', 'utf-8', $str);
Последние работы на elist.ws & motozone.ru!

Если фортуна повернулась к тебе задом... не теряйся!
Аватара пользователя
VVVas
Former team member
Сообщения: 4463
Стаж: 20 лет 5 месяцев
Поблагодарили: 1 раз

Сообщение VVVas »

Chemist
Егор Наклоняев писал(а):3. Русский язык делать нужно или перекодировкой в коды юникода или транслитом. Второе выгоднее, т.к. UTF-8 телефоны не понимают и требуют коды вида "&#xxx;", т.е. от 6 символов на русскую букву, соответственно (см. п.2) получается весьма много страниц на сообщение
я люблю daft punk | новый sugoi.ru
Аватара пользователя
Chemist
phpBB 1.4.2
Сообщения: 51
Стаж: 20 лет 1 месяц
Откуда: Москва

Сообщение Chemist »

И что? Я по-русски читаю нормально.
VVVas, Вы мою мысль уловили? Видимо нет: одна и та же функция называется по разному. Хотя делает одно и тоже win -> translit (см. мой пост выше).
Я совершенно не касаюсь пункта 3 и того, что выгоднее, а что нет.
Последние работы на elist.ws & motozone.ru!

Если фортуна повернулась к тебе задом... не теряйся!
Аватара пользователя
[R: R@m$e$ :U]
phpBB Maniac
Сообщения: 1464
Стаж: 20 лет 3 месяца
Откуда: Novosibirsk,RU

Сообщение [R: R@m$e$ :U] »

Chemist
это если включен php_iconv.dll но это есть не у всех....
Руководство пользователя | FAQ | Правила | Как устанавливать MOD'ы
ВОСПОЛЬЗУЙСЯ ПОИСКОМ, ТАМ ЕСТЬ БОЛЬШИНСТВО ОТВЕТОВ
ЕСЛИ НЕ ПОМОГЛО, ИСПОЛЬЗУЙ ШАБЛОН ЗАПРОСА, ПОМОГИ В РЕШЕНИИ ЗАДАЧИ
БЕСПЛАТНО ПОМОГУ ТОЛЬКО НА ФОРУМЕ!!! (ЛС НЕ В СЧЕТ)

Оставь благодарность, подтверди работоспособность совета.

ВСЕ ПРАВА НА МОДЫ ОТДАНЫ m157y
Аватара пользователя
InterActiv
phpBB 1.2.0
Сообщения: 10
Стаж: 19 лет 9 месяцев

Сообщение InterActiv »

Егор Наклоняев писал(а): 1. WAP очень дорогое удовольствие. Серфинг по последним сообщениям встаёт в копеечку.
Есть такие тарифы, где за wap оплачивается только а/п
2. Максимальный размер с WAP-траницы, грубо говоря, 1Кб (зависит от телефона, но всяко не больше 1.5 Кб).
Я на своём сайте, так же как и нафоруме, делаю страницы до 5 кб (1,5 кб это уже давно забыто, сейчас мобилы держут и 10 кб)
3. Русский язык делать нужно или перекодировкой в коды юникода или транслитом. Второе выгоднее, т.к. UTF-8 телефоны не понимают и требуют коды вида "&#xxx;", т.е. от 6 символов на русскую букву, соответственно (см. п.2) получается весьма много страниц на сообщение
Кто сказал что UTF-8 мобилы не понимают, весь мой сайт сделан в этой кодировке, проблем с этим нету
4. HTTP-Идентификация возможна и работает для латинских ников.
Русские ники тоже работают
Erlang
phpBB 2.0.15
Сообщения: 1033
Стаж: 20 лет 9 месяцев
Откуда: Москва
Благодарил (а): 207 раз
Поблагодарили: 4 раза

Сообщение Erlang »

Hellraiser писал(а):http://www.mobilzone.org/phpbbWapGate2.0.1.zip

Почитать тут
http://www.phpbb.com/phpBB/viewtopic.ph ... ap&start=0
Поиск не только рулит и но и экономит 70$ :)

Халява cЭр.....
у меня одно время стоял, работал...
Посмотрите этот МОД в работе по русски: http://electrosviaz.com/forum/wap/wap.php

Правда проблема со второй шкуркой.
С уважением,
Сергей
Anonymous

Сообщение Anonymous »

Простите, можно по полочкам - как всё это ставить?
Мне без описания никак ... :?
sergey10
phpBB 1.0.0
Сообщения: 8
Стаж: 19 лет 6 месяцев

Сообщение sergey10 »

Erlang писал(а):
Hellraiser писал(а):http://www.mobilzone.org/phpbbWapGate2.0.1.zip

Почитать тут
http://www.phpbb.com/phpBB/viewtopic.ph ... ap&start=0
Поиск не только рулит и но и экономит 70$ :)

Халява cЭр.....
у меня одно время стоял, работал...
Посмотрите этот МОД в работе по русски: http://electrosviaz.com/forum/wap/wap.php

Правда проблема со второй шкуркой.
Ну и что? Я тоже поставил себе такой, тоже первое впечатление создалось хорошее... думаю: во! нашел наконец.... а не тут-то было, во-первых, поглядите чего он выводит на экран, когда вы делаете "Редактировать" или "Ответить" всякую белеберду выводит. Притом создать сообщение на русском вы просто не сможете. Он его проглатывает, и показывает "0".
На мой взгляд самый удачный вариант все-таки модернезированный phpBB2.0.0-WAP-v2.0, которого демо-ссылоску давали вначале: http://forum.erawap.ru/wap/ Однако он у меня коцает некоторые русские буквы :-(
И еще, одна, думаю наиболее печальная вешь. Нигде в аналогичных скриптах нет возможности региться :-( Говорят, что это небезопасно, однако, думаю для небольших сайтов можно использовать. Думаю никто не станет взламывать форум с порой десятков пользователей.

Вернуться в «Запросы модов для phpBB 2.0.x»