お世話になっております。
MapBlog 1.12 をありがたく利用させて頂いております。
表題の件ですが、確かwikiには、NP_MultipleCategories、NP_TagEXによるそれぞれの絞込みが可能と書かれていたのでお尋ねします。
NP_MultipleCategoriesのカテゴリ,サブカテゴリによる絞込みは出来ていますが、
NP_TagEXによるタグの絞込みが出来ず、他タグのマーカーも一緒に表示されてしまいます。
MapBlogで、NP_TagEXによるタグに合わせたマーカーの絞込み表示はできないでしょうか?
環境は、Nucleus CMS v3.31SP1 UTF-8版
プラグインは以下のを入れています。
NP_MapBlog バージョン: 1.12
NP_GoogleMaps バージョン: 1.13
NP_TagEX バージョン: 0.71
NP_Multiple Categories バージョン: 0.5.1j
NP_Show Blogs バージョン: 2.7
Customized URL バージョン: 0.3.7
znItemFieldEX バージョン: 0.12.1alpha
default メインの目次ページのスキンに
<%MapBlog(default/map,10/i,,m(400|300|map|b/s/s|auto))%>
<%ShowBlogs(default/index,10)%>
と書いています。
オフライン
CustomURLの生成するURLを認識していないのかもしれません。
タグを選んだときのURLがどうなっているか,念のため教えていただけますか。
オフライン
Andyさん、ご返信ありがとう御座います。お世話になっております。
http://www.example.com/tag/%E3%81%9D%E3%81%AE%EF%BC%91/
の様になっております。
念のために.htaccessには、
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?virtualpath=$1 [L,QSA]
RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.php$ http://www.examplecom/$1 [R=301,L]
<FilesMatch "^tag$">
ForceType application/x-httpd-php
</FilesMatch>
と書いております。
オフライン
Andyさん、お世話になっています。
その後、NP_CustomURLを削除して、すべてノーマルな状態にして
index.php?blogid=1&tag=%E3%81%9D%E3%81%AE%EF%BC%92 等のURLでアクセスすると
ちゃんとTagの絞込みが出来ましたので、こちらでお尋ねしたのは筋違いのようでした。
どうもすみませんでした。
ただ、NP_CustomURLは使用したいので、
CustomURLの生成するURLを認識していないのかもしれません。
もしもNP_MapBlogで対処できるモノならなんとかしたいのですが、対処方法等がありましたら、お教え下さいませ。
またお時間の許される時で結構ですので、下記の2点についての原因や対処方法はありますでしょうか。
1)タグでアクセスした時だけマップの上に Array ( [0] => 0 [1] => 1 ) や Array ( [0] => 0 [1] => 4 ) と表示される。
2)設定のPoints from template(for use with znItemFieldEx) で jp[<:znItemFieldEX(add):>]|yes|<:title:> と入力し、
Update All Data を「はい」にして設定の変更ボタンを押した直後に、下記のようなエラーが表示される。
Warning: Attempt to assign property of non-object in /virtual/xxxxx/public_html/xxxxx/nucleus/plugins/googlemaps/geocoder/geocoder.php on line 146
オフライン
elsaさん
NP_MapBlog.phpの中の
//for NP_TagEX start
から
//for NP_TagEX end
までの行を以下のコードに変えてみてもらえますでしょうか。
//for NP_TagEX start
if($tplugin =& $manager->getPlugin('NP_TagEX')){
if ($reqs = $tplugin->getNoDecodeQuery('tag')) {
$reqArr = $tplugin->splitRequestTags($reqs);
$andtags = $reqArr['and'];
$first = array_shift($andtags);
$ortags = array_merge($reqArr['or'],array($first));
$allTags = $tplugin->scanExistTags(2);
$inums = array();
for($i=0;$i<count($ortags);$i++){
$deTag = $tplugin->_rawdecode($ortags[$i]);
if($allTags[$deTag])
$inums = array_merge($inums,$allTags[$deTag]);
}
for($i=0;$i<count($andtags);$i++){
$deTag = $tplugin->_rawdecode($andtags[$i]);
if($allTags[$deTag])
$inums = array_intersect($inums,$allTags[$deTag]);
}
if($inums)
$where .= ' and i.inumber IN ('. @join(',',$inums) . ')';
}
}
//for NP_TagEX end
オフライン
Andyさん、お世話様です。
CustomURLを入れた状態で、該当箇所を書き直しました。その他はデフォルトの状態での結果ですが、
Warning: array_merge() [function.array-merge]: Argument #1 is not an array in /virtual/xxxxx/public_html/sample.com/nucleus/plugins/NP_MapBlog.php on line 523
と書き出されました。私の場合、523行目の該当箇所は、
$ortags = array_merge($reqArr['or'],array($first));
の部分でした。
ちなみに、.htaccessの中身は
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?virtualpath=$1 [L,QSA]
の状態です。
オフライン
横から失礼。
if ($reqs = $tplugin->getNoDecodeQuery('tag')) {
の次の行に
$reqArr = array();
$ortags = array();
と試してみてください。
オフライン
えっと、or接続のタグが指定されていない場合、$reqArr['or']が作られないので、
$ortags = array_merge($reqArr['or'],array($first));
の部分を
if ($reqArr['or']) $ortags = array_merge($reqArr['or'],array($first));
にすると大丈夫だと思います
オフライン
Andyさん、きゃしゃさん、shizukiさん、
ありがとうございます。エラーは消えましたが、
しかし残念ながら、タグ選択時にNP_MapBlogで絞込みできないという、デフォルトの時の状態と何ら変りません。
HTMLソースを見てみると、ページの末尾の<%GoogleMaps(SCRIPT)%> が書き出す部分で、絞込みが出来ていないので、NP_MapBlogではなく、NP_GoogleMapsの問題かもしれませんね。
オフライン
申し訳ございません。
NP_MapBlogでNP_MultipleCategoriesのサブカテゴリー絞込みをするにはどのようにしたら良いのでしょうか?
現状、メインの目次ページに
<%MapBlog(itemmap,10/i,,m(400|300|map|b/s/s|auto))%>
と記述してるだけなのですが、サブカテゴリー目次ページを表示するとmySQLエラーが出てしまいます。
サブカテゴリーごとにそこに所属するアイテムの情報拾って、サブカテゴリー目次ページでマップ表示したいと考えています。
オフライン
Nucleus 3.41のAction.phpについて
<!-- l --><a class="postlink-local" href="http://japan.nucleuscms.org/bb/viewtopic.php?t=4439">viewtopic.php?t=4439</a><!-- l -->
で質問させていただきましたが、EUC-JPの日本語のNucleus 3.41の環境で、NP_GoogleMapsの別ウィンドウ地図表示機能が使えなくなる問題が発生しました。
原因は、NP_GoogleMapsが作成するポップアップ用リンクの日本語説明の引数の文字コードを、UTF8に変換している部分にあります。
以下の修正をすることで正常動作することを確認していますので、困っている方おられたら修正してみてください。
NP_GoogleMaps.phpの、
292行目
for ($k = 0; $k < $max; ++$k) {
$map["info$k"] = htmlspecialchars($map["info$k"]);
}
$map["info"] = htmlspecialchars($map["info"]);
を
for ($k = 0; $k < $max; ++$k) {
if (function_exists(mb_convert_encoding))
$map["info$k"] = mb_convert_encoding($map["info$k"], 'UTF-8', _CHARSET); // add Sakura Candle
$map["info$k"] = htmlspecialchars($map["info$k"]);
}
if (function_exists(mb_convert_encoding))
$map["info"] = mb_convert_encoding($map["info"], 'UTF-8', _CHARSET); // add Sakura Candle
$map["info"] = htmlspecialchars($map["info"]);
に、
639行目
if ($params[1] == 'inline') {
$map["info$i"] = $coord['info'];
} else {
if (function_exists(mb_convert_encoding))
$coord['info'] = mb_convert_encoding($coord['info'], 'UTF-8', _CHARSET);
$map["info$i"] = $coord['info'];
}
を
$map["info$i"] = $coord['info']; // change Sakura Candle
// if ($params[1] == 'inline') {
// $map["info$i"] = $coord['info'];
// } else {
// if (function_exists(mb_convert_encoding))
// $coord['info'] = mb_convert_encoding($coord['info'], 'UTF-8', _CHARSET);
// $map["info$i"] = $coord['info'];
// }
に変更します。
農場主の日常(管理人blog)
http://nojomaster.com/
オフライン
こんにちは、便利に利用させてもらっていますが、番地までの指定を行った場合、座標がどうしても少しずれた場所になってしまいます。
これは、グーグル側の問題でしょうか?
オフライン
うちのページで表示しているNP_MapblogのGoogleMapsアイコンのリスト表示について、何人かの方に質問を受けていたのですが、時間がとれず、回答できませんでした。
このたび時間ができましたので、修正点を紹介します。
まず、表示の感じは添付のようになります。
農場主の日常(管理人blog)
http://nojomaster.com/
オフライン
まず前提として、NP_GoogleMapsに、アルファベットのアイコン表示を行う改造が行われている物とします。
改造方法は以下になります。
http://japan.nucleuscms.org/bb/viewtopi … 5245#15245
上記改造を行った上で、NP_MapBlogの371行目付近、
function doTemplateVar(&$item, $mode = '', $param1 = '') {
global $CONF;
$i = $this->pointnumber;
switch ($mode) {
のあとに、
case 'STARTL' :
echo "\$map['list$i'] = <<<LIST{$i}\n";
break;
case 'ENDL' :
echo "\nLIST$i;\n";
$this->listnumber += 1;
break;
を追加。
472行目付近、
$bid = (int)$b->blogid;
$this->pointnumber = 0;
のあとに、
$this->listnumber = 0;
を追加、
677行目付近、
eval($this->code);
$map['p'] = $this->pointnumber;
のあとに、
if ($itemmode) {
$map['List'] = 0;
} else {
$map['List'] = $this->listnumber;
}
を追加、
679行目付近、
for ($i = 0; $i < $this->pointnumber; $i++ ) {
$map["info$i"] = preg_replace('/\r|\n/', ' ', $map["info$i"]);
のあとに、
$map["list$i"] = preg_replace('/\r|\n/', ' ', $map["list$i"]);
を追加。
NP_GoogleMaps側の変更として、379行目付近
function DrawMap($mapdata, $i = '') {
$script = " var map$i = new GMap(document.getElementById(\"map$i\"));\n";
のあとに、
if($mapdata['List'] > 0) {
$sList = " var List$i = document.getElementById(\"list$i\");\n";
$sList .= " var Listhtml$i = \"\";\n";
}
を追加。
455行目付近、
$script .= " GEvent.addListener(marker[$j], \"click\", function() {\n"
. " marker[$j].openInfoWindowHtml(info[$j]);\n"
. " });\n";
// $script .= " GEvent.addListener(marker2[$j], \"click\", function() {\n"
// . " marker2[$j].openInfoWindowHtml(info[$j]);\n"
// . " });\n";
のあとに、
if($mapdata['List'] > 0) {
if (($max > 1)&&($max <= 25)) {
$sList .= " Listhtml$i += \"<img width='20' height='34' src='http://www.google.com/mapfiles/marker$letter.png' alt='$letter' border='0' />\";\n";
} else {
$sList .= " Listhtml$i += \"<img width='20' height='34' src='http://www.google.com/mapfiles/marker.png' alt='' border='0' />\";\n";
}
$sList .= " Listhtml$i += \"<a href='javascript:allopener$i(". $k . ")' >" . $mapdata["list$k"] . "</a><br>\";\n";
}
を追加。
518行目付近、
if (!($mapdata['info'] === '') && !($mapdata['info'] === null)) {
$p = $mapdata['info'];
$script .= " map$i.recenterOrPanToLatLng(marker[$p].point);\n";
$script .= " marker[$p].openInfoWindowHtml(info[$p]);\n";
}
のあとに、
if($mapdata['List'] > 0) {
$sList .= " List$i.innerHTML = Listhtml$i;\n";
$sList .= " function allopener$i(i){marker[i].openInfoWindowHtml(info[i] );}\n";
$script .= $sList;
}
を追加。
532行目付近、
function createInlineLink($map, $i) {
return '<div id="map' .$i. '" style="width: '
.$map['width'] .'px; height: '.$map['height'] .'px"></div>'. "\n";
を、
function createInlineLink($map, $i) {
// return '<div id="map' .$i. '" style="width: '
// .$map['width'] .'px; height: '.$map['height'] .'px"></div>'. "\n";
$InlineLink = '<div id="map' .$i. '" style="width: '
.$map['width'] .'px; height: '.$map['height'] .'px"></div>'. "\n";
if( $map['List'] > 0 ) {
$InlineLink .= '<div id="list' .$i. '"></div>'. "\n";
}
return $InlineLink;
に変更。
ここまでの変更を行った上で、MapBlog用のテンプレートを作成します。
テンプレートのアイテムの本体に、
<%MapBlog(STARTL)%><%MapBlog(INFO)%><small>::<%category%></small>
<%MapBlog(ENDL)%>
<%MapBlog(START)%>
<small><a href="<%itemlink%>"><%title%></a><BR>
<%MultipleCategories%><BR>
<%MapBlog(INFO)%><BR>
<%MapBlog(THUMBNAIL,120)%></small>
<%MapBlog(END)%>
のような記載を行います。このうち、
<%MapBlog(STARTL)%><%MapBlog(INFO)%><small>::<%category%></small>
<%MapBlog(ENDL)%>
部分が、リスト表示のフォーマットになります。
<%MapBlog(STARTL)%>と<%MapBlog(ENDL)%>に囲まれた部分の指定でリスト表示します。
リスト表示を行うテンプレートは、この2つの表記と、通常のMapBlog表示用のテンプレート変数<%MapBlog(START)%>と<%MapBlog(END)%>が必要です。
また、<%MapBlog(STARTL)%>と<%MapBlog(ENDL)%>は<%MapBlog(START)%>よりも前に書く必要があります。
リスト表示が不要な場合は、<%MapBlog(STARTL)%>と<%MapBlog(ENDL)%>を書かなければ表示を行いません。
リスト表示の制御は、CSSにて行うことができます。
上記修正のうち、リスト表示を行っているのは、
function createInlineLink($map, $i) {
// return '<div id="map' .$i. '" style="width: '
// .$map['width'] .'px; height: '.$map['height'] .'px"></div>'. "\n";
$InlineLink = '<div id="map' .$i. '" style="width: '
.$map['width'] .'px; height: '.$map['height'] .'px"></div>'. "\n";
if( $map['List'] > 0 ) {
$InlineLink .= '<div id="list' .$i. '"></div>'. "\n"; //06-04-20
}
return $InlineLink;
部分ですので、<div id="list0"></div>部分の表示をCSSにて制御することができます。
いろいろ応用してみてください。
農場主の日常(管理人blog)
http://nojomaster.com/
オフライン
2018年に、GoogleMaps APIがGoogle Cloud Platformに移行したことに伴い、本プラグインでのGoogleMaps表示でエラーが表示されるようになりました。
正常に表示するためには、以下の修正が必要となります。
Google Mapsキーの再取得
1.Google Cloud Platformにて登録を行い、新規プロジェクトの作成と支払い情報の登録を行う。
2.Google Maps APIのキーを新たに取得
3.NP_GoogleMapsの管理画面にて、APIキーを3で取得したキーに変更する。
NP_GoogleMaps.phpの修正
314行目付近
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false" charset="utf-8"></script>
部分を、
<script type="text/javascript" src="http://maps.google.com/maps/api/js?key=<?php echo $key ?>&language=ja" charset="utf-8"></script>
に変更。
344行目付近
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false" charset="utf-8"></script>
部分を、
<script type="text/javascript" src="http://maps.google.com/maps/api/js?key=$key&language=ja" charset="utf-8"></script>
に変更。
修正後、NP_GoogleMaps.phpファイルを上書き保存すれば正常に表示が可能となります。
APIの使用は、$200分までは無料とのことですので、程度アクセスの多いサイトだと課金されることになるようです。ご注意ください。
編集者 サクラキャンドル (2020-04-08 20:50:56)
農場主の日常(管理人blog)
http://nojomaster.com/
オフライン