メインコンテンツに移動

メインナビゲーション

  • ホーム
  • サイトマップ
  • ビデオ
  • ご連絡

パンくず

  • ホーム
  • Drupalのモジュール(Feature)を用いてサイト間のデータ移行/開発管理を行います

Drupalのモジュール(Feature)を用いてサイト間のデータ移行/開発管理を行います

drupal
video
development
feature
module usage

モジュール(Feature)が開発ソース管理、コンテンツデータ移行などに利用されます

  • 最初モジュール(Feature)が何に使うかはあまりわからなかったです(いろいろな説明がちゅ抽象的)。
  • 実はDrupalの開発ソース管理(例:開発環境ー>ステージん環境ー>本番環境)、コンテンツデータの移行に使用されます

データ移行例:コンテンツデータ(Article)+Viewsで作成したコンテンツ検索一覧画面

  • データ移行の簡単な例として、既存のコンテンツデータ(例:Article⇒記事)、Viewsで作成したコンテンツ一覧画面を移行します
  • コンテンツデータ移行に必須なモジュール:
    • Feature
    • Node Export (FeatureモジュールにサポートするNode export featuresサブモジュールを有効化)
  • Feature管理画面で必要なモジュール、モジュールの関連、コンテンツデータを選択して、一つのモジュールとして作成し、ダウンロードします
  • 作成されたモジュール(tarファイル)を移行先で通常のモジュールインストールをして、有効化を行います。Feature管理画面で移行元の内容を適用、保存します
  • 具体的な操作はビデオをご参考ください

FeatureがDurupalのすべての設定、構成の移行はできません

  • 移行はモジュール単位で、構成は出力可能なものを中心にしています。以下は移行可能な部分
    • Core : Content Types、 Fields、 Menus、 Taxonomies、 Text formats、 Image styles、 User roles 、 permissions
    • Contribute: Views、 CTools、 Context 、 Panels、 Rules 、 Contexts、 Display Suite
  • 移行できない部分は、例:テーマ、コンテンツに挿入した画像などがあります
    • コンテンツに含まるメディア(例:写真、ビデオ、ファイルなど)がローカル(sites/default/files)に保存したため、移行先の保存パス修正、およびメディアファイルのコピーが手動で行う必要があります
Embedded thumbnail for Drupalのモジュール(Feature)を用いてサイト間のデータ移行/開発管理を行います
drupal
development
module usage

Drupal共有ソースサイトへの移行計画

  • Drupal7で複数のサイト(ドメイン)を構築しました。それぞれのバージョンアップ、ソースのバグ管理に手間がかかります。
  • 一つの共有ソースにすれば、Drupalのバージョンアップ、ソースのバグ管理に効率は良いと考えられています
  • 例:以下イメージのようにサイト移行
  • サイト移行時の両側の違い:
    • Drupalのバージョンは同じ:7
    • モジュール:共有ソース側の方が多い、また同じモジュールに違うバージョンが存在している可能性があります
    • DB:移行先に各サイトは別々のDBで違うコンテンツを有します

サイト移行の一番大きな問題点:メディア保存のフォルダが変わる

  • サイト移行にどんな方法を使っても、元サイトのメディア(例:写真など)保存フォルダー(sites/default)が、共有ソース側に別名のフォルダ(それぞれのサイトのメディア保存フォルダ)に変わります
  • 元サイトにあるメディア(写真、ファイル、ビデオなど)のパスが共有ソース側に移行先フォルダ名で書き換えなければならないです

移行方法1:共有ソース側で新規サイトを構築して、Featureモジュールで旧サイトの設定、Node Exportモジュールでコンテンツを移行します

  • 共有ソース側で以降先のフォルダ(例:pine ⇒ sites/pine)を作成します
    • defaultフォルダ(sites/default)にあるdefault.settings.phpをコピーして、移行先のフォルダ(pine)にペストし、settings.phpに名前を変更します
    • sites.php(sites/sites.php)設定ファイルに移行元のドメイン名とフォルダ名を関連つけます(設定方法:「Drupalのソースを共有する複数サイトの構築」をご参考)
  • 設定されたドメイン名で新サイトへアクセスし、Drupalのインストール手法で新しいサイトを構築します(新しいサイト、移行元のものはなにもない状態)
  • モジュール(Feature)で元サイトの設定を移行します(Drupalのモジュール(Feature)を用いてサイト間のデータ移行/開発管理を行いますをご参考)
    • すべての元サイト設定移行はできません。例:テーマの設定が最初からやり直しが必要はあります(結構手間がかかる作業)
  • モジュール(Node Export)でコンテンツ(例:Article)を元サイトから出力して、移行先にインポートします
    • 大量なコンテンツがある場合、Drushのコマンドで出力したほうが良いでしょう
    • コンテンツに含まれている画像、ビデオ、ファイルなどのパスを移行先のフォルダ名に合わせて変更しなければならない(今回:sites/default ➡ sites/pine すべてのパスを検索して、変更)
  • 元サイトのメディア保存フォルダ(sites/default)にあるすべての内容(settings.php除外)を移行先にフォルダ(sites/pine)にコピーします
  • 移行先でファイルシステム設定画面(ホーム » 管理 » 環境設定 » メディア » ファイルシステム)の元サイトと同じファイルパス設定を行います

