2005年10月05日

渡す変数の文字コード変換

先日、「Google Maps にリンク」で書きましたように、地図にリンクをして所在地が分かりやすいようにというのをつくっていました。

しかし、さすがはBETA版(。。「さすがは」という日本語は変だな。。)改良・改善・修正が行われているようで、渡していた変数がうまくいかなくなりました。。がっくし。

googl に変数を渡す場合「p=」の後に変数を続ければよいのですが、通常この変数はエンコードして渡します。
ためしの段階では「SJIS」でエンコードしていましたから通常「UTF-8」で受け取る google に「SJIS」でエンコードしてますよーって教えてあげる為に「ie=SJIS&」をつけて渡せばきちんと認識してくれていました。
しかし、今回の修正でこの変数の渡し方ではうまくいかなくなってしまいました。

仕方ないなぁ、UTF-8でエンコードして渡すのがスマートなんだろうなぁ。。

ちゅうわけで、エンコード部分の修正です。
サーバに Jcode.pmモジュール(Jcode-0.83_1) がインストールされているので出来る技なのかもしれません。

foreach(@map){
{local($encomap=$_);
$encomap=~s/(\W)/'%' . unpack('H2',$1)/eg;
}
foreach(@map){
{local($encomap=$_);
use Jcode; # Jcode.pmモジュールの読み込み
&Jcode::convert(\$encomap,'utf8'); # 頭の j を大文字の J にします

$encomap=~s/(\W)/'%' . unpack('H2',$1)/eg;
}

もちろん渡すときの「ie=SJIS&」は外します。

HTML, CGIでの文字コード指定について ≫CGIでの明示方法 を参考

変数の文字コードをUTF-8に変換してからURLエンコードします。。たぶん。。あんまり分かってないかも(W

<参照>
(UTF-8の場合)
千代田区永田町1-7-1
(SJISの場合)。。たぶん地図は表示されません。
千代田区永田町1-7-1

投稿者 : 09:34 | コメント (0) | トラックバック

2005年09月15日

Google Maps にリンク

結構、ログをみていると治療施設を探している方が多いように思う腰痛やヘルニア関連。

腰椎椎間板ヘルニアになっちゃいました」の体験談だけではなく、各都道府県の医療機関リンクをつくって訪問者の流れをつくってみることにしよう!
と思い立って作っていた「Hernia Links」。

各機関の所在地も記入していたが、なんか全部記入するのは長いような気がしていて○丁目○番地○号あたりは省いていた(これが後で大変後悔。。)

別のところで、
Google、検索結果に地図へのリンクを表示
という記事を見て、あぁ。。地図にリンクをしておけば使い勝手いいんちゃう?って思いつくの遅せぇ。。

ということで、管理者コメントで記入していた住所にリンクを作るようシステム改造した。
ココからは、おもいっきり自分の覚え書き♪

template/kt.html と template/search.html

if($Slog[7]){
print<<"<!--HTML-->";
<tr>
<td width="3"></td>
<td colspan="2"><font id="kanri">$Slog[7]</font></td>
</tr>
<!--HTML-->
#<!--(↓修正不可↓)
}
if($Slog[7]){
print<<"<!--HTML-->";
<tr>
<td width="3"></td>
<td colspan="2"><font id="kanri"><IMG src="$EST{home}img/map.gif" width="36" height="13" border="0" align="left" alt="$Slog[1]_地図">
<!--HTML-->
@map=split(/¥/,$Slog[7]);
foreach(@map){
{local($encomap=$_);
$encomap=~s/(\W)/'%' . unpack('H2',$1)/eg;
}
if(length($_) > 6){
print "<<a href=\"http://maps.google.co.jp/maps?ie=SJIS&q=$encomap\" target=\"_blank\" rel=\"nofollow\">";
print $_;
print "</a>>";
}
else{
print $_;
}
}
print<<"<!--HTML-->";
</font></td>
</tr>
<!--HTML-->
#<!--(↓修正不可↓)
}

regist_ys.cgi

$PR_data=<<"EOM";
<div class="sub_bar">[登録データ]</div>
<table width="336" summary="$Tlog[1] サイト情報"><tr><td>
■タイトル:<br><a href="$Tlog[2]"><strong><b>$Tlog[1]</b></strong></a><br>
■URL:<br><a href="$Tlog[2]"><font size="1" color="#008000" style="text-decoration:none" title="$Tlog[1]">$Tlog[2]</font></a><br>
■紹介文:<br>$Tlog[6]
<br><br>$Tlog[7]
</td></tr>
</table>
EOM
if($Tlog[7]){
@map=split(/¥/,$Tlog[7]);
foreach(@map){
{local($encomap=$_);
$encomap=~s/(\W)/'%' . unpack('H2',$1)/eg;
}
if(length($_) > 6){
$map_data=$map_data."<br><<a href=\"http://maps.google.co.jp/maps?ie=SJIS&q=$encomap\" target=\"_blank\" rel=\"nofollow\">".$_."</a>>";
}
else{
$map_data=$map_data.$_;
}
}
$map_data="<IMG src=\"$EST{home}img/map.gif\" width=\"36\" height=\"13\" border=\"0\" align=\"left\" alt=\"$Tlog[1]_地図\">".$map_data;
}

$PR_data=<<"EOM";
<div class="sub_bar">[登録データ]</div>
<table width="336" summary="$Tlog[1] サイト情報"><tr><td>
■タイトル:<br><a href="$Tlog[2]"><strong><b>$Tlog[1]</b></strong></a><br>
■URL:<br><a href="$Tlog[2]"><font size="1" color="#008000" style="text-decoration:none" title="$Tlog[1]">$Tlog[2]</font></a><br>
■紹介文:<br>$Tlog[6]
<br>$map_data<br><br>
</td></tr>
</table>
EOM

という感じ。。まぁ、わかんない人には全然わかんないな。。っと。
最初に書いたが、住所は最初から全部記入しとけばよかった。。二度手間だ。。

投稿者 : 21:31 | コメント (0) | トラックバック

2005年07月08日

スパム登録制限機能をYomi-Searchに

またまた、PHP版ではなくてcgi版の改造。。改造といってもオフィシャルのサイトに公開されているアドインを改造している Yomi-Search に組み込む作業です。

YomiSearch::SpamRegistCheck [スパム登録制限機能]

開設してしばらく経ちました「建設@リサイクル」ですが、PRが4なこともあり?スパム登録の標的になってしまうこともあるのかもしれません。結構ウザイ登録がきます。ピンクなものから、ブラックなものまで。。

登録プレビュー画面を通さない登録を弾くような。。「コメントスパム対策 MTHash」のようなものが出来ないか、いっそ自作でもしようかと思って探していたら なんと灯台下暗し。。本家にアドインが紹介されていました。

作業は説明のページを読みつつ済ませてみました。。実際ちゃんと弾くかどうか試すことが出来ない(泣。しばらく放置したらいいかな?とりあえず自動登録ソフト等を使っているのか?と思われるもの、例えば登録代行業者の大量登録などを弾いてくれると助かります。

うまくスパム登録制限してくれるようなら是非PHP版も。。誰か作ってくんないかな?

投稿者 : 17:37 | コメント (0) | トラックバック

2005年06月09日

Sitemaps@Yomi-Search テンプレ

サイトマップをGoogleに提出。。ウマァー?!」で書いたようにcgi版 Yomi-Search
の Google Sitemaps 用 XML を作成するテンプレをつくってみた。

カテゴリ設定をした際に html のサイトマップがつくられるが、そのときに一緒につくるようにしよう。
/templateに新しく「xmlsitemap.html」 をつくる。名前は自由に。。

/template/xmlsitemap.html

print<<"<!--HTML-->";
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.google.com/schemas/sitemap/0.84">
<!--HTML-->

#<!--(↓修正不可↓)
print "<url>\n<loc>$EST{home}</loc>\n<changefreq>daily</changefreq>\n<priority>1.0</priority>\n</url>\n";
# (↑修正不可↑)-->

#<!--(↓修正不可↓)
&gane_guide; #説明文をロード
foreach(sort keys %ganes){
print "<url>\n";
if(index($_,"_")<0){ #トップカテゴリの場合
print "<loc>$Ekt$_$Eend</loc>\n";
print "<changefreq>weekly</changefreq>\n";
}
else{
print "<loc>$Ekt$_$Eend</loc>\n";
print "<changefreq>weekly</changefreq>\n";
}
print "</url>\n";
}
# (↑修正不可↑)-->

print<<"<!--HTML-->";

</urlset>
<!--HTML-->
#<!--(↓修正不可↓)

1;
# (↑修正不可↑)-->

記述を見ていただくと分かるようにファイル更新日は拾えない(爆
まぁ、「URLを拾ってね」程度の XMLです。

admin.cgi のサブルーチン(1828行当たり??)にXML作成行を追加

修正前。。は確かこんな感じ。

sub sitemap_make{
#(cfg6)サイトマップを作成(&sitemap_make)
open(OUT,">$EST{html_path}sitemap.html");
select(OUT);
require "$EST{temp_path}sitemap.html";
select(stdout);
close(OUT);
}
修正後

sub sitemap_make{
#(cfg6)サイトマップを作成(&sitemap_make)
open(OUT,">$EST{html_path}sitemap.html");
select(OUT);
require "$EST{temp_path}sitemap.html";
select(stdout);
close(OUT);
open(OUT,">$EST{html_path}sitemap.xml");
select(OUT);
require "$EST{temp_path}xmlsitemap.html";
select(stdout);
close(OUT);

}

●もっといい感じにチューニングされたテンプレ求む!!

投稿者 : 14:47 | コメント (0) | トラックバック

2005年04月18日

Yomi-Search[xoops]マークの追加

Yomi-Searchには標準でm1「おすすめ」とm2「相互リンク」というマークを
つけられるようになっています。

cgi版はマークを追加する改造について掲示板などで紹介されてありましたが
XOOPS版のYomi-Searchにおいてマークを追加するやり方は見つけられませんでした。

いろいろやってみました。
改造したものを、さらに改造していますし、覚え書きですので記載忘れもあるかも。。

うちのサイトのm3は。。あまり深く追求しないでください。

<以下はこちらの環境に合わせて改造しています>


admin.php
regist_ys.php
/template/admin/temp_to_regist.html
※複数箇所あるのですべて

修正前
for($i=1; $i <= 2; $i++){ #←マーク数を増やす場合には修正
修正後
for($i=1; $i <= 3; $i++){ #←マーク数を増やす場合には修正

index.php

修正前
else if ($match[1] == "m2") $_GET['mode'] = "m2"
else
{
修正後
else if ($match[1] == "m2") $_GET['mode'] = "m2"
else if ($match[1] == "m3") $_GET['mode'] = "m3"
else
{
修正前
elseif($_GET['mode'] == &m2"){$Stitle="おすすめサイト"
$Spre_kt_file="m2_ys"} #m2サイトの表示タイトル,ファイル名
elseif($_GET['mode'] == "random"){random();} #ランダムジャンプ
修正後
elseif($_GET['mode'] == "m2"){$Stitle="おすすめサイト"
$Spre_kt_file="m2_ys"} #m2サイトの表示タイトル,ファイル名
elseif($_GET['mode'] == "m3"){$Stitle="追加マーク"
$Spre_kt_file="m3_ys"} #m3サイトの表示タイトル,ファイル名

elseif($_GET['mode'] == "random"){random();} #ランダムジャンプ

/template/admin/cfg_lib.php

修正前
'name_m2'=>'$EST[name_m2]',
'name_rank'=>'$EST[name_rank]',
修正後
'name_m2'=>'$EST[name_m2]',
'name_m3'=>'$EST[name_m3]',
'name_rank'=>'$EST[name_rank]',

/template/admin/config.html

修正前
<li><b>相互リンク</b><br>
<ul><input type=text name=name_m2 value="<?=$EST['name_m2']?>" size=20></ul>
<li><b>人気ランキング</b><br>
<ul><input type=text name=name_rank value="<?=$EST['name_rank']?>" size=20></ul>
修正後
<li><b>相互リンク</b><br>
<ul><input type=text name=name_m2 value="<?=$EST['name_m2']?>" size=20></ul>
<li><b>追加マーク</b><br>
<ul><input type=text name=name_m3 value="<?=$EST['name_m3']?>" size=20></ul>

<li><b>人気ランキング</b><br>
<ul><input type=text name=name_rank value="<?=$EST['name_rank']?>" size=20></ul>

/template/admin/config_kt.html

修正前
$ganes['m2_ys']=$EST['name_m2'];
$ganes['rank']=$EST['name_rank'];
修正後
$ganes['m2_ys']=$EST['name_m2'];
$ganes['m3_ys']=$EST['name_m3'];
$ganes['rank']=$EST['name_rank'];

/pl/temp.php

##アイコン付加(&put_icon) の部分にm3に対応したマーク画像追加の部分を追加
if($mark[2]){
##m3マーク(追加マーク)
?>
<a href="<?=$EST['script']?>/m3.html">
<img src="<?=$EST['img_path_url']?>m3.gif" alt="<?=$EST['name_m3']?>" align="bottom" /></a>
<?php
}

「um3.gif」など画像を準備しておく。
たぶんこの辺まではcgi版とかでマーク追加している方は同様なので分かると思う。。


/sql/yomi.sql
※マークは「0_0」からm3ひとつ増やして「0_0_0」になるので(3)から(5)になる

修正前
`url` varchar(255) default NULL,
`mark` char(3) default NULL,
`last_time` varchar(21) default NULL,
修正後
`url` varchar(255) default NULL,
`mark` char(5) default NULL,
`last_time` varchar(21) default NULL,

/template/kt.html
※マークによる表示データの選別
マークは「0_0」からm3ひとつ増やして「0_0_0」になるので「%」の複数任意文字ではなく、一文字任意の「_」を使う。つなぎの「_」は「\」エスケープで対応。詳しくは、「LIKE」で。。

修正前
} elseif($_GET['mode'] == 'm1') {
$query = " mark LIKE '1%'";
} elseif($_GET['mode'] == 'm2') {
$query = " mark LIKE '%1'";
} else {echo "STOP in temp.php in 245"; exit;}
修正後
} elseif($_GET['mode'] == 'm1') {
$query = " mark LIKE '1\__\__'";
} elseif($_GET['mode'] == 'm2') {
$query = " mark LIKE '_\_1\__'";
} elseif($_GET['mode'] == 'm3') {
$query = " mark LIKE '_\__\_1'";

} else {echo "STOP in temp.php in 245"; exit;}

以上基本的なところの改造です。
メニューやブロックのところも追加したい場合は他にも修正が必要なファイルがあると
思います。もっとマークを増やしたい場合はこれの応用で。。
(マークが10個を超えたらcgi版のように不具合が出る?!かもしれません。。不明)

投稿者 : 15:21 | コメント (4) | トラックバック

2005年02月28日

HTML構文チェックをやってみた

こちらのサイトでも前にやったHTML構文チェックをやってみた。

良縁ネット」のTOPは少し前にチェックしていて大体修正し
W3CのOKは出るところまではしておいたのですが。。

Yomiのディレクトリは最悪でした。。
まぁ、またまたこつこつやってある程度のところまでできたわけですがスタイルシートの読み込み

<link rel="stylesheet" href="<?=$EST['html_path_url']?>style.css" type="text/css">

がどうしてもbody中に入って困ってました。

いろいろネットで調べて(簡単に書いてますが結構大変でしたがね)
モジュールのスタイルシートをヘッダに読み込ませる処理を追加しました。

●yomi\header.php
// headタグ内出力
$xoopsTpl->assign("xoops_module_header",
'<link rel="stylesheet" href="http://good-match.net/modules/yomi/html/style.css" type="text/css" />
');

を追記しました。 ただし使っているテーマのテンプレートファイル(theme.html)の
<head>~</head>内に <{$xoops_module_header}> という記述がいります。
(僕の場合最初からありましたので。。)

href=のあとは変数?にしておきたかったですが何にしていいか分からず絶対値
を入れちまいました。
他のところもコツコツ修正し、だいたい構文チェックOK!ではないでしょうか

まぁ、100点にはこだわらないんです(爆。

投稿者 : 21:51 | コメント (0) | トラックバック

2005年02月08日

Yomi-Search[友達に紹介]

Yomi-Search[友達に紹介]のmailtoでメールをしようとするとどうも文字化け
してました。

ので修正です。

●/pl/mail_ys.php 281行目 mb_language ("ja"); の後あたりに追加
   mb_internal_encoding("EUC-JP");

一応僕のところはこれで文字化けがなおりました。。たぶん。
かなり前に対策をしたのでうろ覚えです。

投稿者 : 22:03 | コメント (0) | トラックバック

2005年01月31日

Yomi-Search[xoops]静的ページ

ディレクトリー形の検索エンジンを構築するのにYomi-Searchというプログラムがあります。非常にカスタマイズ製に優れ機能も優れていると思っています(使いこなせているかどうかは別。。)。で、気に入って使わせていただいてます。

オリジナルのcgiバージョン。php化されたバージョン。さらにそれをxoopsモジュール化したバージョンとあるようです。オリジナル(別サイトで)とxoopsモジュールのバージョンを使わせていただいています。

いろいろなランキング機能なんかが付いているようですが、自分的にはSEO用で役立てればいいなぁってことでシンプルにページ、リンクとも作成しています。

しかし、xoops版は作成した各カテゴリーのページを静的ページで作成切り替えができませんでした。こりゃぁ、もったいない。。改造しちまおう(W。。最近こんなんばっか。

でやっぱり「PATH_INFO」使用。。(注意)たぶん書き足りない。。もっといろいろ変更したように思う。。が、覚え書きしてないので下記分のみ。しかも、かなり分かりにくい書き方です。

●temp.php の変更

$Ekt="$EST[script]?mode=kt&kt="; $Eend="";
$Ekt="$EST[script]/kt/"; $Eend=".html";

$mode = "?mode=";
$mode = "/";

$mode = "?mode=kt&kt=";
$mode = "/kt/";

●yomi_block.php の変更

$Ekt = XOOPS_URL."/modules/yomi/".$EST['script']."?mode=kt&kt=";
$Ekt = $EST['script']."/kt/";

$yomi_new_tag = XOOPS_URL."/modules/yomi/".$EST['script']."/new.html";
$yomi_new_tag = $EST['script']."/new.html";

<a href=\"".$Ekt.$bf_kt_no."\">
<a href=\"".$Ekt.$bf_kt_no.".html\">

<a href=\"".$Ekt.$Gnos."\">
<a href=\"".$Ekt.$Gnos.".html\">

<a href=\"".$Ekt.$Gnos."\">
<a href=\"".$Ekt.$Gnos.".html\">

<a href=\"".$Ekt.$bf_kt_no."\">
<a href=\"".$Ekt.$bf_kt_no.".html\">

●index.php(dir.php) に追加 (たぶんこれが一番重要)

if($_SERVER['ORIG_PATH_INFO']){
$query = $_SERVER['ORIG_PATH_INFO'];
$var = split ("[/\.]", $query);
$_GET['mode'] = $var[1];
$_GET['kt'] = $var[2];
}

●top.html、xoops_version.php の変更
?mode=new
dir/new.html

?mode=renew
dir/renew.html

など

●環境設定>yomi.phpのファイル名 の変更
index.php
http://good-match.net/modules/yomi/dir

●環境設定>HTMLファイルディレクトリのURL の変更
html/
http://good-match.net/modules/yomi/html/

そうそう、こんなのも作ってみた。。著作的にはよろしくないかも。。(DWodp live使用)
ys_slogo.png

投稿者 : 21:03 | コメント (0) | トラックバック

 
copyright (c) 2004-2005 Mercury Plan, Inc. All rights reserved.