nodeのインストール MAC編
nvmとはnode.jsのバージョン管理ツール。 node version managerのこと
node.jsとはサーバー側で動くJavaScriptのことです。
コマンド brew install nvm
zshrcへpath追記
vi ~/.zshrc //=== 下記を追加 patを通した export NVM_DIR="$HOME/.nvm" [ -s "/usr/local/opt/nvm/nvm.sh" ] && . "/usr/local/opt/nvm/nvm.sh" # This loads nvm [ -s "/usr/local/opt/nvm/etc/bash_completion.d/nvm" ] && . "/usr/local/opt/nvm/etc/bash_completion.d/nvm"
NVM 最新版へ
//最新版をインストール %nvm install stable % nvm --version 0.35.3 % nvm use 14.7 Now using node v14.7.0 (npm v6.14.7) % nvm --version 0.35.3 % node -v v14.7.0
インストール可能なリストを表示
$ nvm ls-remote //==このLTSをインストールする long term support の意味 v10.15.3 (LTS: Dubnium) v10.16.0 (Latest LTS: Dubnium) v11.0.0 $ nvm install 10.16.0 //これを設定しておかないと再ログイン時にバージョンが無効になってしまう。 $ nvm alias default v10.16.0
nvm ls で現在入っているバージョンを確認できる
$ nvm ls v8.16.0 -> v10.16.0 system default -> v10.16.0 node -> stable (-> v10.16.0) (default) stable -> 10.16 (-> v10.16.0) (default) iojs -> N/A (default) lts/* -> lts/argon (-> N/A) lts/argon -> v4.9.1 (-> N/A) lts/boron -> v6.17.1 (-> N/A) lts/carbon -> v8.16.0 lts/dubnium -> v10.16.0
npm はアプリを管理するツール
これでnode のアプリをインストールしていく。
nodeをインストールしたらnpmもインストールされている 念の為updateしておく。
$ npm update -g npm
aglioのインストール
npm install -g aglio
Swift Delegate カスタムセル 実装処理
delegateについて記事を探したが、一般論でしかなく理解し難いのでまとめておく
やりたいこと
TableView Cellの中のbutton で画面遷移したい。delegate利用
理由:通常ならデリゲートメソッドを利用する。
しかし、xibファイルの中に自分が実装したボタンがあり、ボタン押下時に画面遷移したい。
そのときに選択したセルのオブジェクトも持っていきたい。
通常ならセル選択時に呼ばれるメソッドを利用。これ
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){
しかし,xibファイルはこれ
xibファイルのボタン押下を取得するために,delegateを自作。
まずプロトコル 今回は、セルのindexPath を次画面で利用したいため、引数に渡してあげる。
protocol UseSegueDelegate { //この関数は、delegateを任された側のクラスで、実装しないといけない。 func moveView(_ index: IndexPath) }
ちなみに、プロトコル名は○○delegateのほうがわかりやすい。
処理を任せる側 xibファイルのクラス
//DayListCellクラス //引数用のプロパティ var index:IndexPath? //これが無いと、delegateメソッドが利用できない。 var delegate:UseSegueDelegate? @IBOutlet weak var count: UILabel! @IBOutlet weak var dayLabel: UILabel! @IBAction func btn_NextPage(_ sender: Any) { delegate?.moveView(index!) }
実装するクラス tableviewのあるクラス
//delegate var index:IndexPath? // PlanListControllerからの画面遷移時にデータを持ってくる var plan: Plans? //日付表示用 var planDays: [Days]? func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { // セルを取得する 先程のxib ファイルにキャストする let cell: DayListCell = tableView.dequeueReusableCell(withIdentifier: "DayCell", for: indexPath) as! DayListCell //日付表示用 let formatter = DateFormatter() formatter.locale = Locale(identifier: "ja_JP") formatter.dateStyle = .medium // セルに表示する値を設定する let date = planDays![indexPath.row].day cell.count.text = "\(String(planDays![indexPath.row].day + 1)) 日目" let dateComponents = DateComponents(day: Int(date)) //datecomponents でday を指定しているのでその分増えていく 1-足す時間 2-開始時間 let showDay = Calendar.current.date(byAdding: dateComponents, to: plan!.start_date!) cell.dayLabel.text = formatter.string(from: showDay!) //xibファイルのdelegateには、このコントロラーを渡す cell.delegate = self //ポイント ここでdelegateのプロパティにTableViewのindexPathを詰め込んでいる cell.index = indexPath return cell }
上記のポイントの箇所により
- プロトコルのプロパティ indexにこのTableViewのindexPathが詰め込まれる
- プロトコルのメソッド func moveView(_ index: IndexPath)が呼ばれる
これはセルのなかのボタン押下時に呼ばれる。indexpathが詰め込まれている
- その後同じクラスに実装しているmoveViewが呼ばれる
func moveView(_ index: IndexPath) { //self.index= このクラスのプロパティ self.index = index //segueを呼ぶ performSegue(withIdentifier: "toFoodList", sender: nil) } //上記performSegueにより呼び出される override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if (segue.identifier == "toFoodList") { let subView = (segue.destination as? FoodListControllerTableViewController)! // modify subView.day_int = self.plan?.days //ここでindexが利用できる。 このプロトコルを実装していないと、[index!.row]を記載するとエラーになる。 //プロトコルを実装したために、エラーにならない。 subView.day = self.planDays![index!.row] } }
wordpress 納品 忘備録
ロリポップはWP-mailプラグインを入れないと、フォームからお問い合わせができない
メール設定はこちら
All-in-One WP Migration
を利用する
利用するときは他のプラグインを停止しておく
参考サイト
管理画面関係でプラグインを利用できなくしておく。
壊れてもこちらが直さいないと行けないので
最近はuploadの際に別のプラグインが必要
// 管理画面でプラグインを非表示 function remove_menus(){ // プラグインを非表示 remove_menu_page ('plugins.php'); //テーマも非表示 remove_menu_page( 'themes.php' ); //設定のパーマリンク非表示 remove_submenu_page( 'options-general.php', 'options-permalink.php' ); //ツール非表示 remove_menu_page ('tools.php'); }
最大uploadサイズ変更時は、wp-config.phpを編集
権限確認しておく事 600で良い 下記を追加
@ini_set( 'upload_max_filesize' , '128M' ); @ini_set( 'post_max_size', '128M'); @ini_set( 'memory_limit', '256M' ); @ini_set( 'max_execution_time', '300' ); @ini_set( 'max_input_time', '300' );
ロリポップssh接続
ここを参照
swift model作成 インスタンス作成がいまいちわからない方へ
モデルを便宜的に、表示するためだけに作成したのでまとめ
initはインスタンス生成時に自動的に呼ばれるメソッド
struct PlanList{ let days:Int let date:Date init(days:Int ,date:Date){ self.days = days self.date = date } }
メンバ変数で宣言
var planlists: [PlanList] = [PlanList]()
Viewが表示されたときに、インスタンスを作成
override func viewWillAppear(_ animated: Bool) { // plan!.daysは前画面から引き継いだオブジェクト for num in 0...Int(truncatingIfNeeded: plan!.days ) { //カレンダclass 調査 加算 減産 let planlist = PlanList(days: num, date: plan!.start_date!) //planlistsをテーブルに表示 planlists.append(planlist) } }
ただこれだと、オブジェクトを表示しているだけなので、Coredataに永続的に保存されていない。 次回永続化について記載します。
わかりにくい点がありましたら、コメントお願いします。 修正したいと思います。
Swift CoreData 小テーブルオブジェクト生成
Swift CoreData 小テーブル作成の記事がほとんどなかったので記載
テーブル関係はこう
PlansがDaysを1対多でもっている
ポイントは days_re が一つの変数のように扱うところ。
NSSet にNSMutableArray はセットできない。CoreDataがObjective-Cで書かれているので仕方がない。
よってこれしかやりようがない。
//ボタン押下で子テーブルを入力値分作成 @IBAction func btn_registration(_ sender: Any) { let appDelegate = UIApplication.shared.delegate as! AppDelegate let context = appDelegate.persistentContainer.viewContext let plan = Plans(context: context) //小テーブルを入力値分 作る let num:Int! = Int(planDays!.text!) for _ in 0...num{ //小テーブルのインスタンスをcoredataで作成し let day = Days(context: context) //親planテーブルに追加する。 plan.days_re = plan.days_re?.adding(day) as NSSet? } plan.name = planName.text //開始日付を取得して保存 let date = Date() plan.start_date = date do { try context.save() }catch{ print(error) } //画面遷移 dismiss(animated: true, completion: nil) }
WordPress comments.php 表示されない
comments.phpが、本の通りに表示されない問題。
参考にさせていただきました。こちらのサイトのほうが良いです。
コメント欄を表示するcomments.phpを作る [WordPressテーマ作成の手順16] | *Web Design 覚え書き*
ポイントは、comment_form( $args ) 引数に配列を渡すところ
comment_form 関数定義
基本、引数には配列を渡す。さらにfields は配列になっている。
これも、配列のまま記載してあげる。 WordPress5.0からは記載しないと動かなかった。
リファレンスはこちら
結論
//引数を用意 <?php $args = array( 'title_reply' => 'Leave a Comment', 'label_submit' => 'Submit Comment', 'comment_notes_before' => '<p class="commentNotesBefore">入力エリアすべてが必須項目です。</p>', 'comment_notes_after' => '<p class="commentNotesAfter">内容をご確認の上、送信してください。</p>', //ここが問題のfieldsの箇所、配列を渡して全て記載する 'fields' => array( 'author' => '<p class="comment-form-author">' . '<input id="author" name="author" type="text" value="' . esc_attr( $commenter['comment_author'] ) . '" size="30"' . $aria_req . ' placeholder="*your name" /></p>', 'email' => '<p class="comment-form-email">' . '<input id="email" name="email" ' . ( $html5 ? 'type="email"' : 'type="text"' ) . ' value="' . esc_attr( $commenter['comment_author_email'] ) . '" size="30"' . $aria_req . 'placeholder="*your email" /></p>', 'url' => '', ), 'comment_field' => '<p class="comment-form-comment">' . '<textarea id="comment" name="comment" cols="50" rows="6" aria-required="true"' . $aria_req . ' placeholder="*COMMENT" /></textarea></p>', ); //comment_form を呼び出す comment_form( $args ); ?>
Bootstrap4 ul li 中央揃え 忘備録
flexboxがとても便利 参考にさせていいただきました。
<div class="collapse navbar-collapse" id="navbarToggler"> //ここにw-100を入れたら、画面いっぱいに広がる。 //ulには d-flex を適用 <ul class="nav navbar-nav d-flex w-100"> //li にはd-inline-flex で均等割 <li class="nav-item d-inline-flex active"> <a class="nav-link" href="#">Home</a> </li> <li class="nav-item d-inline-flex active"> <a class="nav-link" href="#">入学案内</a> </li> <li class="nav-item d-inline-flex active"> <a class="nav-link" href="#">教育</a> </li>
本家サイト