[Swift]addGestureRecognizer
addGestureRecognizer
let gest = UILongPressGestureRecognizer(target: self, action: #selector(self.onPushTargetView)) self.targetView.addGestureRecognizer(gest)
addGestureRecognizer
let gest = UILongPressGestureRecognizer(target: self, action: #selector(self.onPushTargetView)) self.targetView.addGestureRecognizer(gest)
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>
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; } }
文字列分割プラグイン「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>
プログラムによるflexibleWidth,flexibleHeight
self.targetView.frame = self.parentView.bounds self.targetView.autoresizingMask = [ .flexibleWidth, .flexibleHeight ]
アップロードフォルダを変える
/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を修正して対応する。
共通関数を設定する時は必要。
各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>'; } }
ページ分割プラグイン「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>
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 }
生年月日から年齢を算出する
■PHP
$birth = '1952-01-26 00:00:00'; $age = (int) ((date('Ymd') - preg_replace('/([\- ]|[0-9]{2}:[0-9]{2}:[0-9]{2})/','',$birth)) / 10000); echo $age;
結果
65
■MySQL
new_users
id | name | birth |
---|---|---|
1 | 1-名前 | 1941-01-26 17:30:56 |
2 | 2-名前 | 1952-07-07 00:30:56 |
3 | 3-名前 | 1976-09-02 17:30:56 |
4 | 4-名前 | 1990-05-13 05:00:00 |
5 | 5-名前 | 2016-11-26 17:30:56 |
6 | 6-名前 | 1999-04-01 11:11:11 |
SQL
SELECT id, name, birth, DATE_FORMAT(birth, '%Y%m%d') AS tmp_birth, DATE_FORMAT(NOW(), '%Y%m%d') AS now_date, FLOOR((DATE_FORMAT(NOW(), '%Y%m%d') - DATE_FORMAT(birth, '%Y%m%d')) / 10000) AS age FROM new_users ORDER BY id ASC
結果
id | name | birth | tmp_birth | now_date | age |
---|---|---|---|---|---|
1 | 1-名前 | 1941-01-26 17:30:56 | 19410126 | 20170126 | 76 |
2 | 2-名前 | 1952-07-07 00:30:56 | 19520707 | 20170126 | 64 |
3 | 3-名前 | 1976-09-02 17:30:56 | 19760902 | 20170126 | 40 |
4 | 4-名前 | 1990-05-13 05:00:00 | 19900513 | 20170126 | 26 |
5 | 5-名前 | 2016-11-26 17:30:56 | 20161126 | 20170126 | 0 |
6 | 6-名前 | 1999-04-01 11:11:11 | 19990401 | 20170126 | 17 |