コードスニペットライブラリ

便利なコードスニペットとソリューションのコレクション

このスニペットは、Smartyテンプレート構文を使用してページネーションUIを作成します。前後のリンク、現在のページの強調表示、多数ページの場合の省略記号などが含まれています。

                    <div class="row">
  {if isset($pages) && $pages>1}
    <nav style=" text-align: center; ">
      <ul class="pagination">
        {if ((int)$page+1)-1 > 0}<li class="page-item"><a class="page-link" href="?pagina={$page-1}">← <span>Precedente</span></a></li>{/if}

        {assign var="foo" value=1}
        {for $foo=max(1, $page-5) to min($pages, $page+5)}
          <li class="page-item {if ($foo-1)==(int)$page}active{/if}"><a class="page-link" href="?pagina={$foo-1}">{$foo}</a></li>
        {/for}

        {if $foo<($pages)}
          <li class="page-item"><a class="page-link disabled" href="#">...</a></li>
          <li class="page-item"><a class="page-link" href="?pagina={$pages-1}">{$pages}</a></li>
        {/if}

        {if ((int)$page+1)+1 <= $pages}<li class="page-item"><a class="page-link" href="?pagina={(int)$page+1}"><span>Successivo</span> → </a></li>{/if}
      </ul>
    </nav>
  {/if}
</div>
                  

このPHP関数は、ハーバサインの公式を用いて2つの地理座標間の距離を計算し、キロメートル、海里、マイルに対応しています。

                    function distance_between_two_points($lat1, $lon1, $lat2, $lon2, $unit) {
  if (($lat1 == $lat2) && ($lon1 == $lon2)) {
    return 0;
  }
  else {
    $theta = $lon1 - $lon2;
    $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) +  cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta));
    $dist = acos($dist);
    $dist = rad2deg($dist);
    $miles = $dist * 60 * 1.1515;
    $unit = strtoupper($unit);

    if ($unit == "K") {
      return ($miles * 1.609344);
    } else if ($unit == "N") {
      return ($miles * 0.8684);
    } else {
      return $miles;
    }
  }
}
                  

`ls`、`grep`、`sed`を使って、ディレクトリ構造をツリー形式で表示するコマンドです。ターミナル上で階層構造を視覚的に確認できます。

                    ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*/--/g' -e 's/^/   /' -e 's/-/|/'
                  

このコマンドは、ファイルからキャリッジリターン(`\r`)を削除し、クリーンな内容を新しいファイルに書き出します。主にWindows形式の改行コードをUnix形式に変換する際に使用されます。

                    sed 's/\r$//' docker/docker-compose.yml > docker/docker-compose2.yml
                  

このコマンドは、特定の単語(この場合は 'article')を含むファイルを再帰的に検索し、そのファイルパスを一覧表示します。コードベースやドキュメントフォルダ内で単語がどこに使われているかを特定するのに便利です。

                    grep -rln article
                  

