[JavaScript]textareaでtab

textareaでtab

var addTabKeyEvent = function($textarea){
	$textarea.on('keydown',function(e){
		if(e.keyCode == 9){
			e.preventDefault();
		}else{
			return;
		}
		var $this = $(this);
		var start = this.selectionStart;
		var v = $this.val();
		$this.val(v.substring(0,start) + "\t" + v.substring(this.selectionEnd));
		this.selectionStart = this.selectionEnd = start + 1;
	});
};
addTabKeyEvent($('textarea'));

[MovableType] on windows xampp

MovableType on windows xampp

■
メール送信チェックをする場合は
C:\xampp\sendmail\sendmail.iniの下記の部分を設定しておく
auth_username=xxxxx.xxxx
auth_password=xxxxxxx

■フォルダ構成
/mt-static
/cgi-bin/mt

■アクセス
http://yourdomain/cgi-bin/mt/

■
MovableTypeへサインイン

■
スタティックウェブパス
/mt-static

スタティックファイルパス
C:\xampp\htdocs\mt_test\mt-static

■
システムチェック
次へ

■
ActivePerlインストール
インストール先C:\xampp\perl
C:\xampp\perlに元々あったファイルは削除

■
コマンドプロンプト ppm Enter
設定
Areas
Prefix:C:\xampp\perをチェック > ok
dbd-mysql インストール

■
sendmailパス
C:\xampp\sendmail\sendmail.exe

■
テンポラリーディレクトリ
C:\xampp\tmp

[WordPress]ルーティング

テーマのfunctions.phpに追記する

/**
 * ルーティング(リライトルールの追加)
 * ここの設定を反映させるには下記の操作が必要
 * 管理画面にて「設定」->「パーマリンク設定」->変更せずに「変更を保存」
 * add_rewrite_ruleの第三引数の説明は下記
 * 'top' または 'bottom'。'top' の場合、ルールは WordPressのすべての既存ルールに優先する。'bottom' の場合、ルールはすべての既存ルールがマッチしない場合に検査される。
 */
function add_user_rewrite_rules() {
    add_rewrite_rule('^hoge/?$', 'index.php?c_controller=hoge&c_method=', 'top');
    add_rewrite_rule('^hoge/([^/]*)/?$', 'index.php?c_controller=hoge&c_method=$matches[1]', 'top');
}
add_action('init', 'add_user_rewrite_rules');

/**
 * ルーティング(リライトルールの追加)関連追加処理
 * c_type,c_actionをパブリッククエリ変数として登録
 * get_query_var('c_controller')で取得
 */
function add_user_routes_query_vars($query_vars){
    $query_vars[] = 'c_controller';
    $query_vars[] = 'c_method';
    return $query_vars;
}
add_filter('query_vars','add_user_routes_query_vars');

[PHP]Imagickサンプル

Imagickサンプル

<?php
$_data = array(
        'dir'       => './output/',
        'filename'  => date('YmdHis'),
        'filetype'  => 'png',
        'fontsize'  => 24,
        'width'     => 1000,
        'height'    => 640,
        'text'      => 'sample text',
        'textcolor' => '000000',
        'color'     => 'eeeeee',
        );
$filepath = realpath($_data['dir']).DIRECTORY_SEPARATOR.$_data['filename'];

$draw = new ImagickDraw();
$draw->setFont( realpath('./font/GenEiGothicP-Regular.otf') );
$draw->setFontSize($_data['fontsize']);
$draw->setFillColor(new ImagickPixel('#'.$_data['textcolor']));
$draw->setTextAlignment(Imagick::ALIGN_CENTER);
$draw->annotation($_data['width']*0.5,$_data['height']*0.5, $_data['text'] );

$canvas = new Imagick();
$canvas->newImage($_data['width'], $_data['height'], new ImagickPixel('#'.$_data['color']), $_data['filetype']);
$canvas->drawImage($draw);
$canvas->writeImage($filepath);
$canvas->clear();

[MovableType]フィールド名を変数で指定

フィールド名を変数で指定
カスタムフィールド
CFEntryDataAddress1~CFEntryDataAddress10
CFEntryDataDetailImage1~CFEntryDataDetailImage10
を表示

