
/** Geminiが自動生成した概要 **/
SOY Shopの予約カレンダー機能がアップデートされ、スマホ版での表示が改善されました。
主な変更点は以下の通りです。
* ○ヶ月先以降のカレンダー非表示設定の追加
* スマホ表示時の日付カラム数設定とページャ設定の追加
* 予約可能期間が2週間から2ヶ月に延長
これらのアップデートにより、スマホユーザーはより使いやすく、長期的な予約もしやすくなりました。パッケージはサイトからダウンロード可能です。
/** Geminiが自動生成した概要 **/
SOY Shopの予約カレンダー機能がアップデートされ、スマホ版での表示が改善されました。
主な変更点は以下の通りです。
* ○ヶ月先以降のカレンダー非表示設定の追加
* スマホ表示時の日付カラム数設定とページャ設定の追加
* 予約可能期間が2週間から2ヶ月に延長
これらのアップデートにより、スマホユーザーはより使いやすく、長期的な予約もしやすくなりました。パッケージはサイトからダウンロード可能です。
/** Geminiが自動生成した概要 **/
SOY CMSで、サイトを一つ深い階層に作成する方法を解説します。
まず、サイトIDを「hoge」として、/var/www/html/hogeにサイトを作成します。次に、/var/www/html/hoge/huga のように、hugaディレクトリを作成し、必要なファイルを配置します。
データベースのSiteテーブルを開き、サイトIDが「hoge」のレコードのurlとpathを、それぞれ `http://example.com/hoge/huga/` と `/var/www/html/hoge/huga/` に変更します。
最後に、/var/www/html/hoge/huga/.htaccess の RewriteBase を `/hoge/huga` に変更します。
稼働中のサイトのURLを変更する場合は、上記の手順に加えて、SOY CMS管理画面でサイトURLを変更する必要があります。
/** Geminiが自動生成した概要 **/
SOY CMSブログの記事ページからSOY Inquiryで作成したお問い合わせフォームへ遷移する際、記事名を引き継ぎたいという要望に応えるため、SOY CMSとSOY Inquiry双方に機能追加を行いました。
SOY CMS側では「SOY Inquiry連携プラグイン」を追加。記事ページにフォームへのリンクを設置し、クリックすると記事名を渡しつつフォームへ遷移します。SOY Inquiry側では「記事名 [SOY CMSブログ連携]」カラムを追加し、受信した記事名を表示します。
プラグインの設定方法はSOY CMS側のプラグイン詳細画面に記載されています。記事名以外の項目連携も要望に応じて対応可能です。利用にはSOY CMSとSOY Inquiry両方のアップデートが必要です。
/** Geminiが自動生成した概要 **/
この記事では、PHPにおけるSQLインジェクション対策としてプリペアードステートメントの有効性を検証しています。まず、脆弱なコード例を示し、攻撃者がSQL文を操作して意図しないデータを取得できることを実演。次に、プリペアードステートメントを用いた修正版を紹介し、SQL文と入力データを分離することで攻撃を防ぐ仕組みを解説しています。具体的には、プレースホルダを用いてSQL文を準備し、executeメソッドでパラメータをバインドすることで、入力データがSQL文として解釈されることを防いでいます。結果、同じ攻撃を試みてもデータが取得できず、プリペアードステートメントの有効性が確認されました。関連記事として、SOY2DAOでのプリペアードステートメントの利用方法も紹介されています。
/** Geminiが自動生成した概要 **/
WordPressからのデータ抽出のため、データベーススキーマのバージョン調査を行った。テーブル名は`wp-includes/wp-db.php`に定義されており、バージョン2.5.0から変更がない。テーブルスキーマは`wp-admin/includes/schema.php`にSQLで定義され、バージョン3.3.0から変更がないことがわかった。よって、データ抽出ツールはWordPress 3.3.0以降に対応させ、それ以前のバージョンはアップグレードしてから利用するよう条件付けすれば良い。
/** Geminiが自動生成した概要 **/
SOY InquiryのMySQL版がIPv6アクセスに対応しました。従来はIPv4アドレスのみ記録していたため、IPv6環境下ではエラーが発生し問い合わせが中断される問題がありました。今回のアップデートでIPアドレスカラムの文字数上限を拡張し、IPv6アドレスも記録可能になりました。同様の変更はSOY Shopのアクセスブロック機能にも適用されています。最新版は公式サイト(https://saitodev.co/soycms/soyinquiry、https://saitodev.co/soycms/soyshop)からダウンロード可能です。
/** Geminiが自動生成した概要 **/
SOY CMSの長年の利用者から、既存記事のユーザビリティ向上のため、カスタムフィールドのデータをカスタムサーチフィールドに移行したいという要望があり、対応プラグインを開発しました。カスタムサーチフィールドは、検索性向上のためデータ型を最適化しており、プラグインはデータ型の差異を考慮した移行を実現します。設定画面で双方のカラム対応を設定し、実行ボタンで移行完了。文字列型のみ対応の現時点でのパッケージはsaitodev.co/soycms/からダウンロード可能です。
/** Geminiが自動生成した概要 **/
SOY CMSの記事毎に無制限に画像をアップロードできるプラグインを開発。カスタムフィールドでは複雑になる複数画像管理を、独立したプラグインで実現。記事投稿画面にアップロードフォームを設置し、公開側のブログ詳細ページで表示できる。SQLのTEXTカラム容量分まで画像パスを保存可能。操作性には改良の余地があるものの、即興で開発したパッケージはsaitodev.co/soycms/からダウンロードできる。
/** Geminiが自動生成した概要 **/
SOY InquiryでParsley.jsを使用する際のチェックボックス対応方法として、管理画面で「required」属性と「data-parsely-trigger」属性を追加します。これにより、Parsely.jsと連携し、フォーム送信時にチェックボックスが選択されていない場合にエラーメッセージが表示されます。対応済みのパッケージは公式サイトよりダウンロードできます。
/** Geminiが自動生成した概要 **/
SOY InquiryにParsley.jsを組み込むと、見栄えの良い入力内容チェックが利用できます。フォームテンプレートにParsley.jsのスクリプトを挿入し、SOY Inquiryのフォーム設定画面で各項目にdata-parsely-triggerとrequired属性を設定します。さらに、data-parsely-required-message属性を追加すると、エラーメッセージをカスタマイズできます。これにより、各項目に合わせたエラーメッセージが表示され、ユーザーフレンドリーなフォームが作成できます。
/** Geminiが自動生成した概要 **/
SOY Shopを活用した買取管理アプリが人文と社会の書林様サイト(https://www.tetsugakukaitori.com/)に導入されました。従来のSOY Inquiryでの買取依頼フォームに加え、SOY Shopの顧客管理機能と連携し、買取依頼の一元管理を実現。管理画面には専用の買取管理ページが設けられ、SOY Inquiryからの申込情報と連携。顧客はマイページから査定手続き、身分証登録、問い合わせ、査定額承認などが行えます。運営側は手続き状況変更、状況に応じたメール送信、査定結果アップロード、集荷伝票自動作成が可能。顧客情報はSOY Shopの顧客データベースと連携し、2回目以降の買取依頼を簡略化。管理画面のみ使用モードも活用しています。
/** Geminiが自動生成した概要 **/
SOY Inquiryの管理画面で、長いカラム名を持つお問い合わせフォームの表示崩れを解消するアップデートが行われました。従来、最も長いカラム名に合わせて全項目の表示幅が拡張され、無駄なスペースが生じていましたが、今回の修正で改善。最長カラム名の値は改行表示となり、その他の項目は2番目に長いカラム名に合わせた幅で表示されるようになりました。これにより、長いカラム名を含むフォームでも見やすく整形された詳細情報を確認できます。アップデート版はsaitodev.co/soycms/soyinquiry/からダウンロード可能です。
/** Geminiが自動生成した概要 **/
SOY Inquiryの住所カラムに、郵便番号入力後、自動で住所検索を行う新機能が追加されました。住所(JS版)カラムで自動住所検索モードを有効にすると、郵便番号入力時にリアルタイムで住所検索を実行し、市区町村カラムに結果を自動挿入します。検索ボタンは非表示となり、入力桁数に応じて検索結果も動的に変化します。ただし、一つのフォームで住所(JS版)カラムは一つしか使用できません。複数利用希望の場合は改修が必要です。新機能搭載パッケージはsaitodev.co/soycms/soyinquiry/ からダウンロード可能です。
/** Geminiが自動生成した概要 **/
SOY Inquiryの連番カラム機能が拡張され、接頭語と桁数指定が可能になりました。 「2019120001」のような複雑な連番を自動生成できます。管理画面で接頭語、桁数、連番を設定することで、例えば次回番号「4」の場合、桁数4なら「0004」、接頭語「ABC」なら「ABC0004」となります。桁数を超える場合は調整されます。日付置換文字列にも対応し、日付に応じた接頭語も可能です。新機能搭載パッケージはsaitodev.co/soycms/soyinquiry/ からダウンロードできます。
/** Geminiが自動生成した概要 **/
SOY Inquiryに複数ファイルアップロードカラムが追加されました。現在試作段階で、サーバー設定に依存した無制限アップロードや、一部ファイルのエラー発生時の個別エラー表示未対応などの課題が残っています。画像リサイズ機能は実装済みです。アップロード枚数制限の設定は2019年8月16日に追加されました。ダウンロードはsaitodev.co/soycms/soyinquiry/ から可能です。
/** Geminiが自動生成した概要 **/
SEO対策として表示速度向上に取り組んでいるサイト運営者が、SOY CMSの記事詳細表示を高速化するプラグインを開発した。従来、柔軟性のため記事テーブルのエイリアスカラムにUNIQUEインデックスを貼っていなかったが、今回ユニーク制約を設けることで高速化を実現。同時に、記事の投稿時刻にもインデックスを追加し、アーカイブページの表示速度も向上させた。投稿時刻は同時刻投稿の場合、1秒ずらす仕様とした。このプラグインはダウンロード後、有効化することでデータベースに反映される。
/** Geminiが自動生成した概要 **/
SOY Inquiryでアップロードフォームを設置した際、確認メールに画像を表示するには、PHPのメール送信機能では画像を直接埋め込めないため、HTMLメールで画像のURLを指定する必要がある。 送信メール設定でHTMLメールを利用し、メール本文にアップロードファイルへのURLを記述するSmartyタグを追加する。ただし、このURLは管理画面からのみアクセス可能なので、.htaccessでBasic認証を設定してセキュリティを確保する。 画像のURLは、SOY Inquiryのバージョンによって記述方法が異なり、古いバージョンではファイルIDを直接URLに含める方法、新しいバージョンでは専用のSmartyタグを使用する方法があるため、バージョンに合わせて適切な方法を選択する必要がある。
/** Geminiが自動生成した概要 **/
SOY Inquiryで日付入力にカレンダー形式を追加するには、jQuery UIのDatepickerを利用します。まず、フォーム設置ページのテンプレートにjQueryとjQuery UI、日本語化ファイルのCDNを読み込むscriptタグを追加します。次に、SOY Inquiryで日付のカラムを作成し、属性に`id="datepicker"`を設定します。これにより、フォームにフォーカスを当てるとカレンダーが表示され、日付を選択できるようになります。Datepickerは日付選択の制限等、高度な設定も可能です。詳細はjQuery UIの公式ドキュメントを参照ください。
/** Geminiが自動生成した概要 **/
SOY Inquiryにフォーム毎の通し番号を自動生成する機能が追加されました。この機能は、送信完了画面、自動返信メール、管理画面の受信一覧に表示可能です。通し番号は連番カラムで管理され、非表示設定も可能です。管理画面で連番カラムをフォームの最初に配置すれば、受信一覧での表示も実現できます。「次回お問い合わせ時に生成する番号」を設定することで、番号を飛ばすことも可能です。機能追加版はサイトからダウンロードできます。ただし、自作デザインのフォームを使用する場合は、PHPファイルの修正が必要です。修正方法の解説ページも用意されていますが、難しい場合はサイトから問い合わせも可能です。
/** Geminiが自動生成した概要 **/
SOY Shopでカテゴリごとに商品一覧の並び替え順を変える方法。カスタムフィールドで「使用人数」や「使用温度」などの項目を作成し、ソートに利用する設定にする。データベースのカラム型を数値に変更。soyshop.item.list拡張ポイントでプラグインを作成し、getSortメソッドでカテゴリごとに異なるソート条件を返す。テントなら使用人数の降順、シュラフなら使用温度の昇順など。標準設定は価格の昇順にする。URLを変えずに同一ページで並び替え順を変えられるため、SEOにも有効。
/** Geminiが自動生成した概要 **/
SOY Shopはネットショップだけでなく実店舗の販売管理にも利用されるようになり、複数店舗で「誰が注文を受け付けたのか」を把握するニーズが高まった。従来、各店舗のアカウントで管理すれば変更履歴に対応者IDが残るが、カート注文では意図したIDが記録されない問題があった。そこで、カート注文にはシステム側で特定の値を挿入する機能と、対応者IDで検索できるプラグインを追加。これにより、ネット注文と実店舗注文のどちらでも、対応者による注文の絞り込みが可能になった。このアップデートは地味ながらも、業務効率化に繋がる重要な改善である。
/** Geminiが自動生成した概要 **/
SOY Inquiryに、悪質な問い合わせをブロックする機能が追加されました。qq.comドメインからのスパム問い合わせが急増したため、設定画面でカンマ区切りでドメインを指定してブロックする機能を実装。メールアドレス必須設定時に限り、アドレス未入力もブロック対象となります。 この機能追加により迷惑問い合わせは解消されました。ただし、完璧な対策ではないため、将来的には画像認証の改善も検討されます。更新版パッケージはサイト(https://saitodev.co/soycms/soyinquiry)からダウンロード可能です。
/** Geminiが自動生成した概要 **/
SOY CMS用の「記事カレンダー」プラグインが開発されました。ブログ記事をカレンダー形式で表示し、投稿日を視覚的に把握できます。記事タイトルだけでなく、カスタムフィールドの内容も出力可能で、サムネイルプラグインと組み合わせることで画像表示も可能です。これにより、記事一覧をカレンダー上にサムネイル付きで表示するなど、柔軟な表示を実現できます。予約サイト構築など、従来のカレンダー機能とは異なる点が特徴です。サンプルは「毅と亮子のサラメシ」サイトで確認できます。パッケージはsaitodev.co/soycms/からダウンロード可能です。
/** Geminiが自動生成した概要 **/
kintoneアプリで設定した日付にチャットワークへタスクを自動登録するアプリ開発の続き。今回はGo言語でkintone REST APIから取得したJSONデータを扱うための構造体を設計し、マッピングを行った。取得データは「レコード番号」「月」「ラベル」「日」等を含み、これをGoの構造体へ変換することでデータ操作を可能にした。具体的には`Field`構造体でフィールドの型と値を、`Record`構造体でレコード群を表現し、`json.NewDecoder`を用いてJSONをデコードした。これにより、ラベル名等の値をプログラムから参照できるようになった。次回は取得値を用いてチャットワークへのタスク登録を行う。
/** Geminiが自動生成した概要 **/
kintoneとチャットワークを連携し、タスクを自動登録するアプリをGo言語で開発する過程を説明。kintoneにアプリを作成し、Go言語でkintoneのREST APIを使用してデータを取得するコードを紹介。APIキー、ID、パスワードを用いて認証し、JSON形式のデータを取得することに成功。今後の課題として、取得したJSONデータをGo言語で扱うための構造体の作成が挙げられている。
/** Geminiが自動生成した概要 **/
SOY CMSを使わずにSOY2DAOでSQLを実行し、オブジェクトで結果を取得する方法を解説しています。 独自SQLの実行には`executeQuery()`ではなく`executeObjectQuery()`を使用します。`executeObjectQuery()`の第一引数にSQL文、第二引数にDAOクラス名を指定します。戻り値は指定したクラスのオブジェクト、もしくはオブジェクトの配列となります。記事では、`SOY2Sample`クラスと対応するテーブル`soy2_sample`を例に、`id`と`text`を取得するSQLを実行し、結果を`SOY2Sample`オブジェクトの配列として受け取る方法をコード付きで示しています。これにより、データベースから取得したデータをオブジェクトとして扱いやすくなります。
/** Geminiが自動生成した概要 **/
kintoneで特定の領域だけを印刷範囲にする方法を紹介しています。kintoneの標準機能では印刷範囲の指定が難しいため、JavaScriptカスタマイズで対応します。具体的には、印刷時に特定の要素に"print-area"というクラスを追加し、CSSでこのクラスに`page-break-inside: avoid;`を指定することで、意図しない改ページを防ぎます。また、印刷ボタンのクリックイベントでJavaScriptを実行し、印刷後にクラスを削除する処理を追加することで、通常の画面表示への影響をなくします。この記事では、カレンダーの印刷を例に、日付行と予定行が分割されないように印刷範囲を制御する具体的なコードを解説しています。
/** Geminiが自動生成した概要 **/
SOY Shopの注文検索機能を拡張し、オーダーカスタムフィールド(日付型)を検索条件に追加できるプラグインを開発しました。管理画面の注文一覧にカスタムフィールドの日付検索欄が追加され、注文詳細に記録した任意の日付情報(例:返答期限)に基づいた検索が可能になります。この機能は「やまどうぐレンタル屋さん」で実装した顧客管理機能強化の一環で、管理画面のみ表示のカスタムフィールドに「○月○日までに返答」といった伝言を記録し、検索で容易に抽出するといった活用が想定されます。プラグインはsaitodev.coからダウンロード可能です。
/** Geminiが自動生成した概要 **/
管理画面の注文検索フォームを拡張するsoyshop.order.search.php拡張ポイントの説明。searchItemsメソッドでフォームに検索項目を追加し、setParameterメソッドで対応するSQLサブクエリを指定する。 searchItemsはラベルとフォーム要素を配列で返し、フォームのname属性は"search[customs][モジュールID][ユニークなパラメータ]"形式。setParameterは"id IN (SELECT ...)"形式のサブクエリを返す。伝票番号記録プラグインのコードを読むと理解が深まる。
/** Geminiが自動生成した概要 **/
SOY Shopの顧客管理機能を活用し、新潟県司法書士会の会員検索サイトを構築。標準機能とプラグイン(ユーザーカスタムサーチフィールド、顧客グループ、顧客住所GoogleMaps連携、ストレージ)を組み合わせ、簡裁代理権などのカスタム項目や事務所情報、地図連携を実現。管理画面は不要な注文・商品関連機能を非表示化し、会員管理に最適化。カート・マイページ機能も無効化。都道府県の標準設定を新潟県に設定するなど、ユーザビリティも向上。構築手順を紹介しつつ、検索結果・詳細ページ作成については問い合わせを促している。
/** Geminiが自動生成した概要 **/
SOY CMSを利用したネットショップ運営において、初期段階では自由度の高さがメリットとなるが、注文データの増加に伴い表示速度の低下という課題に直面する。これはGoogle検索ランキングにも影響する。記事では、表示速度低下の原因としてデータベース設計の冗長化、特にTEXTカラムの多用を指摘。SOY CMS/Shopでは不要な機能をインストールしない、外部データベースの活用などで冗長化を回避しているものの、注文データテーブルでのTEXTカラム使用は課題として残る。解決策として、サイト高速化とデータベースチューニングの必要性を提示している。具体的な対策は後述としているが、別記事ではPageSpeed Insightsのスコア99達成についても言及している。
/** Geminiが自動生成した概要 **/
カタログサイト構築にネットショップ用CMS(例:SOY Shop)を推奨。理由は、将来的な物販開始時のデータ移行が不要になるため。ブログ利用の場合、商品登録のインポートが煩雑になる。
CMSなら注文ボタン設置で物販開始が可能。事例としてコトブキ園のサイトを紹介。商品一覧・詳細ページがあり、豊富なコンテンツ登録が可能。高度な検索フォーム設置も容易。
会員制カートプラグインで直購入防止、SOY Inquiry連携で商品毎の問い合わせフォーム設置も実現できる。これにより、情報豊富で問い合わせ対応も可能なカタログサイトが構築できる。
/** Geminiが自動生成した概要 **/
SOY2DAOでプリペアードステートメントを使う方法を解説します。SQLインジェクション対策として、SQL内に直接値を埋め込むのではなく、プレースホルダ(:name)を使用します。
例:
$sql = "SELECT * FROM soyshop_user WHERE mail_address = :mail AND password = :pass";
$binds = array(":mail" => $m, ":pass" => $p);
$results = $dao->executeQuery($sql, $binds);
executeQueryの第二引数にプレースホルダと値の連想配列を渡すことで、SOY2DAOが安全にSQLを実行します。これにより、$mや$pにSQL構文が挿入されても、悪意のあるクエリの実行を防ぎます。
/** Geminiが自動生成した概要 **/
SOY Shopのマイページで、ログイン有無によるテンプレート切り替え機能が追加されました。従来はログイン前後で同じテンプレートを使用していましたが、ログイン前は1カラム、ログイン後は2カラムといったレイアウト変更の要望に応えるため、ログイン時に別のテンプレートを読み込む仕組みが実装されました。
具体的には、`mypage.html` というテンプレートを使用している場合、ログイン時は `mypage_no_login.html` と `mypage_no_login.ini` があればそちらが優先的に使用されます。これらのファイルは管理画面からは生成できず、手動でサーバーにアップロードする必要があります。機能の詳細はSOY CMSフォーラムとGitHubリポジトリで公開されています。
/** Geminiが自動生成した概要 **/
EC-CUBEの動作遅延に悩むユーザーが増加し、高速なSOY Shopへの移行ニーズが高まっている。そこでEC-CUBEからSOY Shopへのデータ移行プラグインが開発された。このプラグインはEC-CUBEのデータベースから直接データを読み込み、SOY Shop用に変換・挿入する。パスワードはセキュリティ上、ランダムに設定され、ユーザーには再設定を促すメルマガ送信が推奨される。EC-CUBE2系と3系のデータ移行実績があり、フォーラムで配布されている。
/** Geminiが自動生成した概要 **/
SOY Inquiryを使ってレスポンシブデザインのお問い合わせフォームを作成する方法を紹介しています。レスポンシブデザインとは、PCとスマートフォンでそれぞれ見やすい表示になるよう自動調整されるWebデザイン手法です。設定は、フォーム設定で「responsive」を選び、スタイルシートを読み込むをチェックするだけ。HTML5のrequired属性にも対応し、必須項目の未入力時に警告を表示できます。設定はカラム設定で「required属性を利用する」をチェックするだけ。pattern属性も利用可能で、入力パターンの指定ができます。フォームの属性にpattern="正規表現"を追加するだけで設定できます。ただし、住所検索機能とは競合するため注意が必要です。ダウンロードやフォーラムへのリンクも記載されています。以前の記事「スマホ対応のお問い合わせフォームを作ってみた」の内容を元に、更に機能が追加されています。