[MovableType]プラグイン「PageBute」でページネーションテンプレ

プラグイン「PageBute」でページネーションテンプレ


<MTIgnore>1ページに表示する記事数</MTIgnore>
<MTSetVar name="per_page" value="12">

<mt:Entries lastn="0" sort_by="authored_on" sort_order="descend">
	<mt:EntriesCount setvar="entries_count"/>
</mt:Entries>
<mt:If name="entries_count" gt="$per_page">
		<ul>
			<MTPagination>

				<MTPaginationHeader>
					<MTIfPaginationFirst>
        <li class="prev"><a href="<MTPaginationPrev regex_replace="/index\.html$/","">">前へ</a></li>
					<MTElse>
						<MTignore>最初のページの時</MTignore>
						<li class="prev"><span>前へ</span></li>
					</MTIfPaginationFirst>
				</MTPaginationHeader>

				<MTIfPaginationCurrent>
					<MTignore>現在のページ</MTignore>
					<li class="is_active"><MTPaginationLink element="number"></li>
				<MTElse>
					<MTignore>それ以外(遷移用のリンクあり)</MTignore>
					<li><a href="<MTPaginationLink regex_replace="/index\.html$/","">"><MTPaginationLink element="number"></a></li>
				</MTIfPaginationCurrent>

				<MTPaginationFooter>
					<MTIfPaginationLast>
						<li class="next"><a href="<MTPaginationNext>">次へ</a></li>
					<MTElse>
						<MTignore>最後のページの時</MTignore>
						<li class="next"><span>次へ</span></li>
					</MTIfPaginationLast>
				</MTPaginationFooter>
				
			</MTPagination>
		</ul>
</mt:If>

[Swift]addGestureRecognizer

addGestureRecognizer

