MTEntriesを複数条件でフィルタリングする(スニペットは無理?)
MT、PowerCMSを触るときに絶対使うのがMTEntriesタグ。
一覧ページだったりを作るのによくつかうけれど、
少し複雑なフィルタリングを掛けようとすると意外と難しかったり、出力できないことがしばしば。。。
今回はカスタムフィールド(ラジオボタン)複数でフィルタリングを掛けたときのメモ。
■カスタムフィールド1
・ベースネーム:radio_sample
・テンプレートタグ:radioSample
・オプション:opA、opB
■カスタムフィールド1
・ベースネーム:radio_sample
・テンプレートタグ:radioSample
・オプション:op1、op2、op3
--------------------------------------------------------------
■やりたいこと
・複数カスタムフィールドの値でフィルタリングを掛けたい
ex) 文字で表すと opA AND op1 や opA AND op3 といった具合
<例1>
<MTEntries field:radio_sample="opA">
<MTEntries field:radio_sample="opB">
<MTIgnore>/*ここに出力内容*/</MTIgnore>
</MTEntries>
</MTEntries>
手っ取り早いのがこのやり方。
だけど、MTEntriesを入れ子にするのは見た目がよろしくないような気がする・・・(個人の意見だけれども)
なので私のやり方は次の例2
<例2>
<MTIgnore>出力したくないものを先に出力</MTIgnore>
<MTEntries field:radio_sample="opB"><MTEntries>
<MTEntries field:radio_sample="op1" unique="1">
<MTIgnore>/*ここに出力内容*/</MTIgnore>
</MTEntries>
一度除外したいものを先に空で出力し、unique="1"で重複記事を消すことでフィルタリングをかける。
もし、同一テンプレート内で再度MTEntriesを呼び出す場合はまた入れ子の式を書かなくて済むのでできれば例2を使ったほうがべんり(かも?)。
※ちなみに、スニペットで作ったカスタムフィールドの値でMTEntriesのフィルタリングはかけれないので注意
(1時間ほど格闘しましたができませんでした・・・知っている方は教えてくださいmm)
おわり。
WebサイトのSSL化を行ったときに躓いたメモ
WebサイトをSSL化するときにサーバーの設定を変更しなければならないがそのときに躓いたので調べたこと、わかったことをメモ。
その1:httpとhttpsで動作するサーバーは違う
表現が合っているかは微妙・・・
特定のページにアクセスするときにhttp通信からhttps通信にで切り替えたいので、
htaccessで切り替えるのが定石(と思います)
が、https通信でアクセスしたページでグロナビ等のリンクを踏んだときにヘッダーやフッターが読み込まれなかった。
↑どうやらhttps通信のままWebサイト内を行き来するらしい。
そこでルートのディレクトリにこれまたhtaccessを置いてhttpsさせたいページ以外はhttpに切り替える設定にしたが、これがどうして動かなかった。
いろいろと調べるとどうやら、
httpでアクセスした場合はhttpサーバー
となるらしく、httpsのサーバー設定を行ったときにOptionでhtaccessの許可を行っていなかったこと、SNIの設定を行っていなかったことが原因でした。
私の勝手なイメージで、httpサーバーの設定は引き継がれているものだと思っていました・・・
その2:画像やJSの取得元がhttp通信の場合取得できない
例えば、本来httpのWebサイトをGoogleのSSL化えこひいきでhttpsにしないといけなくなったときの落とし穴
画像やJSをURL指定でhttp通信を使って取得している場合は取得できないのでサーバー設定やhtaccessで拡張子(js, png, jpg)を例外的に通過させるか、HTMLソース内のURLを変える必要があります。
これをしなかった場合、画像やJSが読み込まれないので注意です。
SQL fiddle の使い方
SQL Fiddleの使い方をメモする
SQL Fiddleは下記のURLでアクセス
下記の画面が出てくる
ページ最上部の「MySQL 5.6」をクリックするとプルダウンメニューが表示される。
メニューにはDBが各種存在し、自由に選択できる。
使い方としては、
------------------------------------------------------------------------------------
①プルダウンメニューからDB選択
②左ウィンドウでTABLE、INSERT文を記入し、初期データを作成
③左ウィンドウすぐ下の「BuildSchema」をクリックする
※クリックすると②で作成したテーブルをビルドします。
④右ウィンドウでSELECT文を記入
⑤「RunSQL」をクリック
-------------------------------------------------------------------------------------
⑤をクリックするとページ最下部に実行結果が出力されます。
※ページ最上部の「MySQL 5.6」横の「View Sample Fiddle」から動作サンプルを実行できます。
また、1からテーブルを作るのが面倒だなぁと思う場合、
「Text to DDL」
から簡単にシンプルなテーブルであれば作成できます。
クリックすると下記のような画面が出ます。
たとえば
TableNameにTable1
そのすぐ下のテキストボックスに
id | name
1 | aaaa
2 | bbbb
3 | cccc
と入力し、「Append to DDL」をクリックすると下記のSQLが生成されます。
CREATE TABLE Table1
(`id` int, `name` varchar(4))
;
INSERT INTO Table1
(`id`, `name`)
VALUES
(1, 'aaaa'),
(2, 'bbbb'),
(3, 'cccc')
;
などなどテスト用や勉強に使うときにサーバー構築することなく使用できるのでとっても便利。
Facebook apiからJSON形式で投稿を取得する
Facebook apiからJSON形式で投稿を取得するメモ
https://developers.facebook.com/tools/explorerにアクセス
ここで取得するデータを試しに取ってくることができる。
取得の際は右側の
getToken
のプルダウンから
getPageAccessToken
を選択することでAccessTokenが生成される
※ここで取得する場合取得できる期間が短いのでWebサイトで動作させる場合は
右上のMyAppから新しく作成してAppTokenを生成する必要あり。
AccessTokenを取得できればSubmitボタンを押すことでJSONを取得できる。
取得するデータの指定は左側のウィンドウから自由に選べる。
実際に投稿取得するときは下記のURLがルートになる
URLの下にバージョンを指定し、Submitボタンがある列の文字列をURLに追記すると晴れてJSONデータを取得できる
例として自身のidと名前を取得したい場合は下記のURLになる。
https://graph.facebook.com/v2.5/me?fields=id,name
画像ファイルの拡張子が書き換えられたときの検出
画像データの拡張子が書き換えられたときにエラーを吐き出します。
以下サンプル
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
'画像ファイルを読み込む Dim imgPath As String = "C:\test.jpg" Dim img As System.Drawing.Image = System.Drawing.Image.FromFile(imgPath)
Dim fileExtension As String = System.IO.Path.GetExtension(imgPath)
'イメージのファイル形式を調べる
If fileExtension = ".gif" Then
If img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Gif) Then
'--ここにエラー処理を書く(拡張子がgifでデータのフォーマットが違うとき)
EndIf
ElseIf fileExtension = ".jpg" Then
If img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Jpeg) Then
'--ここにエラー処理を書く(拡張子がJpegでデータのフォーマットが違うとき)
End If
Else
'--ここにエラー処理を書く(今回はjpg,gifのみの検出の為それ以外)
EndIf
'画像リソースの開放
img.Dispose()
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
拡張子は以下の処理で取得できます。
Dim fileExtension As String = System.IO.Path.GetExtension(imgPath)
<結果>
fileExtension : ".jpg" や ".gif"などドット付きで取得します
画像データは以下の処理で取得できます
'画像データの読み込み
Dim img As System.Drawing.Image = System.Drawing.Image.FromFile(imgPath)
'画像フォーマット とイコールか判別
img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Jpeg)
その他ビットマップやpng画像も判別できるようです。
以上
VirtualBox+VagrantでRuby on Rails環境構築
VirtualBox+VagrantでRuby on Rails環境構築しました。
・VirtualBox:仮想環境を構築するソフトウェア
・Vagrant:仮想環境にサーバーなどをインストールするソフトウェア
■必要なものをダウンロード
以下のURLからVirtualBoxとVagrantをダウンロードします。
https://www.virtualbox.org/wiki/Downloads
https://www.vagrantup.com/downloads.html
また、Vagrantを使って作る仮想マシンのイメージはBoxイメージを使うのでこれもダウンロード
http://www.lyricalsoftware.com/downloads/centos65.box
■仮想マシンの作成
・仮想マシンを作りたいディレクトリにBoxイメージを配置
例:C:\Work
*以下コマンドライン上で操作
・VagrantにBoxイメージを登録
vagrant box add base centos65.box
・初期化と仮想マシンの起動
vagrant init
vagrant up
・接続確認
→ここでsshクライアントがないといわれたのでPuttyごった煮版をインストールし、接続しました。
これで仮想マシンの構築はできました。
続いてRubyの導入です。
■Ruby on Railsの導入に必要なソフトをインスコ
RVN:Rubyのバージョン管理
gem:Rubyのライブラリ提供サービス(PHPでいうPearみたいな)
・RVNインストール
公式ホームページから以下のコマンドでインストールできるそうです。
1.gpg --keyserver hkp://keys.gnupg.net --recv-keys
2.\curl -sSL https://get.rvm.io | bash
2のコマンドを行った段階で警告が出たので警告通りコマンドを実行
source ~/.profile
rvnコマンドでマニュアルが表示されれば完了
・Rubyのインストール
rvn install [Rubyのバージョン番号]
確認は
rvn list
でバージョンとあったRubyが表示されれば完了
また、Rubyインストール時にgemも導入されます。
・Ruby on Railsのインストール
gem install rails
これで環境の構築は終了です。
■Railsでプロジェクトを作って確認しよう!
仮想マシンとの共有フォルダをVagrantが生成してくれているのでそこに移動します。
cd /vagrant
プロジェクトを作っていきます。
rails new test
出来上がったらサーバーを起動します
rails server -b 0.0.0.0
ここでエラーが発生したので以下のURLを参考にGemファイルを編集しました。
サーバーが無事立ち上がればOKです。
アクセスの為ポートフォワーディングの設定をします。
gemファイルで以下の赤文字のように変更
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
# config.vm.network "forwarded_port", guest: 80, host: 8081
config.vm.network "forwarded_port", guest: 3000, host: 3000, auto_correct: true
--------------------------------
今回はポート3000番を使いました。
Vagrantを再起動します
vagrant reload
再起動後下記URLにアクセスできれば完了です。お疲れさまでした。