このPHPスニペットは、リクエスト内に 'query' パラメータが存在するかを確認し、`$or` 演算子を使って検索条件の配列を初期化します。これは複数のフィールドに対する柔軟な検索を可能にし、特殊文字や高度な検索パターンにも対応できるように拡張可能です。

                    if(!empty($_REQUEST['query'])){
			$criteria['$or'] = [];
			$testRegex = $_REQUEST['query'];
			$diacriticMap = [
				'A'=>'AⒶAÀÁÂẦẤẪẨÃĀĂẰẮẴẲȦǠÄǞẢÅǺǍȀȂẠẬẶḀĄȺⱯ',
				'AA'=>'Ꜳ',
				'AE'=>'ÆǼǢ',
				'AO'=>'Ꜵ',
				'AU'=>'Ꜷ',
				'AV'=>'ꜸꜺ',
				'AY'=>'Ꜽ',
				'B'=>'BⒷBḂḄḆɃƂƁ',
				'C'=>'CⒸCĆĈĊČÇḈƇȻꜾ',
				'D'=>'DⒹDḊĎḌḐḒḎĐƋƊƉꝹ',
				'DZ'=>'DZDŽ',
				'Dz'=>'DzDž',
				'E'=>'EⒺEÈÉÊỀẾỄỂẼĒḔḖĔĖËẺĚȄȆẸỆȨḜĘḘḚƐƎ',
				'F'=>'FⒻFḞƑꝻ',
				'G'=>'GⒼGǴĜḠĞĠǦĢǤƓꞠꝽꝾ',
				'H'=>'HⒽHĤḢḦȞḤḨḪĦⱧⱵꞍ',
				'I'=>'IⒾIÌÍÎĨĪĬİÏḮỈǏȈȊỊĮḬƗ',
				'J'=>'JⒿJĴɈ',
				'K'=>'KⓀKḰǨḲĶḴƘⱩꝀꝂꝄꞢ',
				'L'=>'LⓁLĿĹĽḶḸĻḼḺŁȽⱢⱠꝈꝆꞀ',
				'LJ'=>'LJ',
				'Lj'=>'Lj',
				'M'=>'MⓂMḾṀṂⱮƜ',
				'N'=>'NⓃNǸŃÑṄŇṆŅṊṈȠƝꞐꞤ',
				'NJ'=>'NJ',
				'Nj'=>'Nj',
				'O'=>'OⓄOÒÓÔỒỐỖỔÕṌȬṎŌṐṒŎȮȰÖȪỎŐǑȌȎƠỜỚỠỞỢỌỘǪǬØǾƆƟꝊꝌ',
				'OI'=>'Ƣ',
				'OO'=>'Ꝏ',
				'OU'=>'Ȣ',
				'P'=>'PⓅPṔṖƤⱣꝐꝒꝔ',
				'Q'=>'QⓆQꝖꝘɊ',
				'R'=>'RⓇRŔṘŘȐȒṚṜŖṞɌⱤꝚꞦꞂ',
				'S'=>'SⓈSẞŚṤŜṠŠṦṢṨȘŞⱾꞨꞄ',
				'T'=>'TⓉTṪŤṬȚŢṰṮŦƬƮȾꞆ',
				'TZ'=>'Ꜩ',
				'U'=>'UⓊUÙÚÛŨṸŪṺŬÜǛǗǕǙỦŮŰǓȔȖƯỪỨỮỬỰỤṲŲṶṴɄ',
				'V'=>'VⓋVṼṾƲꝞɅ',
				'VY'=>'Ꝡ',
				'W'=>'WⓌWẀẂŴẆẄẈⱲ',
				'X'=>'XⓍXẊẌ',
				'Y'=>'YⓎYỲÝŶỸȲẎŸỶỴƳɎỾ',
				'Z'=>'ZⓏZŹẐŻŽẒẔƵȤⱿⱫꝢ',
				'a'=>'aⓐaẚàáâầấẫẩãāăằắẵẳȧǡäǟảåǻǎȁȃạậặḁąⱥɐ',
				'aa'=>'ꜳ',
				'ae'=>'æǽǣ',
				'ao'=>'ꜵ',
				'au'=>'ꜷ',
				'av'=>'ꜹꜻ',
				'ay'=>'ꜽ',
				'b'=>'bⓑbḃḅḇƀƃɓ',
				'c'=>'cⓒcćĉċčçḉƈȼꜿↄ',
				'd'=>'dⓓdḋďḍḑḓḏđƌɖɗꝺ',
				'dz'=>'dzdž',
				'e'=>'eⓔeèéêềếễểẽēḕḗĕėëẻěȅȇẹệȩḝęḙḛɇɛǝ',
				'f'=>'fⓕfḟƒꝼ',
				'g'=>'gⓖgǵĝḡğġǧģǥɠꞡᵹꝿ',
				'h'=>'hⓗhĥḣḧȟḥḩḫẖħⱨⱶɥ',
				'hv'=>'ƕ',
				'i'=>'iⓘiìíîĩīĭïḯỉǐȉȋịįḭɨı',
				'j'=>'jⓙjĵǰɉ',
				'k'=>'kⓚkḱǩḳķḵƙⱪꝁꝃꝅꞣ',
				'l'=>'lⓛlŀĺľḷḹļḽḻſłƚɫⱡꝉꞁꝇ',
				'lj'=>'lj',
				'm'=>'mⓜmḿṁṃɱɯ',
				'n'=>'nⓝnǹńñṅňṇņṋṉƞɲʼnꞑꞥ',
				'nj'=>'nj',
				'o'=>'oⓞoòóôồốỗổõṍȭṏōṑṓŏȯȱöȫỏőǒȍȏơờớỡởợọộǫǭøǿɔꝋꝍɵ',
				'oi'=>'ƣ',
				'ou'=>'ȣ',
				'oo'=>'ꝏ',
				'p'=>'pⓟpṕṗƥᵽꝑꝓꝕ',
				'q'=>'qⓠqɋꝗꝙ',
				'r'=>'rⓡrŕṙřȑȓṛṝŗṟɍɽꝛꞧꞃ',
				's'=>'sⓢsßśṥŝṡšṧṣṩșşȿꞩꞅẛ',
				't'=>'tⓣtṫẗťṭțţṱṯŧƭʈⱦꞇ',
				'tz'=>'ꜩ',
				'u'=>'uⓤuùúûũṹūṻŭüǜǘǖǚủůűǔȕȗưừứữửựụṳųṷṵʉ',
				'v'=>'vⓥvṽṿʋꝟʌ',
				'vy'=>'ꝡ',
				'w'=>'wⓦwẁẃŵẇẅẘẉⱳ',
				'x'=>'xⓧxẋẍ',
				'y'=>'yⓨyỳýŷỹȳẏÿỷẙỵƴɏỿ',
				'z'=>'zⓩzźẑżžẓẕƶȥɀⱬꝣ'
			];
			foreach($diacriticMap as $kk=>$vv){
				$testRegex = str_replace($kk,"[$vv]",$testRegex);
			}
			/*print_r($testRegex);
			exit;*/
			$criteria['$or'][0]['email'] = new MongoRegex($_REQUEST['query'],'i');
			$criteria['$or'][1]['name'] = new MongoRegex($testRegex,'i');
			$criteria['$or'][2]['surname'] = new MongoRegex($testRegex,'i');
                  

このDockerコマンドは、実行中のコンテナ(例:`photoprism`)のログファイルを、`docker inspect` で取得したログパスに空の入力(`:`)をリダイレクトすることで削除します。コンテナを停止せずにディスク使用量を減らす手段として便利ですが、大事なログが失われる可能性があるため注意が必要です。

                    : > $(docker inspect --format='{{.LogPath}}' photoprism)
                  

このコマンドは、指定した名前(この例では `rsync`)のすべての実行中プロセスを `kill -9` と `pidof` を使って強制終了します。複数のプロセスを一度に停止するのに便利ですが、`-9` は SIGKILL を送信し、プロセスを即時終了させるため、後処理なしで止めることになります。慎重に使用してください。

                    kill -9 $(pidof rsync)
                  

`du` コマンドを使用して、カレントディレクトリ内のファイルやディレクトリのディスク使用量を非再帰的にメガバイト単位で計算します。その出力を `sort` に渡し、サイズの大きい順に並べ替えます。ディスク容量を圧迫している要素の特定に便利です。

                    du --max-depth=1 -h -BM | sort -hr
                  

`docker inspect` でコンテナを調べ、その出力を `grep` を使って `working_dir` ラベルの情報だけに絞ります。これにより、ホストマシン上のどのディレクトリからコンテナが起動されたかがわかります。Docker Compose 環境のデバッグ時に便利です。

                    docker inspect nginxphpfpm | grep "com.docker.compose.project.working_dir"
                  

このBashスクリプトは、複数の既存リポジトリを統合してモノレポを作成する処理を自動化します。メインディレクトリを作成し、Gitを初期化し、各リポジトリをクローンしてそれぞれのサブフォルダに移動、タグのリネーム、履歴を保持したままマージし、READMEに各リポジトリへのリンクを追加します。

                    #!/bin/bash

# List of repository names (update with actual repository names)
repos=("repo-1" "repo-2" "repo-3" "repo-4" "repo-5" "repo-6" "repo-7" "repo-8" "repo-9" "repo-11" "repo-12" "repo-13" "repo-14" "repo-15" "repo-16" "repo-17" "repo-18" "repo-19" "repo-20" "repo-21" "repo-22" "repo-23" "repo-24" "repo-25" "repo-26" "repo-27")

# Step 1: Create the monorepo
mkdir monorepo
cd monorepo
git init

echo "# Monorepo" > README.md
echo -e "\n## Included Repositories\n" >> README.md
git add README.md
git commit -m "Initial commit with README.md structure"

cd ..
mkdir repos

# Step 2: Clone each repo, move files into its own folder, and rename tags
for reponame in "${repos[@]}"; do
    cd repos
    git clone https://github.com/yourgithubaccount/$reponame.git
    cd $reponame
    mkdir -p $reponame
    find . -maxdepth 1 ! -name .git ! -name . -exec mv {} $reponame/ \;
    git add .
    git commit -m "Moved repo content into folder $reponame"
    git tag -l | xargs -I {} git tag "$reponame-{}"
    cd ..
    cd ..
done

# Step 3: Add each repository as a remote, merge into the monorepo, and update README.md
cd monorepo
count=1
for reponame in "${repos[@]}"; do
    git remote add -f $reponame ../repos/$reponame
    git merge $reponame/master --allow-unrelated-histories --no-edit
    echo "$count. [$reponame](./$reponame)" >> README.md
    ((count++))
done

git add README.md
git commit -m "Updated README.md with links to merged repositories"