移行方法2:元サイトのDBとメディア保存フォルダを移行先にコピーします

  • 元サイトのすべてのものをそのままで移行先にコピーできれば、一番楽です
  • 重要なのは、両サイトが側のDrupalバージョン、モジュールバージョンが完全一致していれば、うまく行きます
    • バージョンが合わなければ、移行後にサイトからエラーがでて、完全に動かなくなりことがあります(以下のエラー例で、実は一つのモジュールバージョン差で引き起こされています)
    • 移行する前にモジュールのバージョン合わせに十分に気を付ける必要はあります
    • もちろん、移行先にでのモジュールバージョンを変えると、他のサイトにも影響を与えるので、調整が必要となります
  • 移行する前に、移行先と移行元のDB、メディアファイルフォルダ(sites/default)の内容をバックアップします(うまく行かなければ、バックアップで戻します)
  • 移行するサイトのすべてDBテーブルをSQL文に出力(MySql:mysqldump)します
    • 出力されたファイルにあるすべてのメディア保存フォルダパスを移行先のフォルダパスに書き換えます(sites/default ➡ sites/pine)
    • もしドメイン名も変わる場合、新しいドメイン名で古いのを書き換えます
  • 移行元のメディア保存フォルダにすべての内容(settings.phpも含む)、移行先にのメディア保存フォルダにコピーします(sites/default ➡ sites/pine)
  • 移行先でファイルシステム設定画面(ホーム » 管理 » 環境設定 » メディア » ファイルシステム)の元サイトと同じファイルパス設定を行います
  • ブラウザで移行先のページにアクセスし、管理者権限でデータベース更新(http://your-site-domin/update.php)を行います(Drushでも更新可能)

結論:新規サイト構築はエラーが少ないが手間がかかります。DBコピーは便利だがエラーが出やすいです。

  • 安心で、きれいに移行する場合新規サイトを構築したほうが良いでしょう。多少手間がかかっても、難しいことは少ないです
  • DBコピーの方式は上級者向けですね。常にエラーの調査、修正にが必要となります
drupal
video
customization
display suite
module usage

コンテンツ表示管理画面でモジュール(Display Suite)の「コードフィールド」内にあるTokey情報を利用して新規フィールド作成

  • コンテンツ管理画面(ホーム » 管理 » サイト構築 » コンテンツタイプ » Article » 表示管理)の下にある「Custom Fields」セクションで「コードフィールド追加」があります
  • 「コードフィールド追加」ボタンをクリックして、フィールドラベル、適応範囲などを入力します。フィールド作成ページの下にある「トーク」チェックボックスをチェックして、Tokenの利用が可能になります
    • 「利用可能なトークンを表示」リンクをクリックして、サイト内すべてのトークンが表示されます
    • 必要なものを検索して、トークン(例:[user:name])をコピーして、Field Codeフォーム入力すればよいです
  • コードフィールドの修正はコンテンツ表示管理画面ではできません。DisplaySuiteの管理画面(ホーム » 管理 » サイト構築 » Display Suite » フィールド)で行います

新規作成したフィールドを画面表示させ、確認

  • コンテンツ表示管理画面(ホーム » 管理 » サイト構築 » コンテンツタイプ » Article » 表示管理)で新規新規作成しフィールを適切な場所に配置します
  • コンテンツ表示された画面で選択したトークンを確認します
  • 実際の操作はビデオでご確認ください

DSのコードフィールドで表示されたすべてのトークの利用はできません

  • ビデオに使用したトークン例:[user:name] と [current-user:name]があります
  • 実際に[user:name]が何にも出力しませんでした。利用可能なのは [current-user:name]でした

DSのコードフィールドいろいろな場所(例:User、Profileなど)で使用可能なので、すべてのトークンが表示されても、その場所で利用できないものがあります

  • DBが広範囲(コンテンツだけではない)で使用可能なので、当然コードフィールド内の利用可能なトークンを定義するのは難しいです。
  • トークン一覧のフィルタリングにできないため、すべてのトークンが表示されます
  • 利用場所を想定して、利用可能トークンの選択は必要となります

どんな場所でどのトークンが利用可能かのドキュメントはあまり見つかっていないです。

  • 経験での判断といろいろなトークンを出力してみて確認したほうが良いでしょう
Embedded thumbnail for Drupalのモジュール(Display Suite)のコードフィールド内のトークン(Token)利用不可のものが多い
drupal
video
display suite
module usage

Drupalのコンテンツ表示設定にレイアウトの変更はできない。すべてのフィールド表示はしていない

  • Drupalのコンテンツ表示管理画面(例:Article: ホーム » 管理 » サイト構築 » コンテンツタイプ » Article の「表示管理」)にある表示タイプ(例:全文)のレイアウト変更はできない
  • そのレイアウトのコンテンツのすべてフィールドが表示されていない(例:投稿日付、投稿者など)

モジュール(Display Suite)導入で、同一表示タイプに複数のレイアウト選択可能、隠されたフィールドの表示/設定が可能になる

  • Drupalのコンテンツ表示には大きな役割を果たしたモジュール(Display Suite)がぜひ利用してください
  • 通常の方法でDisplay Suiteをインストール/有効化します
  • コンテンツの表示管理画面(例:Article: ホーム » 管理 » サイト構築 » コンテンツタイプ » Article の「表示管理」)でDisplay Suiteのレイアウトが表示され、表示必要に応じ選択します
  • また、初期隠されたフィールドも表示されます。表示必要に応じフィールドを表示場所に配置します
  • 具体的な操作法はビデオでご参考ください
  • Display Suiteの応用に「シリーズ記事」をご参考ください
Embedded thumbnail for Drupalのモジュール(Display Suite)でコンテンツレイアウト変更、初期表示されていないフィールドの選択/設定が可能にする
drupal
video
development
feature
module usage

モジュール(Feature)が開発ソース管理、コンテンツデータ移行などに利用されます

  • 最初モジュール(Feature)が何に使うかはあまりわからなかったです(いろいろな説明がちゅ抽象的)。
  • 実はDrupalの開発ソース管理(例:開発環境ー>ステージん環境ー>本番環境)、コンテンツデータの移行に使用されます

データ移行例:コンテンツデータ(Article)+Viewsで作成したコンテンツ検索一覧画面

  • データ移行の簡単な例として、既存のコンテンツデータ(例:Article⇒記事)、Viewsで作成したコンテンツ一覧画面を移行します
  • コンテンツデータ移行に必須なモジュール:
    • Feature
    • Node Export (FeatureモジュールにサポートするNode export featuresサブモジュールを有効化)
  • Feature管理画面で必要なモジュール、モジュールの関連、コンテンツデータを選択して、一つのモジュールとして作成し、ダウンロードします
  • 作成されたモジュール(tarファイル)を移行先で通常のモジュールインストールをして、有効化を行います。Feature管理画面で移行元の内容を適用、保存します
  • 具体的な操作はビデオをご参考ください

FeatureがDurupalのすべての設定、構成の移行はできません

  • 移行はモジュール単位で、構成は出力可能なものを中心にしています。以下は移行可能な部分
    • Core : Content Types、 Fields、 Menus、 Taxonomies、 Text formats、 Image styles、 User roles 、 permissions
    • Contribute: Views、 CTools、 Context 、 Panels、 Rules 、 Contexts、 Display Suite
  • 移行できない部分は、例:テーマ、コンテンツに挿入した画像などがあります
    • コンテンツに含まるメディア(例:写真、ビデオ、ファイルなど)がローカル(sites/default/files)に保存したため、移行先の保存パス修正、およびメディアファイルのコピーが手動で行う必要があります
Embedded thumbnail for Drupalのモジュール(Feature)を用いてサイト間のデータ移行/開発管理を行います
drupal
video
display suite
module usage
template

やりたいこと:コンテンツの表示レイアウト/フィールドを自由変更したいです

  • 既存のNode表示システムでは、レイアウト/フィールドなどの表示を変更したいです
  • 例:Drupalのモジュール(Display Suite)のフィールドTテンプレート(Field Template)で各フィールド表示の調整 

解決:モジュール(Display Suite)の導入

  • モジュール:Display Suite-7.x-2.14
  • モジュールを通常の方法でインストール、有効化します(ビデオをご参考ください)

DSのフィールドテンプレート(field template)の有効化

  • モジュールインストールだけでフィールドテンプレート(field template)は有効になっていません
  • DS(Display Suite)の管理画面(ホーム » 管理 » サイト構築 » Display Suite » Extras )でField Templateタブにある「Enable Field Template」をチェックします
  • 他のオプションが初期設定のままでよいです

コンテンツの表示管理画面でカスタムレイアウトを選択しないとフィールドテンプレートが有効になりません

  • コンテンツ表示管理画面(例:ホーム » 管理 » サイト構築 » コンテンツタイプ » Article » 表示管理)の下に、「Layout for article in default」タブで適切なレイアウトを選択します
  • 各フィールドの右側にフィールド表示オプションボタンをクリックすると、Field Template選択肢が現れます
  • 必要に応じ、cssよろ各フィールドの表示設定ができます
Embedded thumbnail for Drupal7のモジュール(Display Suite)のインストールおよびフィールドテンプレート(Field Template)の有効化
drupal
video
display suit
module usage

やりたいこと:コンテンツの各フィールドごとをdivなどのタグでラップしたり、cssクラス、属性を追加したいです

  • Drupalのnodeシステムでは、表示設定で自由に各フィールドをラップdiv、cssクラス、属性の追加はできない
  • 各フィールドが表示都合よりラップしたり、cssクラスの追加が必要となります

解決:モジュール(Display Suite)のフィールドテンプレート(field template)を有効化にします

  • モジュール(Display Suite)のインポート、有効化をします
  • Display Suiteのフィールドテンプレート(field template)を有効化にします

モジュール(Display Suite)のフィールドテンプレート(field template)で各表示フィールドを修正例

  • フィールドをdivタグでラップしてcssクラスを追加します
  • cssクラス追加よりh2タグのcss適応、各要素の間隔を調整します
  • 具体的に設定方法をビデオでご参考ください
Embedded thumbnail for Drupalのモジュール(Display Suite)のフィールドtテンプレート(field template)で各フィールド表示の調整
drupal
video
display suite
module usage

Drupalのコンテンツ表示設定にレイアウトの変更はできない。すべてのフィールド表示はしていない

  • Drupalのコンテンツ表示管理画面(例:Article: ホーム » 管理 » サイト構築 » コンテンツタイプ » Article の「表示管理」)にある表示タイプ(例:全文)のレイアウト変更はできない
  • そのレイアウトのコンテンツのすべてフィールドが表示されていない(例:投稿日付、投稿者など)

モジュール(Display Suite)導入で、同一表示タイプに複数のレイアウト選択可能、隠されたフィールドの表示/設定が可能になる

  • Drupalのコンテンツ表示には大きな役割を果たしたモジュール(Display Suite)がぜひ利用してください
  • 通常の方法でDisplay Suiteをインストール/有効化します
  • コンテンツの表示管理画面(例:Article: ホーム » 管理 » サイト構築 » コンテンツタイプ » Article の「表示管理」)でDisplay Suiteのレイアウトが表示され、表示必要に応じ選択します
  • また、初期隠されたフィールドも表示されます。表示必要に応じフィールドを表示場所に配置します
  • 具体的な操作法はビデオでご参考ください
  • Display Suiteの応用に「シリーズ記事」をご参考ください
Embedded thumbnail for Drupalのモジュール(Display Suite)でコンテンツレイアウト変更、初期表示されていないフィールドの選択/設定が可能にする
drupal
video
customization
display suite
module usage

コンテンツ表示管理画面でモジュール(Display Suite)の「コードフィールド」内にあるTokey情報を利用して新規フィールド作成

  • コンテンツ管理画面(ホーム » 管理 » サイト構築 » コンテンツタイプ » Article » 表示管理)の下にある「Custom Fields」セクションで「コードフィールド追加」があります
  • 「コードフィールド追加」ボタンをクリックして、フィールドラベル、適応範囲などを入力します。フィールド作成ページの下にある「トーク」チェックボックスをチェックして、Tokenの利用が可能になります
    • 「利用可能なトークンを表示」リンクをクリックして、サイト内すべてのトークンが表示されます
    • 必要なものを検索して、トークン(例:[user:name])をコピーして、Field Codeフォーム入力すればよいです
  • コードフィールドの修正はコンテンツ表示管理画面ではできません。DisplaySuiteの管理画面(ホーム » 管理 » サイト構築 » Display Suite » フィールド)で行います

新規作成したフィールドを画面表示させ、確認

  • コンテンツ表示管理画面(ホーム » 管理 » サイト構築 » コンテンツタイプ » Article » 表示管理)で新規新規作成しフィールを適切な場所に配置します
  • コンテンツ表示された画面で選択したトークンを確認します
  • 実際の操作はビデオでご確認ください

DSのコードフィールドで表示されたすべてのトークの利用はできません

  • ビデオに使用したトークン例:[user:name] と [current-user:name]があります
  • 実際に[user:name]が何にも出力しませんでした。利用可能なのは [current-user:name]でした

DSのコードフィールドいろいろな場所(例:User、Profileなど)で使用可能なので、すべてのトークンが表示されても、その場所で利用できないものがあります

  • DBが広範囲(コンテンツだけではない)で使用可能なので、当然コードフィールド内の利用可能なトークンを定義するのは難しいです。
  • トークン一覧のフィルタリングにできないため、すべてのトークンが表示されます
  • 利用場所を想定して、利用可能トークンの選択は必要となります

どんな場所でどのトークンが利用可能かのドキュメントはあまり見つかっていないです。

  • 経験での判断といろいろなトークンを出力してみて確認したほうが良いでしょう
Embedded thumbnail for Drupalのモジュール(Display Suite)のコードフィールド内のトークン(Token)利用不可のものが多い
drupal
display suite
Search

高度な検索オプションと検索結果を変更するために、モジュール(Display Suite)のサブモジュール(Display Suite Suite)を有効にします

  • モジュール(Display Suite)より、検索結果の表示変更、高度な検索オプション変更は可能
  • Display Suiteは表示上に非常に柔軟性のあるモジュールで、幅広く利用されています

検索結果に関する設定後に必ずキャッシュをクリアします

  • 一般的にモジュールより表示変更はサイトのキャッシュクリアする必要はありません
  • なぜかDisplay Suiteで検索結果画面の設定を変更したら、必ずキャッシュをクリアしなければならないです。

例1:検索結果をsearch-results.tpl.phpからTeaser表示に切り替えたい

  • 検索結果はテンプレート:search-results.tpl.phpで管理されているので、検索結果の変更には、このテンプレートの変更は一般的となります(ハードコーディング必要)
  • Display Suiteの導入より、上記テンプレートの変更必要はなくなります
  • ホーム » 管理 » 環境設定 » 検索とメタデータ » 検索の設定 管理画面で検索モジュールを「Display Suite Search」に切り替えます
  • ホーム » 管理 » サイト構築 » Display Suite » 検索 管理画面で「ビュー・モード」をティーザーに変えます

例2:高度な検索オプションの一部分を隠したい

  • 初期の「高度な検索オプション」に検索可能なコンテンツが含まれています
  • 一般ユーザーが一部分のコンテンツタイプを知らないので、これらのオプション(例:パネル)を隠したいです。
  • ホーム » 管理 » 環境設定 » 検索とメタデータ » 検索の設定 管理画面で「ADDITIONAL NODE SEARCH CONFIGURATION」をクリックして、「コンテンツタイプを限定 SETTINGS」リンクをクリックします
  • 「Hide the following content types from the コンテンツタイプを限定 filter」の「パネル」をチェックして隠します
  • 検索画面上にある「高度な検索オプション」に「パネル」選択肢が非表示になっていることを確認します

 

drupal
video
display suite
module usage

Drupalのコンテンツ表示設定にレイアウトの変更はできない。すべてのフィールド表示はしていない

  • Drupalのコンテンツ表示管理画面(例:Article: ホーム » 管理 » サイト構築 » コンテンツタイプ » Article の「表示管理」)にある表示タイプ(例:全文)のレイアウト変更はできない
  • そのレイアウトのコンテンツのすべてフィールドが表示されていない(例:投稿日付、投稿者など)

モジュール(Display Suite)導入で、同一表示タイプに複数のレイアウト選択可能、隠されたフィールドの表示/設定が可能になる

  • Drupalのコンテンツ表示には大きな役割を果たしたモジュール(Display Suite)がぜひ利用してください
  • 通常の方法でDisplay Suiteをインストール/有効化します
  • コンテンツの表示管理画面(例:Article: ホーム » 管理 » サイト構築 » コンテンツタイプ » Article の「表示管理」)でDisplay Suiteのレイアウトが表示され、表示必要に応じ選択します
  • また、初期隠されたフィールドも表示されます。表示必要に応じフィールドを表示場所に配置します
  • 具体的な操作法はビデオでご参考ください
  • Display Suiteの応用に「シリーズ記事」をご参考ください
Embedded thumbnail for Drupalのモジュール(Display Suite)でコンテンツレイアウト変更、初期表示されていないフィールドの選択/設定が可能にする
drupal
video
customization
display suite
module usage

コンテンツ表示管理画面でモジュール(Display Suite)の「コードフィールド」内にあるTokey情報を利用して新規フィールド作成

  • コンテンツ管理画面(ホーム » 管理 » サイト構築 » コンテンツタイプ » Article » 表示管理)の下にある「Custom Fields」セクションで「コードフィールド追加」があります
  • 「コードフィールド追加」ボタンをクリックして、フィールドラベル、適応範囲などを入力します。フィールド作成ページの下にある「トーク」チェックボックスをチェックして、Tokenの利用が可能になります
    • 「利用可能なトークンを表示」リンクをクリックして、サイト内すべてのトークンが表示されます
    • 必要なものを検索して、トークン(例:[user:name])をコピーして、Field Codeフォーム入力すればよいです
  • コードフィールドの修正はコンテンツ表示管理画面ではできません。DisplaySuiteの管理画面(ホーム » 管理 » サイト構築 » Display Suite » フィールド)で行います

新規作成したフィールドを画面表示させ、確認

  • コンテンツ表示管理画面(ホーム » 管理 » サイト構築 » コンテンツタイプ » Article » 表示管理)で新規新規作成しフィールを適切な場所に配置します
  • コンテンツ表示された画面で選択したトークンを確認します
  • 実際の操作はビデオでご確認ください

DSのコードフィールドで表示されたすべてのトークの利用はできません

  • ビデオに使用したトークン例:[user:name] と [current-user:name]があります
  • 実際に[user:name]が何にも出力しませんでした。利用可能なのは [current-user:name]でした

DSのコードフィールドいろいろな場所(例:User、Profileなど)で使用可能なので、すべてのトークンが表示されても、その場所で利用できないものがあります

  • DBが広範囲(コンテンツだけではない)で使用可能なので、当然コードフィールド内の利用可能なトークンを定義するのは難しいです。
  • トークン一覧のフィルタリングにできないため、すべてのトークンが表示されます
  • 利用場所を想定して、利用可能トークンの選択は必要となります

どんな場所でどのトークンが利用可能かのドキュメントはあまり見つかっていないです。

  • 経験での判断といろいろなトークンを出力してみて確認したほうが良いでしょう
Embedded thumbnail for Drupalのモジュール(Display Suite)のコードフィールド内のトークン(Token)利用不可のものが多い
drupal
customization
token

Drupalのトークン(Token)をPHPで扱う関数(token_replace)を用いてトークンの値を表示したり、加工することができます

  • 時々Drupalのトークンの表示変更、値を加工したいことがあります。Drupalでは関数(token_replace)が用意され、トークンの値をPHPに渡すことができます
  • 関数使用説明を読んでいました。関数(token_replace($text, array $data = array(), array $options = array()))の引数のデータ($data)の使用方法はいまいちよくわからないです

token_replace関数の$dataオプションを渡したらエラーが発生

  • token_replace関数の説明ページにある実例をコピーして実装していまたが、Tokenの取得が成功、但しエラーが発生しました
    <?php
      print( token_replace('[user:name]' ,  array('user' => $user) ) ) ;
    ?>
    

    Notice: Undefined variable: 
      user in eval() (line 2 of 
        /virtual/drills/public_html/drupal7/sites/all/modules/ds/modules/ds_format/ds_format.module(66) : eval()'d code). =>
  • 関数の$dataパラメータを削除したら、Tokenの取得が成功、エラーが発生しません
    <?php
      print( token_replace('[current-user:name]' ) ) ;
    ?>
    
  • 具体的な操作はビデオを確認ください
  • テスト関連のバージョン情報
    • Drupal:7.54
    • Display Suite:7.x-2.14

 

Embedded thumbnail for Drupal7の関数(replace_token)の利用及び引数$data関連エラーの発生
drupal
video
customization
display suite
module usage

コンテンツ表示管理画面でモジュール(Display Suite)の「コードフィールド」内にあるTokey情報を利用して新規フィールド作成

  • コンテンツ管理画面(ホーム » 管理 » サイト構築 » コンテンツタイプ » Article » 表示管理)の下にある「Custom Fields」セクションで「コードフィールド追加」があります
  • 「コードフィールド追加」ボタンをクリックして、フィールドラベル、適応範囲などを入力します。フィールド作成ページの下にある「トーク」チェックボックスをチェックして、Tokenの利用が可能になります
    • 「利用可能なトークンを表示」リンクをクリックして、サイト内すべてのトークンが表示されます
    • 必要なものを検索して、トークン(例:[user:name])をコピーして、Field Codeフォーム入力すればよいです
  • コードフィールドの修正はコンテンツ表示管理画面ではできません。DisplaySuiteの管理画面(ホーム » 管理 » サイト構築 » Display Suite » フィールド)で行います

新規作成したフィールドを画面表示させ、確認

  • コンテンツ表示管理画面(ホーム » 管理 » サイト構築 » コンテンツタイプ » Article » 表示管理)で新規新規作成しフィールを適切な場所に配置します
  • コンテンツ表示された画面で選択したトークンを確認します
  • 実際の操作はビデオでご確認ください

DSのコードフィールドで表示されたすべてのトークの利用はできません

  • ビデオに使用したトークン例:[user:name] と [current-user:name]があります
  • 実際に[user:name]が何にも出力しませんでした。利用可能なのは [current-user:name]でした

DSのコードフィールドいろいろな場所(例:User、Profileなど)で使用可能なので、すべてのトークンが表示されても、その場所で利用できないものがあります

  • DBが広範囲(コンテンツだけではない)で使用可能なので、当然コードフィールド内の利用可能なトークンを定義するのは難しいです。
  • トークン一覧のフィルタリングにできないため、すべてのトークンが表示されます
  • 利用場所を想定して、利用可能トークンの選択は必要となります

どんな場所でどのトークンが利用可能かのドキュメントはあまり見つかっていないです。

  • 経験での判断といろいろなトークンを出力してみて確認したほうが良いでしょう
Embedded thumbnail for Drupalのモジュール(Display Suite)のコードフィールド内のトークン(Token)利用不可のものが多い
drupal
data import

Drupalの部分的なコンテンツデータを別のDrualサイトに移行する場合そのコンテンツの構造定義とコンテンツCSVデータのエクスポート/インポートができます

  • 背景:Drupal7.54
  • Drupalのサイト引っ越しなどでデータ移行の必要があります、以下の移行方法はよく利用されます。
    • Drupalのモジュール(Feature)を用いてサイト間のデータ移行/開発管理を行います (162)
    • 同じDrupalバージョンの単一サイトを複数サイト(ドメイン)の一つDrupalの共有ソースサイトへの移行チャレンジ (161)
  • ただし、部分的なコンテンツしか移行しない場合、上記方法では難しくなります
  • ここで、コンテンツ定義とデータを別々でexport/import方法を説明します
    DrupalのコンテンツコウセイとデータのExport/Import

Drupalのモジュール(Bundle copy、 Taxonomy CSV import/export)でコンテンツの構成/定義をExport/Importします

  • モジュール(Bundle copy)でコンテンツの構成/定義を簡単に移行します(具体的にステップは省略)
  • タクソノミーのタームの構成(フィールドが追加など)が変わらなければ、モジュール(、Taxonomy CSV import/export)でタームリストデータをcsvファイルの出力することはできます
    • 出力したCSVデータの別のサイトにインポートする場合、タクソノミーのボキャブラリーとタームIDが変わった可能性があります
    • コンテンツのフィールドに「Term Reference」タイプのものがあれば、コンテンツ追加/編集ボタンをクリックすると、「HTTP ERROR 500」エラーが発生するかもしれないです
      Term Referenceのフィールドがインポートされて以前のボキャブラリーIDを合わずエラーとなります
    • 一番簡単な対応方法ではそのフィールドを一回削除して、再作成すればよいです(データインポートする前の段階)

Drupalのコンテンツ構成(フィールド)テーブルのデータをcsvフォーマットに出力します

  • 現時点ではコンテンツのデータをcsvに出力するモジュールはあまり見当たらにです
  • コンテンツのフィールドをDB上各テーブルを見つけ出します
    • コンテンツ(例:Article)のフィールドごとに一つのテールが存在しています
    • Title ➡ nodeテーブルの「title」フィールド
    • body ➡ field_data_bodyテーブルの「body_value」フィールド(またはbody_summaryなど)
    • カスタムフィールド ➡ field_data_CUSTOM_FIELD_NAMEの「field_data_CUSTOM_FIELD_NAME_value」フィールド
  • これらのテーブルを「node」テーブルを中心してジョインして、新しいテーブルの書き込みます
    • すべてのコンテンツは「node」テーブルを基本にしています
    • 各フィールドのテーブルに「entity_id」がnodeテーブルの「nid」の関連付けキーとなります
    • 全フィールドと同じフィールドの新しいテーブルを一つ作成します(例:new_table)
    • 全フィールドをJOINしてデータを新しいテーブル(例:new_table)にコピーします
      INSERT INTO new_table (title, body, CUSTOM_FIELD_NAME,   ・・・・・・)
      SELECT 
         title,
         body.body_value,
         T1.field_data_CUSTOM_FIEDL_NAME_value,
        ・・・・・・
      FROM node
         left join field_data_body body on nid = body.entity_id
         left join field_data_CUSTOM_FIELD_NAME  T1  on T1.entity_id = nid
        ・・・・・・
        
  • 新しいテーブル(new_table)の内容をcsvフォーマットに出力します

Drupalのモジュール(Feeds Import)でコンテンツcsvデータをインポートします

  • モジュール(Feeds Import)がよく利用されるものなので、簡単にcsvデータを確認コンテンツにインポートすることができます
  • Feeds Importの説明は省略します(Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 (199)、FeedsモジュールでEnityにデータインポート (34)などを参考にしてください)
drupal
video
development
feature
module usage

モジュール(Feature)が開発ソース管理、コンテンツデータ移行などに利用されます

  • 最初モジュール(Feature)が何に使うかはあまりわからなかったです(いろいろな説明がちゅ抽象的)。
  • 実はDrupalの開発ソース管理(例:開発環境ー>ステージん環境ー>本番環境)、コンテンツデータの移行に使用されます

データ移行例:コンテンツデータ(Article)+Viewsで作成したコンテンツ検索一覧画面

  • データ移行の簡単な例として、既存のコンテンツデータ(例:Article⇒記事)、Viewsで作成したコンテンツ一覧画面を移行します
  • コンテンツデータ移行に必須なモジュール:
    • Feature
    • Node Export (FeatureモジュールにサポートするNode export featuresサブモジュールを有効化)
  • Feature管理画面で必要なモジュール、モジュールの関連、コンテンツデータを選択して、一つのモジュールとして作成し、ダウンロードします
  • 作成されたモジュール(tarファイル)を移行先で通常のモジュールインストールをして、有効化を行います。Feature管理画面で移行元の内容を適用、保存します
  • 具体的な操作はビデオをご参考ください

FeatureがDurupalのすべての設定、構成の移行はできません

  • 移行はモジュール単位で、構成は出力可能なものを中心にしています。以下は移行可能な部分
    • Core : Content Types、 Fields、 Menus、 Taxonomies、 Text formats、 Image styles、 User roles 、 permissions
    • Contribute: Views、 CTools、 Context 、 Panels、 Rules 、 Contexts、 Display Suite
  • 移行できない部分は、例:テーマ、コンテンツに挿入した画像などがあります
    • コンテンツに含まるメディア(例:写真、ビデオ、ファイルなど)がローカル(sites/default/files)に保存したため、移行先の保存パス修正、およびメディアファイルのコピーが手動で行う必要があります
Embedded thumbnail for Drupalのモジュール(Feature)を用いてサイト間のデータ移行/開発管理を行います
drupal
development
module usage

Drupal共有ソースサイトへの移行計画

  • Drupal7で複数のサイト(ドメイン)を構築しました。それぞれのバージョンアップ、ソースのバグ管理に手間がかかります。
  • 一つの共有ソースにすれば、Drupalのバージョンアップ、ソースのバグ管理に効率は良いと考えられています
  • 例:以下イメージのようにサイト移行
  • サイト移行時の両側の違い:
    • Drupalのバージョンは同じ:7
    • モジュール:共有ソース側の方が多い、また同じモジュールに違うバージョンが存在している可能性があります
    • DB:移行先に各サイトは別々のDBで違うコンテンツを有します

サイト移行の一番大きな問題点:メディア保存のフォルダが変わる

  • サイト移行にどんな方法を使っても、元サイトのメディア(例:写真など)保存フォルダー(sites/default)が、共有ソース側に別名のフォルダ(それぞれのサイトのメディア保存フォルダ)に変わります
  • 元サイトにあるメディア(写真、ファイル、ビデオなど)のパスが共有ソース側に移行先フォルダ名で書き換えなければならないです

移行方法1:共有ソース側で新規サイトを構築して、Featureモジュールで旧サイトの設定、Node Exportモジュールでコンテンツを移行します

  • 共有ソース側で以降先のフォルダ(例:pine ⇒ sites/pine)を作成します
    • defaultフォルダ(sites/default)にあるdefault.settings.phpをコピーして、移行先のフォルダ(pine)にペストし、settings.phpに名前を変更します
    • sites.php(sites/sites.php)設定ファイルに移行元のドメイン名とフォルダ名を関連つけます(設定方法:「Drupalのソースを共有する複数サイトの構築」をご参考)
  • 設定されたドメイン名で新サイトへアクセスし、Drupalのインストール手法で新しいサイトを構築します(新しいサイト、移行元のものはなにもない状態)
  • モジュール(Feature)で元サイトの設定を移行します(Drupalのモジュール(Feature)を用いてサイト間のデータ移行/開発管理を行いますをご参考)
    • すべての元サイト設定移行はできません。例:テーマの設定が最初からやり直しが必要はあります(結構手間がかかる作業)
  • モジュール(Node Export)でコンテンツ(例:Article)を元サイトから出力して、移行先にインポートします
    • 大量なコンテンツがある場合、Drushのコマンドで出力したほうが良いでしょう
    • コンテンツに含まれている画像、ビデオ、ファイルなどのパスを移行先のフォルダ名に合わせて変更しなければならない(今回:sites/default ➡ sites/pine すべてのパスを検索して、変更)
  • 元サイトのメディア保存フォルダ(sites/default)にあるすべての内容(settings.php除外)を移行先にフォルダ(sites/pine)にコピーします
  • 移行先でファイルシステム設定画面(ホーム » 管理 » 環境設定 » メディア » ファイルシステム)の元サイトと同じファイルパス設定を行います

移行方法2:元サイトのDBとメディア保存フォルダを移行先にコピーします

  • 元サイトのすべてのものをそのままで移行先にコピーできれば、一番楽です
  • 重要なのは、両サイトが側のDrupalバージョン、モジュールバージョンが完全一致していれば、うまく行きます
    • バージョンが合わなければ、移行後にサイトからエラーがでて、完全に動かなくなりことがあります(以下のエラー例で、実は一つのモジュールバージョン差で引き起こされています)
    • 移行する前にモジュールのバージョン合わせに十分に気を付ける必要はあります
    • もちろん、移行先にでのモジュールバージョンを変えると、他のサイトにも影響を与えるので、調整が必要となります
  • 移行する前に、移行先と移行元のDB、メディアファイルフォルダ(sites/default)の内容をバックアップします(うまく行かなければ、バックアップで戻します)
  • 移行するサイトのすべてDBテーブルをSQL文に出力(MySql:mysqldump)します
    • 出力されたファイルにあるすべてのメディア保存フォルダパスを移行先のフォルダパスに書き換えます(sites/default ➡ sites/pine)
    • もしドメイン名も変わる場合、新しいドメイン名で古いのを書き換えます
  • 移行元のメディア保存フォルダにすべての内容(settings.phpも含む)、移行先にのメディア保存フォルダにコピーします(sites/default ➡ sites/pine)
  • 移行先でファイルシステム設定画面(ホーム » 管理 » 環境設定 » メディア » ファイルシステム)の元サイトと同じファイルパス設定を行います
  • ブラウザで移行先のページにアクセスし、管理者権限でデータベース更新(http://your-site-domin/update.php)を行います(Drushでも更新可能)

結論:新規サイト構築はエラーが少ないが手間がかかります。DBコピーは便利だがエラーが出やすいです。

  • 安心で、きれいに移行する場合新規サイトを構築したほうが良いでしょう。多少手間がかかっても、難しいことは少ないです
  • DBコピーの方式は上級者向けですね。常にエラーの調査、修正にが必要となります
drupal
feeds
module usage

注意点:Drupalのモジュール(Feeds)の設定が間違うと手動でデータインポートができなくなります

  • 環境:Drupal7.54、Feeds7.x-3.0
  • やりたいこと:手動でデータをインポート(例:csvファイルからのインポートなど)
  • Feedの基本設定のところある二か所をチェックしないと手動でのインポートができない
    • 添付するコンテンツタイプ:スタントアローンのフォームを使う
    • 投稿時にインポート
      Drupalのモジュール(Feeds)の設定が間違うと手動でのインポートができない
    • 初期としてはこの二つ設定を有効にしています
  • ちなみに、「投稿時にインポート」を無効の場合、バッチでデータインポートすることになります(バッチの設定が必要)
  • 添付するコンテンツタイプ:「スタントアローンのフォームを使う」以外の選択肢を選択すると、インポート画面(ホーム » インポート)に当該インポーターはありません

手動でインポートできないときに画面上に「インポートされた項目はありません」が表示されます

  • 「投稿時にインポート」オプションが無効の場合、手動でデータインポートはできません
  • インポートデータがあるにはかかわらず、画面上に「インポートされた項目はありません」として表示されます
  • バッチにインポートジョブを入れたメッセージはありません
drupal
drupal
customization
feeds
data import

目的

  • Entity Typeデータにほかのデータ(例:csv、xmlなど)からのインポートを可能にする
  • Feedsの初期データ変換プロセッサーに「Entity Type」のものがなかった

解決の選択肢

  • Feed Importモジュールでのデータインポート
  • Feedsモジュールのカスタマイズをする

ここでの解決:Feedsのカスタマイズ

  • インストールされたモジュール
    • Feeds :  7.x-2.0
    • ECK  :  7.x-2.0
    • Entity API :  7.x-1.5
  • 上記モジュールのインストールと有効化
  • ECKでインポートデータタイプとBundleを作成する
    • 例: データタイプ:「組織データ」、Bundle:「xxxの組織データ」
    • 「組織データ」のプロパティ:title、uid、created、changedを使用する
    • 「xxxの組織データ」のフィールド:「組織コード」、「正式組織名」をテキストフィールドで追加

Feedsの紹介

  • Feedsが三つの部分から構成される:Fetcher、Parser、Processor
    • Fetcher:インポータデータの取得(例:File upload、external RSS Feedなど)
    • Parser:インポートデータの解析方法の指定(csv、xls、xml、RSSなど)
    • Processor:インポートデータの作成(Node、terms、usersなどのデータ作成)

 

FeedsにEntity Typeデータ変換プロセッサーに追加

  • PatchファイルをFeedsモジュールに当てる
  • Feedsのデータ変換プロセッサー設定画面にEntity Typeのデータ変換プロセッサー追加前後のイメージ
添付 サイズ
feeds_entity_processor-1033202-217.patch_.txt (16.03 KB) 16.03 KB
ホーム

古松

検索

Article Category

  • apache(7)
  • css(19)
  • drupal(295)
  • Electron(4)
  • html(34)
  • javascript(27)
  • laravel(4)
  • linux(5)
  • macOS(2)
  • mysql(13)
  • php(19)
  • python(4)
  • SEO(12)
  • video(72)
  • Visual Studio Code(4)
  • windows(13)
  • wordpress(32)