20200330のPHPに関する記事は7件です。

Custom Field Suite のループで配列の最初の要素を取得する

WordPressのプラグイン Custom Field Suite のループで、最初の要素を取得したい時のコードです。

<?php
  $loop = CFS()->get('loop');
  $loop_item = $loop[0]['loop_item'];
  echo $loop_item ;
?>

参考URL

Custom Field Suite でループ項目のn番目の画像があるかどうかでの条件分岐での不具合について

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[初心者向け] laravel ルーティング

ルーティング

アクセスしたアドレスを元に処理を割り振ること。

phpのときはwebappっていうフォルダの中にhello.phpファイルを用意すれば、http:〇〇_webapp/hello.phpでアクセスできましたが、
laravelでは特定のアドレスにアクセスすると、そのアドレスに割り当てられたプログラムが実行されます。
このように「〇〇というアドレスにアクセスしたら、✖️✖️という処理を呼び出す」
という関連付けを行っている機能。

routesフォルダにあるweb.phpを開きます。

web.php
<?php
Route::get('/', function () {
    return view('welcome');
});

これは、laravelのあの白いページを表示させる処理です。

ルートの情報の基本(GETアクセス)

Route::get(アドレス, 関数など);
getメソッドでアドレスと処理を割り当てる
第一引数:アドレス
第二引数:アドレスによって呼び出される処理(関数、コントローラーなど)

では、web.phpをみていきましょう。
第一引数は'/'でトップページを表していて、
第二引数は関数を指定しています。
内部では、returnで返り値を指定。返される値が、そのアドレスにアクセスした時に表示される内容。
view関数を使うことで「views」フォルダのテンプレートファイルを使用できる。
(viewsファイルはresourcesフォルダにあります)

では、welcome.blade.phpをみていきましょう。

スクリーンショット 2020-03-28 13.15.18.png

laravelのところなどを書き換えてみるとブラウザに反映されているのが分かります。
@で始まる文はHTMLでもPHPでもなく、Bladeというlaravelのソースコードです。
「view」フォルダの中にテンプレートファイルが用意されそれをview関数で読み込んでいます。

HTMLを出力する

次は実際に動かしてみましょう
routesフォルダのweb.phpを開いて以下を追加してください

web.php
<?php
Route::get('hello', function () {
    return '<html><body><h1>Hello</h1><p>This is sample page.
        </p></body></html>';
});

書いたら、htpp://localhost:8000/helloにアクセスをすると
スクリーンショット 2020-03-30 14.24.57.png
となれば成功です。

returnでHTMLのコードを直接渡すことで、そのソースコードがWebブラウザへと送られているのが分かります。

ルートパラメータ

Route::get('〇〇/{パラメータ}', function($受け取る引数){・・・});
getの第一引数に{パラメータ}とパラメータを指定し、関数に引数を用意することで、アクセスしたアドレスからパラメータを取り出せる。

web.php
<?php
Route::get('hello/{msg}',function($msg){
    $html = <<<EOF
    <html>
    <head>
    <title>Hello</title>
    </head>
    <body>
      <h1>Hello</h1>
      <p>{$msg}</p>
      <p>これはサンプルページで作ったページです。</p>
    </body>
    </html>
    EOF;

      return $html;
});

スクリーンショット 2020-03-30 15.17.10.png

今回はlocalhost:8000/hello/の後にaaaaaと入力しました。
そうすると$msgにパラメータが代入され、表示されています。

先ほどのは必須パラメータといいパラメータを指定しないとエラーになります。
パラメーターをつけなくてもアクセスできるようにするには、任意パラメータを使いましょう。