<MTFor var="x" from="1" to="10">
	<MTIgnore>テキストの時</MTIgnore>
	<MTSetVarBlock name="_CFEntryDataAddress">&lt;MTCFEntryDataAddress<MTVar name="x">&gt;</MTSetVarBlock>
	<MTSetVarBlock name="_CFEntryDataAddressValue"><MTVar name="_CFEntryDataAddress" decode_html="1" mteval="1"></MTSetVarBlock>
	<MTIf name="_CFEntryDataAddressValue" ne="">
		<MTVar name="_CFEntryDataAddressValue" encode_html="1">
	</MTIf>

	<MTIgnore>画像の時</MTIgnore>
	<MTSetVarBlock name="_CFEntryDataDetailImage">&lt;MTCFEntryDataDetailImage<MTVar name="x">&gt;</MTSetVarBlock>
	<MTSetVarBlock name="_CFEntryDataDetailImageValue"><MTVar name="_CFEntryDataDetailImage" decode_html="1" mteval="1"></MTSetVarBlock>
	<MTSetVar name="_CFEntryDataDetailImageAsset" value="">
	<MTIf name="_CFEntryDataDetailImageValue" ne="">
		<MTSetVarBlock name="_CFEntryDataDetailImageAsset">
			<MTCFEntryDataDetailImage<MTVar name="x">Asset>
					<img src="<MTAssetThumbnailURL width="450" force="1">">
			</MTCFEntryDataDetailImage<MTVar name="x">Asset>
		</MTSetVarBlock>
	</MTIf>
	<MTIf name="_CFEntryDataDetailImageAsset" ne="">
		<MTVar name="_CFEntryDataDetailImageAsset" decode_html="1" mteval="1">
	</MTIf>
</MTFor>

[JavaScript]deep-link.js

deep-link.js
aタグタップでアプリ起動 > 無ければストアへ遷移

サンプル:/js/69/
GitHub:https://github.com/timseverien/deep-link.js

サンプルにおける修正点1
最後に’;end’が付いてないと動かない端末がある

if(isAndroidBrowser) {
return 'intent:' + app.split(':')[1] + '#Intent;scheme=' + scheme + ';package=' +
  store + ';S.browser_fallback_url=' + encodeURI(href)+';end';
}

サンプルにおける修正点2
でdeep-link.jsを読み込む時、初期化処理をDOM読み込み後に実行するよう変更

var init = function(){
	var elements = document.getElementsByTagName('a'),
		i = elements.length;
	while(i--) parseElement(elements[i]);
};
document.addEventListener('DOMContentLoaded',function(){
	init();
});

[PHP]PDO備忘録

<?php
$dsn = 'mysql:host=localhost;dbname=testdb;charset=utf8';
$user = 'root';
$password = 'password';

try {
    $pdo = new PDO($dsn, $user, $password, [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // エラーモードを例外に設定
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // デフォルトのフェッチモードを連想配列に
    ]);
    echo "接続成功";
} catch (PDOException $e) {
    echo "接続失敗: " . $e->getMessage();
}
?>

 

$sql = "SELECT * FROM users WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':id', 1, PDO::PARAM_INT);
$stmt->execute();
$result = $stmt->fetch();

print_r($result);

 

$sql = "INSERT INTO users (name, email) VALUES (:name, :email)";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':name', '田中 太郎', PDO::PARAM_STR);
$stmt->bindValue(':email', 'taro@example.com', PDO::PARAM_STR);
$stmt->execute();
echo "データを挿入しました";

 

try {
    $pdo->beginTransaction();

    $pdo->exec("UPDATE users SET balance = balance - 100 WHERE id = 1");
    $pdo->exec("UPDATE users SET balance = balance + 100 WHERE id = 2");

    $pdo->commit();
    echo "トランザクション成功";
} catch (Exception $e) {
    $pdo->rollBack();
    echo "トランザクション失敗: " . $e->getMessage();
}

[Swift]addObserverでresize event

addObserverでresize event

self.contentView.addObserver(self, forKeyPath: "frame", options: NSKeyValueObservingOptions(rawValue: 0), context: nil)

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
    //処理
}