2016年10月4日火曜日

【wordpress】 プラグインのクラス化

ショートコードで呼べるプラグインを作るのはとても簡単 :
(以下、機能文字は全角で記載してあるので、半角に読みかえること。)

1.(site)\wp-content\plugins\ の下にフォルダーを作る。プラグイン名と同じがよい。
2.そこに「プラグイン名.php」をつくる。 例 : my_plugin_1.php
3.内容はこんな感じ :

<?php
/**
Plugin Name: my plugin 1
Plugin URI:
Description: my test plugin no_1.
Author: Author Name
Author URI:
Text Domain:
Domain Path:
Version: 0.0.0
*/
add_shortcode("show_my_plugin_1", "my_plugin_1_page");

function my_plugin_1_page() {
  return ’<p>何かのコンテンツ</p>’;
}

4.ダッシュボードのプラグイン一覧を開くと、「my plugin 1」が載っているので、有効化する。表示されている名称はコード冒頭の「Plugin Name」で指定したもの。
5.投稿中に [show_my_plugin_1  と書くと、「何かのコンテンツ」が表示される。


これをクラスにするにはこんな感じ :

class myPlugin1Class {

  public function __construct() {
    //コンストラクタで add_shortcode する。
    //以下の、配列にして $this を渡すことがミソ。
    add_shortcode("show_my_plugin_1", array($this, "my_plugin_1_page"));
  }
  public function my_plugin_1_page() {
    return ’<p>何かのコンテンツ</p>’;
  }

}
//インスタンスを生成; 変数への保存は不要
new myPlugin1Class();

6.例によって、「ミソ」を発見するのに一苦労あったので、メモ。




2016年9月5日月曜日

【PHP】 関数・メソッドのパラメタとして配列を渡した場合の処理

こういう説明は、検索してもなかなか引っかからない。明快な説明をみつけたので、メモ。

>>>>>>
関数に配列が値渡しの引数として与えられた場合、PHPはその時点ではスタック領域のポインタアドレスを渡している(配列のコピーは作られていない)が、配列に変更があった時点でその配列のヒープ領域がコピーされ別の変数として新しいスタック領域に別のポインタアドレスが保存される。

明示的に参照渡しとして関数に配列が引数として与えられた場合は、配列に変化を加えても新しいスタック領域は確保されず、参照で与えられたポインタアドレスのヒープ領域の配列が変化する。

値渡しであっても参照渡し(ポインタ渡し)であっても,最初の段階ではどちらも参照渡しの状態になるが、明示的に参照渡しをしない限り、配列が変更されたタイミングで元の配列がコピーされ、新しい配列が生成される。
<<<<<<

小さな配列なら変更後の配列を返す関数でも問題ないだろうが、大きくなる場合は注意を要する。

情報元 : http://memo.choimemo.net/?p=441

2015年7月28日火曜日

【Delphi】圧縮・解凍

Mr.X-Ray の下記のサイトに 7-zip32.dll を使用する方法が詳しく載っている。
http://mrxray.on.coocan.jp/Delphi/plSamples/732_Archiver7-ZIP32.htm#03

7-zip のコマンドはパラメタの設定がややこしい。
Mr.X-Ray のオリジナルではサブフォルダーも処理するが、サブフォルダーを無視するには「-r」パラメタを削除する。
またパスワードを付けるには「-pXXXXXXXX」を追加する。

2015年4月21日火曜日

【jQueryMobile】 select で data-native-menu="False" が表示されない

jQueryMobile では<select>に data-native-menu="False" と書くことで独自の選択窓がポップアップするのだが、これが機能しないトラブルに見舞われた。ブラウザのコンソールでソースを表示してみたら select ボタンのリンク先にゴミがついている。
原因は以下のとおり :

2013年8月20日火曜日「php と jQuery mobile の環境でリダイレクト」で書いたように、メインページには
data-url="<?php echo $_SERVER["SCRIPT_NAME"]?>"
のように書くのだが、SCRIPT_NAME ではなく PHP_SELF と書いていた。これはこれで望ましい場合があるのだけれど、select ボタンとは両立しない。

2015年3月26日木曜日

【OpenOffice】 表紙の次のページからページ番号を振るには

OpenOffice の Writer には「ページスタイル」という属性があり、ページスタイルごとにページの設定ができるのだが、この設定の仕方がわかりにくい。

※ 準備
1)「メニュー → 表示 → サイドバー」でサイドバーを表示しておく
2)サイドバーで「スタイルと書式設定」ページを表示し、「ページスタイル」ボタンをクリック

※ 表紙にページ番号を付けない => 表紙ページのページスタイルを「最初のページ」に変更する
1)表紙ページにカーソルを置く
2)「ページスタイル」で"最初のページ"をダブルクリック

※ 次ページからページ番号を振る => 2ページ目以降のページスタイルを「標準」とし、開始ページ番号を1に変更する
 1)2ページ目の本文先頭にカーソルを移動する
 2)「書式」-「段落」
 3)「段落」ダイアログで「体裁」タブをクリック
 4)"区切り"の"ページスタイル付き"をオン
 5)"ページ番号"を"1"にする
 6)「OK」ボタンをクリック

※ フッタの有無を設定する
1)「挿入 → フッター」
2)「最初のページ」はオフ、「標準」はオンに設定

 以下のサイトに説明がある : http://oooug.jp/faq/index.php?faq%2F3%2F150

2015年1月16日金曜日

jQuery Mobile で確認画面へのリンクが機能しない

PHP と jQuery Mobile によるスマホ向けサイトではポップアップ画面等、「role="page"」で定義した第2画面へのリンクが表示されないことがある。jQuery の ajax による画面遷移をサーバ(PHPのプログラム)がサポートするのが本来かもしれないが、ajax を機能停止するのが手っ取り早い。
 <HEAD> に以下のスクリプトを書く :
<script>
$(document).bind('mobileinit', function(){
$.mobile.ajaxEnabled = false; //ChromeではこれだけでOK
$.mobile.ajaxLinksEnabled = false;
$.mobile.pushStateEnabled = false; //IEではこれが必要
});
</script>

2014年12月4日木曜日

【MySQL】 SELECT した結果を直接 SELECT の対象にする例

へ~、こんなこともできるんだ!ネタ。

MySQL を使っている方には「何を今更」かもしれないが、Firebird では動かないのではないか(最新版では試していないが)。

select
  A.GRPID, A.TEAMNAME, Count(A.MEMBERID)
  /* Join して中間テーブルを作成 */
  from (
    select MEMBERID, GRPID,
      (select TEAMNAME from TEAMINFO T where T.MEMBERID=M.MEMBERID) as TEAMNAME
    from MEMBERS M
  ) A
  group by A.GRPID, A.TEAMNAME
;


SELECT が3段になっているケースで、3段目で取得した項目を1段目の GROUP BY で指定できる。