web.php
<?php
Route::get('hello/{msg?}',function($msg='no massage.'){ ・・・・

とパラメータに「?」を付け、$msgに初期値を与えるとパラメータがなくてもアクセスできます。
スクリーンショット 2020-03-30 15.24.59.png

となれば成功です。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【初心者向け】PHPマスター講座 vol.3(代数演算子を学ぼう)

みなさんこんにちは!けいです

今回は「代数演算子」について解説します!!

【PHPマスター講座】演算子とは

===========================

▶︎演算子(えんざんし)とは何か??

ひとつ以上の値 (あるいはプログラミング用語における「式」) から別の値 (制御構造が式になるように) を生み出すもの(引用先:PHPマニュアル)

見てもらうとわかるように…

マニュアルは「これでもか!」ってくらい
簡単な内容を複雑に書く天才なので

今回は演算子の中でも
初心者が一番初めに学んでおくべき

【代数演算子】について
一つずつ丁寧に解説していきます!


▶︎【代数演算子の「6つの種類」】?

・「+」:「足し算」
・「-」:「引き算」
・「」:「掛け算」
・「/」:「割り算」
・「%」:「剰余算」
・「
**」:「累乗」


代数演算子って言葉は難しそうですが
基本的には上記「6つの種類」しかありません!

なんだかホッと、安心できますよね〜

===========================

▶︎代数演算子を実践で学ぼう?(基礎編)

<?php

//足し算(「+」を使います)
echo 100+50;
echo "<br>";

//引き算(「-」を使います)
echo 100-50;;
echo "<br>";

//掛け算(「*」を使います)
echo 100*50;;
echo "<br>";

//割り算(「/」を使います)
echo 100/50;;
echo "<br>";

//剰余算(「%」を使います)
echo 100%50;;
echo "<br>";

//累乗(「**」を使います)
echo 10**2;
echo "<br>";

?>

===========================

▶︎【表示結果】

150 //【足し算】(100+50)
50 //【引き算】(100-50)
5000 //【掛け算】(100*50)
2 //【割り算】(100/50)
50 //【剰余算】(100%50)
100 //【累乗】 (10**2)`

===========================

?ポイント?

・掛け算について
▶︎プログラミングだと
「×」の代わりに「*」を使います!

・引数(パラメーター)の書き方について
▶︎print(1+1);と書くと、表示結果は「2」
▶︎print('1+1');と書くと、表示結果は「1+1」

※引数の両端にクオテーション('')がないと
「計算式」として扱われます!

※引数の両端にクオテーション('')があると
「文字列」として扱われます!

===========================

▶︎代数演算子を実践で学ぼう?(応用編)

【補足】
前回執筆したVol.2の「変数を学ぼう」をベースに「変数」を使って実践的に学んでいきましょう!

※「変数」の理解がまだ不安な人は、リンク先に飛んで確認お願いします!

<?php

//変数を「3種類」セット(x,y,z)
$x = 2;
$y = 3;
$z = 4;

//足し算と変数のセット
echo $x + $y;
echo "<br>";

//引き算と変数のセット
echo $z - $x;
echo "<br>";

//掛け算・足し算と変数のセット
echo $x *($y+$z);
echo "<br>";

//割り算・引き算と変数のセット
echo $x /($y-$z);
echo "<br>";

//掛け算・剰余算と変数のセット
echo $x *($y%$z);
echo "<br>";

//累乗・足し算と変数のセット
echo $x **($x+$y);
echo "<br>";

?>

===========================

▶︎【表示結果】

//足し算と変数のセット(2+3)
5

//引き算と変数のセット(4-2)
2

//掛け算・足し算と変数のセット(4+3)*2
14

//割り算・引き算と変数のセット(4-3)/2
-2

//掛け算・剰余算と変数のセット(3%4)*2
6

//累乗・足し算と変数のセット(2+3)**2
32

===========================

さて、今回のPHPマスター講座 vol3(代数演算子を学ぼう)はここまでとなります!

少しでもあなたのPHP学習のお役に立てれば幸いです?

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【phpbb】javascriptファイルをテンプレートごとに読み込む

javascriptファイルを特定のテンプレートで読み込みたい

phpbb3.2.5を使用しています。
ソースを見ると</body>の直前でjqueryが読み込まれています。
該当ファイルは./styles/prosilver/template/overall_footer.htmlです。
このファイルは基本的にすべてのページのフッター部分で使われています。

で、そのファイルの下の方に{$SCRIPTS}という記述があります。

/styles/prosilver/template/overall_footer.html
<!-- EVENT overall_footer_after -->

<!-- IF S_PLUPLOAD --><!-- INCLUDE plupload.html --><!-- ENDIF -->
{$SCRIPTS}

<!-- EVENT overall_footer_body_after -->

</body>
</html>

テンプレートごとにjavascriptファイルを読み込む場合にここで表示されます。

テンプレート側の記述は以下のような感じで、<!-- INCLUDEJS -->タグ内にjavascriptファイルを記述します。

/styles/prosilver/template/sample.html
<!-- INCLUDEJS {PATH}/javascript/sample.js -->

そうすると実際に生成されるhtmlは以下のような感じになります。

sample.html
<script type="text/javascript" src="./../assets/javascript/jquery.min.js"></script> 
<script type="text/javascript" src="./../assets/javascript/core.js?assets_version=55"></script>
<script src="./../assets/javascript/sample.js?assets_version=55"></script>/* ←今回追加した部分 */
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravel6 Eloquent で複数代入を使用したupdate()の書き方と注意点

初投稿です。
なんか公式のドキュメントに書いていない気がするので書きました。
バージョンはLaravel6で確認してまいすが、5.1~7.*は多分同じ。

複数代入とは

こうじゃなくて。

$flight = App\Flight::find(1);
$flight->name = 'New Flight Name';
$flight->hoge = 'New Flight Hoge';
$flight->save();

こうするやつ。

App\Flight::find(1)->update([
    'name' => 'New Flight Name',
    'hoge' => 'New Flight Hoge',
]);

update()を使います。
$fillableか$guardedをModelに定義していないとエラーになります。
更新したくない値がリクエストに含まれていても、とりあえずは安心です。

呼ばれてるのはこれ。実はfill()してsave()してるだけ。

\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Model.php
    /**
     * Update the model in the database.
     *
     * @param  array  $attributes
     * @param  array  $options
     * @return bool
     */
    public function update(array $attributes = [], array $options = [])
    {
        if (! $this->exists) {
            return false;
        }

        return $this->fill($attributes)->save($options);
    }

実は二種類あるupdate()

ここが注意点です。
こんな風に書いてしまった場合

App\Flight::where(['id' => 1])->update([
    'name' => 'New Flight Name',
    'hoge' => 'New Flight Hoge',
]);

where()はBuilderを返すので、Builderのupdate()が呼ばれます。

\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Builder.php
    /**
     * Update a record in the database.
     *
     * @param  array  $values
     * @return int
     */
    public function update(array $values)
    {
        return $this->toBase()->update($this->addUpdatedAtColumn($values));
    }

こちらは戻り値が「変更された行」ですので、updated_atがないテーブルとかだと、普通に0が返ってきます。(ifで悲しいことになるやつ)
ついでに$fillable$guardedも効きません。
ここに書いてる通り、Modelとか関係ないやつです。

まとめ

EloquentはModelだったりBuilderだったりCollectionだったりするので注意が必要です。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

qiitaの記事一覧を自分用にわかりやすく

qiitaの記事一覧がページネーションされてしまっていてタイトルを探しづらいので、
qiitaのAPIを利用して超簡易的に自分用に一覧を作りました。
{APIトークン} と {自分のユーザ名} の部分だけは書き換えてください。

<?
$res = exec('curl -H "Authorization: Bearer {APIトークン}" "https://qiita.com/api/v2/items?per_page=100&query=user:{自分のユーザ名}');
$json = json_decode($res);
foreach($json as $a){

    $tags = [];
    foreach($a->{"tags"} as $t){
        $tags[] = "[".$t->{"name"}."]";
    }
?>
<a href="<?= $a->{"url"} ?>" target="_blank"><?= $a->{"title"} ?></a> <?= implode(" ", $tags) ?><br>
<?
}
?>

これで自分の一覧がページネーションなしで表示されます。
スタイルも特に何も当てていないので適当に当ててください。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

qiitaの限定公開一覧をわかりやすく

qiitaの限定公開一覧がページネーションされてしまっていてタイトルを探しづらいので、
qiitaのAPIを利用して超簡易的に自分用に一覧を作りました。
{APIトークン} と {自分のユーザ名} の部分だけは書き換えてください。

<?
$res = exec('curl -H "Authorization: Bearer {APIトークン}" "https://qiita.com/api/v2/items?per_page=100&query=user:{自分のユーザ名}');
$json = json_decode($res);
foreach($json as $a){

    $tags = [];
    foreach($a->{"tags"} as $t){
        $tags[] = "[".$t->{"name"}."]";
    }
?>
<a href="<?= $a->{"url"} ?>" target="_blank"><?= $a->{"title"} ?></a> <?= implode(" ", $tags) ?><br>
<?
}
?>

これで自分の一覧がページネーションなしで表示されます。
スタイルも特に何も当てていないので適当に当ててください。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む