let gest = UILongPressGestureRecognizer(target: self, action: #selector(self.onPushTargetView))
self.targetView.addGestureRecognizer(gest)

[IIS]WordPress用web.configサンプル

WordPress用web.configサンプル
Apacheのhtaccessに当たるもの

<?xml version="1.0" encoding="utf-8"?>
<configuration>
	<system.webServer>
		<rewrite>
			<rules>
				<rule name="Main Rule" stopProcessing="true">
					<match url="^(?!(images|uploads)).*$" />
					<conditions logicalGrouping="MatchAll">
						<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
						<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
					</conditions>
					<action type="Rewrite" url="index.php/{R:0}" />
				</rule>
			</rules>
		</rewrite>
	</system.webServer>
</configuration>

[CodeIgniter]LoginControllerサンプル

LoginControllerサンプル

<?php
require_once 'BaseController.php';
class Login extends BaseController {
    protected $data = array();
    public function __construct()
    {
        parent::__construct();
        $this->load->model('admins');
    }

    public function index()
    {
        //postデータあり -> バリデーション
        if ($this->has_post_data()) {
            //バリデーション
            $result = $this->admins->validate('login');
            //バリデーションOK
            if($result){
                //メアド、パスワードDB照合
                $result = $this->admins->login();
                //メアド、パスワードDB照合OK
                if($result){
                    redirect('/');//ログイン済みホーム
                    return;
                }
            }
        }

        $this->view($this->get_template_name(),$this->data);
    }
}

AdminsModel

<?php
require_once 'BaseModel.php';
class Admins extends BaseModel {
	public $name = 'admins';
	public $validation = array(
		'login' => array(
			array(
				'field' => 'email',
				'label' => 'メールアドレス',
				'rules' => 'trim|xss_clean|required',
				'errors' => array(
					'required' => '%sは必須です。',
					'custom_validation' => '%sかパスワードが異なります。',
				),
			),
			array(
				'field' => 'password',
				'label' => 'パスワード',
				'rules' => 'trim|xss_clean|required',
				'errors' => array(
					'required' => '%sは必須です。',
				),
			),
		),
	);
	public function __construct()
	{
		parent::__construct();
	}
	public function login($email='',$password='')
	{
		if(empty($email)){
			$email = $this->post('email');
		}
		if(empty($password)){
			$password = $this->post('password');
		}
		$this->db->where('email',$email);
		$result = $this->db->get($this->name);
		if($result->num_rows() < 1){
			return false;
		}
		$result_data = $result->result('array');
		$data = array_shift($result_data);
		$login = password_verify($password,$data['password']);
		if($login){
			//ログイン成功
			$data = array(
				"email" => $email,
				"is_logged_in" => 1,
				"user_id" => $data['id'],
			);
			$this->session->set_userdata($data);
		}
		return $login;
	}
}

[MovableType]文字列分割プラグイン「Split」

文字列分割プラグイン「Split」

<MTSetVarBlock name="blog_path"><MTCanonicalURL with_index="1"></MTSetVarBlock>

<MTIgnore>プラグイン「Split」の機能</MTIgnore>
<MTVar name="blog_path" split="/" setvar="bp_parts">
<MTSetVarBlock name="filename"><MTVar name="pop(bp_parts)"></MTSetVarBlock>

[WordPress]アップロードフォルダを変える

アップロードフォルダを変える

/wp-admin/options.php へアクセス

/wp/にWordPressをインストールしており
/contents/uploadsにファイルをアップロードしたい場合
下記のように設定する。

upload_path
../contents/uploads

upload_url_path
http://yourdomain/contents/uploads

http://yourdomain/contents/でWordPressの内容を表示させている場合
http://yourdomain/.htaccess又はhttp://yourdomain/contents/.htaccessが存在するはず。
アップロードしたファイルが表示されない時は、rewrite ruleを修正して対応する。

[CodeIgniter]BaseController

共通関数を設定する時は必要。
各ControllerはこのBaseControllerをextendsする。しなくてもよい。

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class BaseController extends CI_Controller {

	public function __construct(){
		parent::__construct();

		if(!isset($_SERVER['PATH_INFO'])){
			$_SERVER['PATH_INFO'] = strtok($_SERVER['REQUEST_URI'],'?');
		}
		$this->data['class'] = $this->router->class;
		$this->data['method'] = $this->router->method;
		$this->data['uri'] = uri_string();

		//ログインしている
		if($this->session->userdata("is_logged_in")){
			//ログインページの時 -> ホームへリダイレクト
			if(in_array($this->data['class'],array('login'))){
				redirect('/');
			}

		//ログインしてない
		}else{
			//ログインページではない && 登録ページではない -> ログインページへリダイレクト
			if (!in_array($this->data['class'], array('login', 'regist'))) {
				redirect('/login/');
			}
		}
	}
	protected function get_template_name($name='')
	{
		return $this->get_class_method_string($name, '/', 2);
	}
	protected function get_class_method_string($name = '',$delimiter = '/',$backtrace_count = 1)
	{
		if(!empty($name)){
			return strtolower(get_class($this)) . $delimiter . $name;
		}
		$backtraces = debug_backtrace($limit=2);
		return strtolower(get_class($this)) . $delimiter . $backtraces[$backtrace_count]['function'];
	}
	protected function has_post_data()
	{
		return !empty($this->input->post());
	}
	protected function post($index = NULL, $xss_clean = NULL, $default = '')
	{
		$data = $this->input->post($index, $xss_clean);
		return empty($data) ? $default : $data;
	}
	public function view($template='',$data=[],$header='common/header',$footer='common/footer'){
		$this->load->view($header, $data);
		if(is_array($template)){
			foreach($template as $tmpl){
				$this->load->view($tmpl, $data);
			}
		}else {
			$this->load->view($template, $data);
		}
		$this->load->view($footer,$data);
	}
	protected function var_dump($data = null)
	{
		echo '<pre>';
		if(empty($data)){
			var_dump($this->data);
		}else{
			var_dump($data);
		}
		echo '</pre>';
	}
}

[MovableType]ページ分割プラグイン「PageBute」

ページ分割プラグイン「PageBute」
http://www.mtcms.jp/movabletype-blog/plugins/pagebute/

<MTIgnore>1ページに表示する記事数</MTIgnore>
<MTSetVar name="per_page" value="6">

<MTIgnore>プラグイン「PageBute」の機能</MTIgnore>
<MTPageContents count="$per_page">
<MTEntries sort_by="authored_on" sort_order="descend">
	<p><MTEntryTitle trim_to="30+..." encode_html="1"></p>
	<MTPageSeparator>
</MTEntries>
</MTPageContents>

[Swift]UITableView deleteRows

deleteRows

self.mainTableView.beginUpdates()

self.data.remove(at: 0)
self.mainTableView.deleteRows(at: [IndexPath(row:0, section: 0)], with: UITableViewRowAnimation.top)

self.mainTableView.endUpdates()

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
   return self.data.count
}