メインコンテンツに移動

メインナビゲーション

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

パンくず

  • ホーム
  • Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定

Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定

drupal
feeds
module usage

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

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

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

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

Feedsの機能

  • いろいろなフォーマットのデータをDrupalのデータ構造(例:ユーザー/ノード/Taxonomyなど)に合わせてインポートする
    • 一対一のコンテンツデータ(例:User -> Userデータ)
    • いろいろなフォーマットデータ(例:RSS/OPML/Atom feeds、csvなど)を各種Drupalのコンテンツ(例:User,Articleなど)データのインポート
    • PubSubHubbub のサポート
  • Feeds APIが提供されているので、独自のFetcher,Parser,Processorのプラグインの追加が可能
  • 基本設定:インポーターの名前、実行タイミングなどの設定
  • Fetcher: インポートするデータ/ファイルのフォーマット、場所などの指定
  • Parser: インポートデータの解析方法の指定
  • Processor: 出力するデータのフォーマット/コンテンツ、インポートデータのフィールドマッピングの指定

 

drupal
drupal
feeds
customization

インストールされたモジュール

  • Feeds : 7.x-2.0
  • Feeds Tamper : 7.x-1.0

Feeds Tamperが文字コード変更機能はない

  • Excelで作成したcsvファイルがShift-JISコードになる
  • DBのエンコードがUTF-8を指定してるため、Feedsでcsvデータをインポート時にDBエラーが発生する
  • csvファイルインポート時に使用するFeeds Tamperに文字コード変換機能がない
  • いろいろ調べて、Feed TamperにUTF-8に変換プラグイン(Feeds Tamper UTF-8 Encode)があることが分かった、さっそくチェックアウトして、サーバーにインストールした
  • Feeds Tamperのプラグイン設定画面でUTF-8変換項目がメニューに現れた
  • 実際にデータをインポートしてみたら、データインポートができたが、インポートされた文字が化けっている

Feeds Tamper UTF-8 Encodeプラグインを修正

  • Feeds Tamper UTF-8 Encodeが比較的にシンプルで修正しやすい
  • sites/all/feeds_temper_utf_8_encode/plugins/utf8_encode.incにコード変換ロジックがうまく作動していないようで: 
     /**
     * Encode the field and return the encoded value.
     */
    function feeds_tamper_utf8_encode_callback($result, $item_key, $element_key, &$field, $settings, $source) {
    //  $field = utf8_encode($field);
    	$field = iconv(null, 'utf-8', $field);
    }
     
  • 上記コードを以下のように修正
    /**
     * Encode the field and return the encoded value.
     */
    function feeds_tamper_utf8_encode_callback($result, $item_key, $element_key, &$field, $settings, $source) {
    //  $field = utf8_encode($field);
        $field = iconv(null, 'utf-8', $field);
    }
  • 修正したプラグインはここからダウンロードができる

 

添付 サイズ
feeds_tamper_utf_8_encode.zip (11.18 KB) 11.18 KB
drupal
feeds
module usage

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

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

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

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

インストールされたモジュール

  • Feeds : 7.x-2.0

不明な値:GUID

  • CSV Parserでcsvファイルをインポートする
  • Processorでデータマッピング時にGUIDをどのように設定すればいいかは不明
  • インポートするcsvファイルにどのようなキーをGUIDにセットするかは不明

GUIDがcsvファイルインポート時にユニークチェックを利用している

  • GUIDがどこに保存しているか、どのような性質なフィールドか?
    • GUIDがテーブル:feeds_item(Feedsがインストール時に作成されたテーブル、インポートデータ履歴、インポートされたデータ削除に利用される)にある
    • GUIDの性質:Text型、Unique idenfiierと指定されている ⇒ 重複しない文字列、数字でよい、桁数(65,535バイト)があまり心配がない
  • csvインポートファイルに任意のキーをGUIDにセットして、データの重複チェックが可能
    • GUIDにセットしたcsvデータのキーが重複した場合、インポート時にSQL文エラーが発生される
  • Feedsのデータインポート設定画面(Home » Administration » Structure » Feeds importers)で重複チェックの設定する
    • Mapping画面でcsvデータのキーをGUIDにセット、GUIDを「Used as unique.」として設定する
    • Setting画面で既存データ(インポートしたデータ)に重複した場合に更新するか否かをチェックして設定する
  • 問題点:インポートデータに重複がある場合、どのようにエラーを出すかは不明

 


 

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
drupal
feeds
module usage

問題点:Drupalのモジュール(Feeds)でデータインポート(データ更新も含む)時にアクセス権限がないエラー

  • 環境: Drupal7.54、Feeds7.x-3.0
  • やりたいこと:Feedsでノードタイプへのデータのインポートと更新を行います
  • データ更新時にアクセス権限エラーが発生
    The user bear is not authorized to update content of type chinese_word. To import this item, either the user "bear" (author of the item) must be given the permission to update content of type chinese_word, or the option "Authorize" on the Node processor settings must be turned off.
    Drupalのモジュール(Feeds)でのデータ更新時にアクセス権限エラー

モジュールFeedsのノードプロセッサー設定画面ある「投稿者」設定が新規作成時のみに使用され

  • ノードプロセッサー(Node Processor)の設定画面にある「投稿者」があります。ただし、これはノードが作成時のみ使用され、データ更新の権限と関係ないです
    モジュールFeedsのノードプロセッサー設定画面にある「投稿者」がノード作成時のみに使用され
  • データ更新時にの「投稿者」と関係ないです

モジュール(Feeds)でデータ更新時に、コンテンツタイプデータの作成者のアクセス権限がチェックされます

  • Feedsでデータインポート時に権限設定が2種類あります
    • データインポート操作が可能かどうかの設定(今回のエラーと関係ない)
    • データ更新時にデータの作成者のアクセス権限
      Feedsでデータ更新時にデータの作成者がデータ更新権限チェック
  • コンテントタイプのデータ作成者が必ず更新する権限とは限りませんので、ここで、チェックを行います
  • 但し、データインポートなので、通常データの作成者と関係ないので、チェックしなくてもよいかと思います

サイト移行時にデータへのアクセス権限などがうまく行っていないようです

  • 元々作成者が自分のデータを更新する権限を与えたが、何かの原因(おそらくサイト移行時の作業)で、更新権限が外されました。
  • データインポート時にエラーが発生されました。
drupal
feeds
module usage

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

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

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

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

モジュール(Job Scheduler)がバックグランドでタスクを実行する便利なツールの一つ

  • 環境:Drupal7.54、Job Scheduler7.x-2.0
  • モジュール:Feedsに依存され、バッググランドタスク実行に利用されている
  • Job Schedulerの単独利用も可能だが、管理UIが無くて、ほとんどAPIとしてバックグランドジョブとしての利用
  • Job Scheduler APIの利用は以下のステップとなります
    • hook_cron_job_scheduler_info()の実装(タスクを実行するコールバック関数名の定義)
      /**
       * Implements hook_cron_job_scheduler_info().
       */
      function drills_custom_feeds_cron_job_scheduler_info()
      {
        $schedulers = array();
        $schedulers['chinese_sentence_import_scheduler'] = array(
            'worker callback' => 'chinese_sentence_import',     // タスク内容のコールバック
        );
        return $schedulers;
      }
      
    • 定義されたタスクのコールバック関数を定義
      function chinese_sentence_import($job) {
      
            //  実際のタスク処理ロジック
      
      }
    • 上記処理内容をスケジュールに設定
        //Add a job.
        $job = array(
            'type' => 'story',     // 任意の識別名
            'id' => 20170309,      // 任意のID(例:日付)
            'period' => 3600,      // 実行開始時間(例:3600秒後から実行)
            'periodic' => FALSE,   // 周期的に実行か(FALSE:一回のみ、TRUE:周期的)
        );
        JobScheduler::get('chinese_sentence_import_scheduler')->set($job);
      
    • 上記コードが実行されると、job_scheduleに一レコードが生成され、cronが実行時に、セットされた実行開始時間を比較して、バックグランドで実行されます
      モジュールJob Scheduleが簡単に実装される

Job Schedulerモジュールは長い処理時間(30秒以上)のジョブに適していない

  • モジュールの構造としてはシンプルで、使いやすいです。
    • 一つのジョブに一つのタスクコールバックしかありません(すべてのタスク処理がのコールバックに記述する必要があります)
  • 一度に200ジョブまで、30秒までの処理が制限されていています
    • job_scheduler.moduleでjob_scheduler_cronの処理部分を確認すれば、30秒までの処理が記述されています
      JobSchedulerモジュールのタスク処理制限:30秒以内、200個ジョブまで
    • 30秒以上になると、次のジョブが処理しなくなります

Job Schedulerモジュールで長時間かつ一度実行のみのタスクを実行させる裏技

  • 時に数時間のタスクを実行する必要の場合がありますが、一度のみの実行であれば、以下の方法を試して良いでしょう
  • JobSchedulerクラスがジョブ(Job)をセットすることではなく、dispatch関数(cron実行されたときに、この関数で各ジョブを実行させる)を利用して、即時にタスクを実行させます
     JobScheduler::get('chinese_sentence_import_scheduler')->dispath($job);
  • 上記タスクを実行させるブラウザが返答を待ち状態になりますが、無視してブラウザを閉じっても構わないです。
    • バックグランドで実行しているので、成功するか、失敗する分かりません。
    • タスク実行時に結果をどこかに出力(例:watchdogでレポートに出力)して、確認する方法があります
  • Feedsがデータインポート時にこの方法の利用はできません。
    • Feedsがバックグランドジョブの設定は即時実行タイプ(dispath)ではないからです。
    • 無理矢理にFeedsのコード修正して、実行させることができますが、ほかのインポート対象に影響を与えないため、コードの回復が必要でしょう
drupal
development
data import

Drupalのバッチ(Batch)が複数のオペレーション(Operation)から構成され

  • 一つのバッチに一つ以上のオペレーションから構成される
    一つのバッチに一つ以上のオペレーションがある
  • オペレーション単位でバッチプログレスの状態を管理しています(プログレス・バーと言う)
  • 基本的なバッチプログラムは以下のようで
    // バッチ定義の配列
    $batch=array{
        'title' => t('バッチのタイトル'),   // バッチの名前
        'operations' => array(),      // オペレーション配列
        'finished' => 'import_finished_callback', //終了時のコールバック関数
        'progress_message' => t('Finished @current out of @total.'), // 状態表示
    }
    // オペレーション配列の定義
    $batch['operations'][] = array('batch_operation_function_1', array( [引数が無ければ、空の配列] ) );
    $batch['operations'][] = array('batch_operation_function_2', array( $arg_1, $arg_2 ) );
    ・・・・・・
    // バッチの実行
    batch_set($batch);
    
    // オペレーション関数
    function batch_operation_function($arg_1, $arg_2, &$context){
    
      // バッチ内の処理
    
    }

一つのオペレーション内に大量なループ、長時間の作業ロジックを避けるべき

  • バッチの各作業しているオペレーション内でで長い時間のタスクや、大量ループなどより、オペレーションが異常終了のことがあります(メモリや、タイムアウトなどの可能性)
  • 各作業を細分化して、オペレーション単位で実行させます
drupal
development
feeds

モジュール(Job Scheduler)がバックグランドでタスクを実行する便利なツールの一つ

  • 環境:Drupal7.54、Job Scheduler7.x-2.0
  • モジュール:Feedsに依存され、バッググランドタスク実行に利用されている
  • Job Schedulerの単独利用も可能だが、管理UIが無くて、ほとんどAPIとしてバックグランドジョブとしての利用
  • Job Scheduler APIの利用は以下のステップとなります
    • hook_cron_job_scheduler_info()の実装(タスクを実行するコールバック関数名の定義)
      /**
       * Implements hook_cron_job_scheduler_info().
       */
      function drills_custom_feeds_cron_job_scheduler_info()
      {
        $schedulers = array();
        $schedulers['chinese_sentence_import_scheduler'] = array(
            'worker callback' => 'chinese_sentence_import',     // タスク内容のコールバック
        );
        return $schedulers;
      }
      
    • 定義されたタスクのコールバック関数を定義
      function chinese_sentence_import($job) {
      
            //  実際のタスク処理ロジック
      
      }
    • 上記処理内容をスケジュールに設定
        //Add a job.
        $job = array(
            'type' => 'story',     // 任意の識別名
            'id' => 20170309,      // 任意のID(例:日付)
            'period' => 3600,      // 実行開始時間(例:3600秒後から実行)
            'periodic' => FALSE,   // 周期的に実行か(FALSE:一回のみ、TRUE:周期的)
        );
        JobScheduler::get('chinese_sentence_import_scheduler')->set($job);
      
    • 上記コードが実行されると、job_scheduleに一レコードが生成され、cronが実行時に、セットされた実行開始時間を比較して、バックグランドで実行されます
      モジュールJob Scheduleが簡単に実装される

Job Schedulerモジュールは長い処理時間(30秒以上)のジョブに適していない

  • モジュールの構造としてはシンプルで、使いやすいです。
    • 一つのジョブに一つのタスクコールバックしかありません(すべてのタスク処理がのコールバックに記述する必要があります)
  • 一度に200ジョブまで、30秒までの処理が制限されていています
    • job_scheduler.moduleでjob_scheduler_cronの処理部分を確認すれば、30秒までの処理が記述されています
      JobSchedulerモジュールのタスク処理制限:30秒以内、200個ジョブまで
    • 30秒以上になると、次のジョブが処理しなくなります

Job Schedulerモジュールで長時間かつ一度実行のみのタスクを実行させる裏技

  • 時に数時間のタスクを実行する必要の場合がありますが、一度のみの実行であれば、以下の方法を試して良いでしょう
  • JobSchedulerクラスがジョブ(Job)をセットすることではなく、dispatch関数(cron実行されたときに、この関数で各ジョブを実行させる)を利用して、即時にタスクを実行させます
     JobScheduler::get('chinese_sentence_import_scheduler')->dispath($job);
  • 上記タスクを実行させるブラウザが返答を待ち状態になりますが、無視してブラウザを閉じっても構わないです。
    • バックグランドで実行しているので、成功するか、失敗する分かりません。
    • タスク実行時に結果をどこかに出力(例:watchdogでレポートに出力)して、確認する方法があります
  • Feedsがデータインポート時にこの方法の利用はできません。
    • Feedsがバックグランドジョブの設定は即時実行タイプ(dispath)ではないからです。
    • 無理矢理にFeedsのコード修正して、実行させることができますが、ほかのインポート対象に影響を与えないため、コードの回復が必要でしょう
drupal
development
data import

Drupalのバッチ(Batch)が複数のオペレーション(Operation)から構成され

  • 一つのバッチに一つ以上のオペレーションから構成される
    一つのバッチに一つ以上のオペレーションがある
  • オペレーション単位でバッチプログレスの状態を管理しています(プログレス・バーと言う)
  • 基本的なバッチプログラムは以下のようで
    // バッチ定義の配列
    $batch=array{
        'title' => t('バッチのタイトル'),   // バッチの名前
        'operations' => array(),      // オペレーション配列
        'finished' => 'import_finished_callback', //終了時のコールバック関数
        'progress_message' => t('Finished @current out of @total.'), // 状態表示
    }
    // オペレーション配列の定義
    $batch['operations'][] = array('batch_operation_function_1', array( [引数が無ければ、空の配列] ) );
    $batch['operations'][] = array('batch_operation_function_2', array( $arg_1, $arg_2 ) );
    ・・・・・・
    // バッチの実行
    batch_set($batch);
    
    // オペレーション関数
    function batch_operation_function($arg_1, $arg_2, &$context){
    
      // バッチ内の処理
    
    }

一つのオペレーション内に大量なループ、長時間の作業ロジックを避けるべき

  • バッチの各作業しているオペレーション内でで長い時間のタスクや、大量ループなどより、オペレーションが異常終了のことがあります(メモリや、タイムアウトなどの可能性)
  • 各作業を細分化して、オペレーション単位で実行させます
drupal
development
feeds

モジュール(Job Scheduler)がバックグランドでタスクを実行する便利なツールの一つ

  • 環境:Drupal7.54、Job Scheduler7.x-2.0
  • モジュール:Feedsに依存され、バッググランドタスク実行に利用されている
  • Job Schedulerの単独利用も可能だが、管理UIが無くて、ほとんどAPIとしてバックグランドジョブとしての利用
  • Job Scheduler APIの利用は以下のステップとなります
    • hook_cron_job_scheduler_info()の実装(タスクを実行するコールバック関数名の定義)
      /**
       * Implements hook_cron_job_scheduler_info().
       */
      function drills_custom_feeds_cron_job_scheduler_info()
      {
        $schedulers = array();
        $schedulers['chinese_sentence_import_scheduler'] = array(
            'worker callback' => 'chinese_sentence_import',     // タスク内容のコールバック
        );
        return $schedulers;
      }
      
    • 定義されたタスクのコールバック関数を定義
      function chinese_sentence_import($job) {
      
            //  実際のタスク処理ロジック
      
      }
    • 上記処理内容をスケジュールに設定
        //Add a job.
        $job = array(
            'type' => 'story',     // 任意の識別名
            'id' => 20170309,      // 任意のID(例:日付)
            'period' => 3600,      // 実行開始時間(例:3600秒後から実行)
            'periodic' => FALSE,   // 周期的に実行か(FALSE:一回のみ、TRUE:周期的)
        );
        JobScheduler::get('chinese_sentence_import_scheduler')->set($job);
      
    • 上記コードが実行されると、job_scheduleに一レコードが生成され、cronが実行時に、セットされた実行開始時間を比較して、バックグランドで実行されます
      モジュールJob Scheduleが簡単に実装される

Job Schedulerモジュールは長い処理時間(30秒以上)のジョブに適していない

  • モジュールの構造としてはシンプルで、使いやすいです。
    • 一つのジョブに一つのタスクコールバックしかありません(すべてのタスク処理がのコールバックに記述する必要があります)
  • 一度に200ジョブまで、30秒までの処理が制限されていています
    • job_scheduler.moduleでjob_scheduler_cronの処理部分を確認すれば、30秒までの処理が記述されています
      JobSchedulerモジュールのタスク処理制限:30秒以内、200個ジョブまで
    • 30秒以上になると、次のジョブが処理しなくなります

Job Schedulerモジュールで長時間かつ一度実行のみのタスクを実行させる裏技

  • 時に数時間のタスクを実行する必要の場合がありますが、一度のみの実行であれば、以下の方法を試して良いでしょう
  • JobSchedulerクラスがジョブ(Job)をセットすることではなく、dispatch関数(cron実行されたときに、この関数で各ジョブを実行させる)を利用して、即時にタスクを実行させます
     JobScheduler::get('chinese_sentence_import_scheduler')->dispath($job);
  • 上記タスクを実行させるブラウザが返答を待ち状態になりますが、無視してブラウザを閉じっても構わないです。
    • バックグランドで実行しているので、成功するか、失敗する分かりません。
    • タスク実行時に結果をどこかに出力(例:watchdogでレポートに出力)して、確認する方法があります
  • Feedsがデータインポート時にこの方法の利用はできません。
    • Feedsがバックグランドジョブの設定は即時実行タイプ(dispath)ではないからです。
    • 無理矢理にFeedsのコード修正して、実行させることができますが、ほかのインポート対象に影響を与えないため、コードの回復が必要でしょう
drupal
development
data import

Drupalのバッチ(Batch)が複数のオペレーション(Operation)から構成され

  • 一つのバッチに一つ以上のオペレーションから構成される
    一つのバッチに一つ以上のオペレーションがある
  • オペレーション単位でバッチプログレスの状態を管理しています(プログレス・バーと言う)
  • 基本的なバッチプログラムは以下のようで
    // バッチ定義の配列
    $batch=array{
        'title' => t('バッチのタイトル'),   // バッチの名前
        'operations' => array(),      // オペレーション配列
        'finished' => 'import_finished_callback', //終了時のコールバック関数
        'progress_message' => t('Finished @current out of @total.'), // 状態表示
    }
    // オペレーション配列の定義
    $batch['operations'][] = array('batch_operation_function_1', array( [引数が無ければ、空の配列] ) );
    $batch['operations'][] = array('batch_operation_function_2', array( $arg_1, $arg_2 ) );
    ・・・・・・
    // バッチの実行
    batch_set($batch);
    
    // オペレーション関数
    function batch_operation_function($arg_1, $arg_2, &$context){
    
      // バッチ内の処理
    
    }

一つのオペレーション内に大量なループ、長時間の作業ロジックを避けるべき

  • バッチの各作業しているオペレーション内でで長い時間のタスクや、大量ループなどより、オペレーションが異常終了のことがあります(メモリや、タイムアウトなどの可能性)
  • 各作業を細分化して、オペレーション単位で実行させます
drupal
development
feeds

モジュール(Job Scheduler)がバックグランドでタスクを実行する便利なツールの一つ

  • 環境:Drupal7.54、Job Scheduler7.x-2.0
  • モジュール:Feedsに依存され、バッググランドタスク実行に利用されている
  • Job Schedulerの単独利用も可能だが、管理UIが無くて、ほとんどAPIとしてバックグランドジョブとしての利用
  • Job Scheduler APIの利用は以下のステップとなります
    • hook_cron_job_scheduler_info()の実装(タスクを実行するコールバック関数名の定義)
      /**
       * Implements hook_cron_job_scheduler_info().
       */
      function drills_custom_feeds_cron_job_scheduler_info()
      {
        $schedulers = array();
        $schedulers['chinese_sentence_import_scheduler'] = array(
            'worker callback' => 'chinese_sentence_import',     // タスク内容のコールバック
        );
        return $schedulers;
      }
      
    • 定義されたタスクのコールバック関数を定義
      function chinese_sentence_import($job) {
      
            //  実際のタスク処理ロジック
      
      }
    • 上記処理内容をスケジュールに設定
        //Add a job.
        $job = array(
            'type' => 'story',     // 任意の識別名
            'id' => 20170309,      // 任意のID(例:日付)
            'period' => 3600,      // 実行開始時間(例:3600秒後から実行)
            'periodic' => FALSE,   // 周期的に実行か(FALSE:一回のみ、TRUE:周期的)
        );
        JobScheduler::get('chinese_sentence_import_scheduler')->set($job);
      
    • 上記コードが実行されると、job_scheduleに一レコードが生成され、cronが実行時に、セットされた実行開始時間を比較して、バックグランドで実行されます
      モジュールJob Scheduleが簡単に実装される

Job Schedulerモジュールは長い処理時間(30秒以上)のジョブに適していない

  • モジュールの構造としてはシンプルで、使いやすいです。
    • 一つのジョブに一つのタスクコールバックしかありません(すべてのタスク処理がのコールバックに記述する必要があります)
  • 一度に200ジョブまで、30秒までの処理が制限されていています
    • job_scheduler.moduleでjob_scheduler_cronの処理部分を確認すれば、30秒までの処理が記述されています
      JobSchedulerモジュールのタスク処理制限:30秒以内、200個ジョブまで
    • 30秒以上になると、次のジョブが処理しなくなります

Job Schedulerモジュールで長時間かつ一度実行のみのタスクを実行させる裏技

  • 時に数時間のタスクを実行する必要の場合がありますが、一度のみの実行であれば、以下の方法を試して良いでしょう
  • JobSchedulerクラスがジョブ(Job)をセットすることではなく、dispatch関数(cron実行されたときに、この関数で各ジョブを実行させる)を利用して、即時にタスクを実行させます
     JobScheduler::get('chinese_sentence_import_scheduler')->dispath($job);
  • 上記タスクを実行させるブラウザが返答を待ち状態になりますが、無視してブラウザを閉じっても構わないです。
    • バックグランドで実行しているので、成功するか、失敗する分かりません。
    • タスク実行時に結果をどこかに出力(例:watchdogでレポートに出力)して、確認する方法があります
  • Feedsがデータインポート時にこの方法の利用はできません。
    • Feedsがバックグランドジョブの設定は即時実行タイプ(dispath)ではないからです。
    • 無理矢理にFeedsのコード修正して、実行させることができますが、ほかのインポート対象に影響を与えないため、コードの回復が必要でしょう
drupal
development
data import

Drupalのバッチ(Batch)が複数のオペレーション(Operation)から構成され

  • 一つのバッチに一つ以上のオペレーションから構成される
    一つのバッチに一つ以上のオペレーションがある
  • オペレーション単位でバッチプログレスの状態を管理しています(プログレス・バーと言う)
  • 基本的なバッチプログラムは以下のようで
    // バッチ定義の配列
    $batch=array{
        'title' => t('バッチのタイトル'),   // バッチの名前
        'operations' => array(),      // オペレーション配列
        'finished' => 'import_finished_callback', //終了時のコールバック関数
        'progress_message' => t('Finished @current out of @total.'), // 状態表示
    }
    // オペレーション配列の定義
    $batch['operations'][] = array('batch_operation_function_1', array( [引数が無ければ、空の配列] ) );
    $batch['operations'][] = array('batch_operation_function_2', array( $arg_1, $arg_2 ) );
    ・・・・・・
    // バッチの実行
    batch_set($batch);
    
    // オペレーション関数
    function batch_operation_function($arg_1, $arg_2, &$context){
    
      // バッチ内の処理
    
    }

一つのオペレーション内に大量なループ、長時間の作業ロジックを避けるべき

  • バッチの各作業しているオペレーション内でで長い時間のタスクや、大量ループなどより、オペレーションが異常終了のことがあります(メモリや、タイムアウトなどの可能性)
  • 各作業を細分化して、オペレーション単位で実行させます
drupal
development
feeds

モジュール(Job Scheduler)がバックグランドでタスクを実行する便利なツールの一つ

  • 環境:Drupal7.54、Job Scheduler7.x-2.0
  • モジュール:Feedsに依存され、バッググランドタスク実行に利用されている
  • Job Schedulerの単独利用も可能だが、管理UIが無くて、ほとんどAPIとしてバックグランドジョブとしての利用
  • Job Scheduler APIの利用は以下のステップとなります
    • hook_cron_job_scheduler_info()の実装(タスクを実行するコールバック関数名の定義)
      /**
       * Implements hook_cron_job_scheduler_info().
       */
      function drills_custom_feeds_cron_job_scheduler_info()
      {
        $schedulers = array();
        $schedulers['chinese_sentence_import_scheduler'] = array(
            'worker callback' => 'chinese_sentence_import',     // タスク内容のコールバック
        );
        return $schedulers;
      }
      
    • 定義されたタスクのコールバック関数を定義
      function chinese_sentence_import($job) {
      
            //  実際のタスク処理ロジック
      
      }
    • 上記処理内容をスケジュールに設定
        //Add a job.
        $job = array(
            'type' => 'story',     // 任意の識別名
            'id' => 20170309,      // 任意のID(例:日付)
            'period' => 3600,      // 実行開始時間(例:3600秒後から実行)
            'periodic' => FALSE,   // 周期的に実行か(FALSE:一回のみ、TRUE:周期的)
        );
        JobScheduler::get('chinese_sentence_import_scheduler')->set($job);
      
    • 上記コードが実行されると、job_scheduleに一レコードが生成され、cronが実行時に、セットされた実行開始時間を比較して、バックグランドで実行されます
      モジュールJob Scheduleが簡単に実装される

Job Schedulerモジュールは長い処理時間(30秒以上)のジョブに適していない

  • モジュールの構造としてはシンプルで、使いやすいです。
    • 一つのジョブに一つのタスクコールバックしかありません(すべてのタスク処理がのコールバックに記述する必要があります)
  • 一度に200ジョブまで、30秒までの処理が制限されていています
    • job_scheduler.moduleでjob_scheduler_cronの処理部分を確認すれば、30秒までの処理が記述されています
      JobSchedulerモジュールのタスク処理制限:30秒以内、200個ジョブまで
    • 30秒以上になると、次のジョブが処理しなくなります

Job Schedulerモジュールで長時間かつ一度実行のみのタスクを実行させる裏技

  • 時に数時間のタスクを実行する必要の場合がありますが、一度のみの実行であれば、以下の方法を試して良いでしょう
  • JobSchedulerクラスがジョブ(Job)をセットすることではなく、dispatch関数(cron実行されたときに、この関数で各ジョブを実行させる)を利用して、即時にタスクを実行させます
     JobScheduler::get('chinese_sentence_import_scheduler')->dispath($job);
  • 上記タスクを実行させるブラウザが返答を待ち状態になりますが、無視してブラウザを閉じっても構わないです。
    • バックグランドで実行しているので、成功するか、失敗する分かりません。
    • タスク実行時に結果をどこかに出力(例:watchdogでレポートに出力)して、確認する方法があります
  • Feedsがデータインポート時にこの方法の利用はできません。
    • Feedsがバックグランドジョブの設定は即時実行タイプ(dispath)ではないからです。
    • 無理矢理にFeedsのコード修正して、実行させることができますが、ほかのインポート対象に影響を与えないため、コードの回復が必要でしょう
drupal
development
data import

Drupalのバッチ(Batch)が複数のオペレーション(Operation)から構成され

  • 一つのバッチに一つ以上のオペレーションから構成される
    一つのバッチに一つ以上のオペレーションがある
  • オペレーション単位でバッチプログレスの状態を管理しています(プログレス・バーと言う)
  • 基本的なバッチプログラムは以下のようで
    // バッチ定義の配列
    $batch=array{
        'title' => t('バッチのタイトル'),   // バッチの名前
        'operations' => array(),      // オペレーション配列
        'finished' => 'import_finished_callback', //終了時のコールバック関数
        'progress_message' => t('Finished @current out of @total.'), // 状態表示
    }
    // オペレーション配列の定義
    $batch['operations'][] = array('batch_operation_function_1', array( [引数が無ければ、空の配列] ) );
    $batch['operations'][] = array('batch_operation_function_2', array( $arg_1, $arg_2 ) );
    ・・・・・・
    // バッチの実行
    batch_set($batch);
    
    // オペレーション関数
    function batch_operation_function($arg_1, $arg_2, &$context){
    
      // バッチ内の処理
    
    }

一つのオペレーション内に大量なループ、長時間の作業ロジックを避けるべき

  • バッチの各作業しているオペレーション内でで長い時間のタスクや、大量ループなどより、オペレーションが異常終了のことがあります(メモリや、タイムアウトなどの可能性)
  • 各作業を細分化して、オペレーション単位で実行させます
drupal
development
feeds

モジュール(Job Scheduler)がバックグランドでタスクを実行する便利なツールの一つ

  • 環境:Drupal7.54、Job Scheduler7.x-2.0
  • モジュール:Feedsに依存され、バッググランドタスク実行に利用されている
  • Job Schedulerの単独利用も可能だが、管理UIが無くて、ほとんどAPIとしてバックグランドジョブとしての利用
  • Job Scheduler APIの利用は以下のステップとなります
    • hook_cron_job_scheduler_info()の実装(タスクを実行するコールバック関数名の定義)
      /**
       * Implements hook_cron_job_scheduler_info().
       */
      function drills_custom_feeds_cron_job_scheduler_info()
      {
        $schedulers = array();
        $schedulers['chinese_sentence_import_scheduler'] = array(
            'worker callback' => 'chinese_sentence_import',     // タスク内容のコールバック
        );
        return $schedulers;
      }
      
    • 定義されたタスクのコールバック関数を定義
      function chinese_sentence_import($job) {
      
            //  実際のタスク処理ロジック
      
      }
    • 上記処理内容をスケジュールに設定
        //Add a job.
        $job = array(
            'type' => 'story',     // 任意の識別名
            'id' => 20170309,      // 任意のID(例:日付)
            'period' => 3600,      // 実行開始時間(例:3600秒後から実行)
            'periodic' => FALSE,   // 周期的に実行か(FALSE:一回のみ、TRUE:周期的)
        );
        JobScheduler::get('chinese_sentence_import_scheduler')->set($job);
      
    • 上記コードが実行されると、job_scheduleに一レコードが生成され、cronが実行時に、セットされた実行開始時間を比較して、バックグランドで実行されます
      モジュールJob Scheduleが簡単に実装される

Job Schedulerモジュールは長い処理時間(30秒以上)のジョブに適していない

  • モジュールの構造としてはシンプルで、使いやすいです。
    • 一つのジョブに一つのタスクコールバックしかありません(すべてのタスク処理がのコールバックに記述する必要があります)
  • 一度に200ジョブまで、30秒までの処理が制限されていています
    • job_scheduler.moduleでjob_scheduler_cronの処理部分を確認すれば、30秒までの処理が記述されています
      JobSchedulerモジュールのタスク処理制限:30秒以内、200個ジョブまで
    • 30秒以上になると、次のジョブが処理しなくなります

Job Schedulerモジュールで長時間かつ一度実行のみのタスクを実行させる裏技

  • 時に数時間のタスクを実行する必要の場合がありますが、一度のみの実行であれば、以下の方法を試して良いでしょう
  • JobSchedulerクラスがジョブ(Job)をセットすることではなく、dispatch関数(cron実行されたときに、この関数で各ジョブを実行させる)を利用して、即時にタスクを実行させます
     JobScheduler::get('chinese_sentence_import_scheduler')->dispath($job);
  • 上記タスクを実行させるブラウザが返答を待ち状態になりますが、無視してブラウザを閉じっても構わないです。
    • バックグランドで実行しているので、成功するか、失敗する分かりません。
    • タスク実行時に結果をどこかに出力(例:watchdogでレポートに出力)して、確認する方法があります
  • Feedsがデータインポート時にこの方法の利用はできません。
    • Feedsがバックグランドジョブの設定は即時実行タイプ(dispath)ではないからです。
    • 無理矢理にFeedsのコード修正して、実行させることができますが、ほかのインポート対象に影響を与えないため、コードの回復が必要でしょう
drupal
development
data import

Drupalのバッチ(Batch)が複数のオペレーション(Operation)から構成され

  • 一つのバッチに一つ以上のオペレーションから構成される
    一つのバッチに一つ以上のオペレーションがある
  • オペレーション単位でバッチプログレスの状態を管理しています(プログレス・バーと言う)
  • 基本的なバッチプログラムは以下のようで
    // バッチ定義の配列
    $batch=array{
        'title' => t('バッチのタイトル'),   // バッチの名前
        'operations' => array(),      // オペレーション配列
        'finished' => 'import_finished_callback', //終了時のコールバック関数
        'progress_message' => t('Finished @current out of @total.'), // 状態表示
    }
    // オペレーション配列の定義
    $batch['operations'][] = array('batch_operation_function_1', array( [引数が無ければ、空の配列] ) );
    $batch['operations'][] = array('batch_operation_function_2', array( $arg_1, $arg_2 ) );
    ・・・・・・
    // バッチの実行
    batch_set($batch);
    
    // オペレーション関数
    function batch_operation_function($arg_1, $arg_2, &$context){
    
      // バッチ内の処理
    
    }

一つのオペレーション内に大量なループ、長時間の作業ロジックを避けるべき

  • バッチの各作業しているオペレーション内でで長い時間のタスクや、大量ループなどより、オペレーションが異常終了のことがあります(メモリや、タイムアウトなどの可能性)
  • 各作業を細分化して、オペレーション単位で実行させます
drupal
development
feeds

モジュール(Job Scheduler)がバックグランドでタスクを実行する便利なツールの一つ

  • 環境:Drupal7.54、Job Scheduler7.x-2.0
  • モジュール:Feedsに依存され、バッググランドタスク実行に利用されている
  • Job Schedulerの単独利用も可能だが、管理UIが無くて、ほとんどAPIとしてバックグランドジョブとしての利用
  • Job Scheduler APIの利用は以下のステップとなります
    • hook_cron_job_scheduler_info()の実装(タスクを実行するコールバック関数名の定義)
      /**
       * Implements hook_cron_job_scheduler_info().
       */
      function drills_custom_feeds_cron_job_scheduler_info()
      {
        $schedulers = array();
        $schedulers['chinese_sentence_import_scheduler'] = array(
            'worker callback' => 'chinese_sentence_import',     // タスク内容のコールバック
        );
        return $schedulers;
      }
      
    • 定義されたタスクのコールバック関数を定義
      function chinese_sentence_import($job) {
      
            //  実際のタスク処理ロジック
      
      }
    • 上記処理内容をスケジュールに設定
        //Add a job.
        $job = array(
            'type' => 'story',     // 任意の識別名
            'id' => 20170309,      // 任意のID(例:日付)
            'period' => 3600,      // 実行開始時間(例:3600秒後から実行)
            'periodic' => FALSE,   // 周期的に実行か(FALSE:一回のみ、TRUE:周期的)
        );
        JobScheduler::get('chinese_sentence_import_scheduler')->set($job);
      
    • 上記コードが実行されると、job_scheduleに一レコードが生成され、cronが実行時に、セットされた実行開始時間を比較して、バックグランドで実行されます
      モジュールJob Scheduleが簡単に実装される

Job Schedulerモジュールは長い処理時間(30秒以上)のジョブに適していない

  • モジュールの構造としてはシンプルで、使いやすいです。
    • 一つのジョブに一つのタスクコールバックしかありません(すべてのタスク処理がのコールバックに記述する必要があります)
  • 一度に200ジョブまで、30秒までの処理が制限されていています
    • job_scheduler.moduleでjob_scheduler_cronの処理部分を確認すれば、30秒までの処理が記述されています
      JobSchedulerモジュールのタスク処理制限:30秒以内、200個ジョブまで
    • 30秒以上になると、次のジョブが処理しなくなります

Job Schedulerモジュールで長時間かつ一度実行のみのタスクを実行させる裏技

  • 時に数時間のタスクを実行する必要の場合がありますが、一度のみの実行であれば、以下の方法を試して良いでしょう
  • JobSchedulerクラスがジョブ(Job)をセットすることではなく、dispatch関数(cron実行されたときに、この関数で各ジョブを実行させる)を利用して、即時にタスクを実行させます
     JobScheduler::get('chinese_sentence_import_scheduler')->dispath($job);
  • 上記タスクを実行させるブラウザが返答を待ち状態になりますが、無視してブラウザを閉じっても構わないです。
    • バックグランドで実行しているので、成功するか、失敗する分かりません。
    • タスク実行時に結果をどこかに出力(例:watchdogでレポートに出力)して、確認する方法があります
  • Feedsがデータインポート時にこの方法の利用はできません。
    • Feedsがバックグランドジョブの設定は即時実行タイプ(dispath)ではないからです。
    • 無理矢理にFeedsのコード修正して、実行させることができますが、ほかのインポート対象に影響を与えないため、コードの回復が必要でしょう
drupal
development
data import

Drupalのバッチ(Batch)が複数のオペレーション(Operation)から構成され

  • 一つのバッチに一つ以上のオペレーションから構成される
    一つのバッチに一つ以上のオペレーションがある
  • オペレーション単位でバッチプログレスの状態を管理しています(プログレス・バーと言う)
  • 基本的なバッチプログラムは以下のようで
    // バッチ定義の配列
    $batch=array{
        'title' => t('バッチのタイトル'),   // バッチの名前
        'operations' => array(),      // オペレーション配列
        'finished' => 'import_finished_callback', //終了時のコールバック関数
        'progress_message' => t('Finished @current out of @total.'), // 状態表示
    }
    // オペレーション配列の定義
    $batch['operations'][] = array('batch_operation_function_1', array( [引数が無ければ、空の配列] ) );
    $batch['operations'][] = array('batch_operation_function_2', array( $arg_1, $arg_2 ) );
    ・・・・・・
    // バッチの実行
    batch_set($batch);
    
    // オペレーション関数
    function batch_operation_function($arg_1, $arg_2, &$context){
    
      // バッチ内の処理
    
    }

一つのオペレーション内に大量なループ、長時間の作業ロジックを避けるべき

  • バッチの各作業しているオペレーション内でで長い時間のタスクや、大量ループなどより、オペレーションが異常終了のことがあります(メモリや、タイムアウトなどの可能性)
  • 各作業を細分化して、オペレーション単位で実行させます
drupal
development
feeds

モジュール(Job Scheduler)がバックグランドでタスクを実行する便利なツールの一つ

  • 環境:Drupal7.54、Job Scheduler7.x-2.0
  • モジュール:Feedsに依存され、バッググランドタスク実行に利用されている
  • Job Schedulerの単独利用も可能だが、管理UIが無くて、ほとんどAPIとしてバックグランドジョブとしての利用
  • Job Scheduler APIの利用は以下のステップとなります
    • hook_cron_job_scheduler_info()の実装(タスクを実行するコールバック関数名の定義)
      /**
       * Implements hook_cron_job_scheduler_info().
       */
      function drills_custom_feeds_cron_job_scheduler_info()
      {
        $schedulers = array();
        $schedulers['chinese_sentence_import_scheduler'] = array(
            'worker callback' => 'chinese_sentence_import',     // タスク内容のコールバック
        );
        return $schedulers;
      }
      
    • 定義されたタスクのコールバック関数を定義
      function chinese_sentence_import($job) {
      
            //  実際のタスク処理ロジック
      
      }
    • 上記処理内容をスケジュールに設定
        //Add a job.
        $job = array(
            'type' => 'story',     // 任意の識別名
            'id' => 20170309,      // 任意のID(例:日付)
            'period' => 3600,      // 実行開始時間(例:3600秒後から実行)
            'periodic' => FALSE,   // 周期的に実行か(FALSE:一回のみ、TRUE:周期的)
        );
        JobScheduler::get('chinese_sentence_import_scheduler')->set($job);
      
    • 上記コードが実行されると、job_scheduleに一レコードが生成され、cronが実行時に、セットされた実行開始時間を比較して、バックグランドで実行されます
      モジュールJob Scheduleが簡単に実装される

Job Schedulerモジュールは長い処理時間(30秒以上)のジョブに適していない

  • モジュールの構造としてはシンプルで、使いやすいです。
    • 一つのジョブに一つのタスクコールバックしかありません(すべてのタスク処理がのコールバックに記述する必要があります)
  • 一度に200ジョブまで、30秒までの処理が制限されていています
    • job_scheduler.moduleでjob_scheduler_cronの処理部分を確認すれば、30秒までの処理が記述されています
      JobSchedulerモジュールのタスク処理制限:30秒以内、200個ジョブまで
    • 30秒以上になると、次のジョブが処理しなくなります

Job Schedulerモジュールで長時間かつ一度実行のみのタスクを実行させる裏技

  • 時に数時間のタスクを実行する必要の場合がありますが、一度のみの実行であれば、以下の方法を試して良いでしょう
  • JobSchedulerクラスがジョブ(Job)をセットすることではなく、dispatch関数(cron実行されたときに、この関数で各ジョブを実行させる)を利用して、即時にタスクを実行させます
     JobScheduler::get('chinese_sentence_import_scheduler')->dispath($job);
  • 上記タスクを実行させるブラウザが返答を待ち状態になりますが、無視してブラウザを閉じっても構わないです。
    • バックグランドで実行しているので、成功するか、失敗する分かりません。
    • タスク実行時に結果をどこかに出力(例:watchdogでレポートに出力)して、確認する方法があります
  • Feedsがデータインポート時にこの方法の利用はできません。
    • Feedsがバックグランドジョブの設定は即時実行タイプ(dispath)ではないからです。
    • 無理矢理にFeedsのコード修正して、実行させることができますが、ほかのインポート対象に影響を与えないため、コードの回復が必要でしょう
drupal
development
data import

Drupalのバッチ(Batch)が複数のオペレーション(Operation)から構成され

  • 一つのバッチに一つ以上のオペレーションから構成される
    一つのバッチに一つ以上のオペレーションがある
  • オペレーション単位でバッチプログレスの状態を管理しています(プログレス・バーと言う)
  • 基本的なバッチプログラムは以下のようで
    // バッチ定義の配列
    $batch=array{
        'title' => t('バッチのタイトル'),   // バッチの名前
        'operations' => array(),      // オペレーション配列
        'finished' => 'import_finished_callback', //終了時のコールバック関数
        'progress_message' => t('Finished @current out of @total.'), // 状態表示
    }
    // オペレーション配列の定義
    $batch['operations'][] = array('batch_operation_function_1', array( [引数が無ければ、空の配列] ) );
    $batch['operations'][] = array('batch_operation_function_2', array( $arg_1, $arg_2 ) );
    ・・・・・・
    // バッチの実行
    batch_set($batch);
    
    // オペレーション関数
    function batch_operation_function($arg_1, $arg_2, &$context){
    
      // バッチ内の処理
    
    }

一つのオペレーション内に大量なループ、長時間の作業ロジックを避けるべき

  • バッチの各作業しているオペレーション内でで長い時間のタスクや、大量ループなどより、オペレーションが異常終了のことがあります(メモリや、タイムアウトなどの可能性)
  • 各作業を細分化して、オペレーション単位で実行させます
drupal
development
feeds

モジュール(Job Scheduler)がバックグランドでタスクを実行する便利なツールの一つ

  • 環境:Drupal7.54、Job Scheduler7.x-2.0
  • モジュール:Feedsに依存され、バッググランドタスク実行に利用されている
  • Job Schedulerの単独利用も可能だが、管理UIが無くて、ほとんどAPIとしてバックグランドジョブとしての利用
  • Job Scheduler APIの利用は以下のステップとなります
    • hook_cron_job_scheduler_info()の実装(タスクを実行するコールバック関数名の定義)
      /**
       * Implements hook_cron_job_scheduler_info().
       */
      function drills_custom_feeds_cron_job_scheduler_info()
      {
        $schedulers = array();
        $schedulers['chinese_sentence_import_scheduler'] = array(
            'worker callback' => 'chinese_sentence_import',     // タスク内容のコールバック
        );
        return $schedulers;
      }
      
    • 定義されたタスクのコールバック関数を定義
      function chinese_sentence_import($job) {
      
            //  実際のタスク処理ロジック
      
      }
    • 上記処理内容をスケジュールに設定
        //Add a job.
        $job = array(
            'type' => 'story',     // 任意の識別名
            'id' => 20170309,      // 任意のID(例:日付)
            'period' => 3600,      // 実行開始時間(例:3600秒後から実行)
            'periodic' => FALSE,   // 周期的に実行か(FALSE:一回のみ、TRUE:周期的)
        );
        JobScheduler::get('chinese_sentence_import_scheduler')->set($job);
      
    • 上記コードが実行されると、job_scheduleに一レコードが生成され、cronが実行時に、セットされた実行開始時間を比較して、バックグランドで実行されます
      モジュールJob Scheduleが簡単に実装される

Job Schedulerモジュールは長い処理時間(30秒以上)のジョブに適していない

  • モジュールの構造としてはシンプルで、使いやすいです。
    • 一つのジョブに一つのタスクコールバックしかありません(すべてのタスク処理がのコールバックに記述する必要があります)
  • 一度に200ジョブまで、30秒までの処理が制限されていています
    • job_scheduler.moduleでjob_scheduler_cronの処理部分を確認すれば、30秒までの処理が記述されています
      JobSchedulerモジュールのタスク処理制限:30秒以内、200個ジョブまで
    • 30秒以上になると、次のジョブが処理しなくなります

Job Schedulerモジュールで長時間かつ一度実行のみのタスクを実行させる裏技

  • 時に数時間のタスクを実行する必要の場合がありますが、一度のみの実行であれば、以下の方法を試して良いでしょう
  • JobSchedulerクラスがジョブ(Job)をセットすることではなく、dispatch関数(cron実行されたときに、この関数で各ジョブを実行させる)を利用して、即時にタスクを実行させます
     JobScheduler::get('chinese_sentence_import_scheduler')->dispath($job);
  • 上記タスクを実行させるブラウザが返答を待ち状態になりますが、無視してブラウザを閉じっても構わないです。
    • バックグランドで実行しているので、成功するか、失敗する分かりません。
    • タスク実行時に結果をどこかに出力(例:watchdogでレポートに出力)して、確認する方法があります
  • Feedsがデータインポート時にこの方法の利用はできません。
    • Feedsがバックグランドジョブの設定は即時実行タイプ(dispath)ではないからです。
    • 無理矢理にFeedsのコード修正して、実行させることができますが、ほかのインポート対象に影響を与えないため、コードの回復が必要でしょう
drupal
development
data import

Drupalのバッチ(Batch)が複数のオペレーション(Operation)から構成され

  • 一つのバッチに一つ以上のオペレーションから構成される
    一つのバッチに一つ以上のオペレーションがある
  • オペレーション単位でバッチプログレスの状態を管理しています(プログレス・バーと言う)
  • 基本的なバッチプログラムは以下のようで
    // バッチ定義の配列
    $batch=array{
        'title' => t('バッチのタイトル'),   // バッチの名前
        'operations' => array(),      // オペレーション配列
        'finished' => 'import_finished_callback', //終了時のコールバック関数
        'progress_message' => t('Finished @current out of @total.'), // 状態表示
    }
    // オペレーション配列の定義
    $batch['operations'][] = array('batch_operation_function_1', array( [引数が無ければ、空の配列] ) );
    $batch['operations'][] = array('batch_operation_function_2', array( $arg_1, $arg_2 ) );
    ・・・・・・
    // バッチの実行
    batch_set($batch);
    
    // オペレーション関数
    function batch_operation_function($arg_1, $arg_2, &$context){
    
      // バッチ内の処理
    
    }

一つのオペレーション内に大量なループ、長時間の作業ロジックを避けるべき

  • バッチの各作業しているオペレーション内でで長い時間のタスクや、大量ループなどより、オペレーションが異常終了のことがあります(メモリや、タイムアウトなどの可能性)
  • 各作業を細分化して、オペレーション単位で実行させます
drupal
development
feeds

モジュール(Job Scheduler)がバックグランドでタスクを実行する便利なツールの一つ

  • 環境:Drupal7.54、Job Scheduler7.x-2.0
  • モジュール:Feedsに依存され、バッググランドタスク実行に利用されている
  • Job Schedulerの単独利用も可能だが、管理UIが無くて、ほとんどAPIとしてバックグランドジョブとしての利用
  • Job Scheduler APIの利用は以下のステップとなります
    • hook_cron_job_scheduler_info()の実装(タスクを実行するコールバック関数名の定義)
      /**
       * Implements hook_cron_job_scheduler_info().
       */
      function drills_custom_feeds_cron_job_scheduler_info()
      {
        $schedulers = array();
        $schedulers['chinese_sentence_import_scheduler'] = array(
            'worker callback' => 'chinese_sentence_import',     // タスク内容のコールバック
        );
        return $schedulers;
      }
      
    • 定義されたタスクのコールバック関数を定義
      function chinese_sentence_import($job) {
      
            //  実際のタスク処理ロジック
      
      }
    • 上記処理内容をスケジュールに設定
        //Add a job.
        $job = array(
            'type' => 'story',     // 任意の識別名
            'id' => 20170309,      // 任意のID(例:日付)
            'period' => 3600,      // 実行開始時間(例:3600秒後から実行)
            'periodic' => FALSE,   // 周期的に実行か(FALSE:一回のみ、TRUE:周期的)
        );
        JobScheduler::get('chinese_sentence_import_scheduler')->set($job);
      
    • 上記コードが実行されると、job_scheduleに一レコードが生成され、cronが実行時に、セットされた実行開始時間を比較して、バックグランドで実行されます
      モジュールJob Scheduleが簡単に実装される

Job Schedulerモジュールは長い処理時間(30秒以上)のジョブに適していない

  • モジュールの構造としてはシンプルで、使いやすいです。
    • 一つのジョブに一つのタスクコールバックしかありません(すべてのタスク処理がのコールバックに記述する必要があります)
  • 一度に200ジョブまで、30秒までの処理が制限されていています
    • job_scheduler.moduleでjob_scheduler_cronの処理部分を確認すれば、30秒までの処理が記述されています
      JobSchedulerモジュールのタスク処理制限:30秒以内、200個ジョブまで
    • 30秒以上になると、次のジョブが処理しなくなります

Job Schedulerモジュールで長時間かつ一度実行のみのタスクを実行させる裏技

  • 時に数時間のタスクを実行する必要の場合がありますが、一度のみの実行であれば、以下の方法を試して良いでしょう
  • JobSchedulerクラスがジョブ(Job)をセットすることではなく、dispatch関数(cron実行されたときに、この関数で各ジョブを実行させる)を利用して、即時にタスクを実行させます
     JobScheduler::get('chinese_sentence_import_scheduler')->dispath($job);
  • 上記タスクを実行させるブラウザが返答を待ち状態になりますが、無視してブラウザを閉じっても構わないです。
    • バックグランドで実行しているので、成功するか、失敗する分かりません。
    • タスク実行時に結果をどこかに出力(例:watchdogでレポートに出力)して、確認する方法があります
  • Feedsがデータインポート時にこの方法の利用はできません。
    • Feedsがバックグランドジョブの設定は即時実行タイプ(dispath)ではないからです。
    • 無理矢理にFeedsのコード修正して、実行させることができますが、ほかのインポート対象に影響を与えないため、コードの回復が必要でしょう
drupal
development
data import

Drupalのバッチ(Batch)が複数のオペレーション(Operation)から構成され

  • 一つのバッチに一つ以上のオペレーションから構成される
    一つのバッチに一つ以上のオペレーションがある
  • オペレーション単位でバッチプログレスの状態を管理しています(プログレス・バーと言う)
  • 基本的なバッチプログラムは以下のようで
    // バッチ定義の配列
    $batch=array{
        'title' => t('バッチのタイトル'),   // バッチの名前
        'operations' => array(),      // オペレーション配列
        'finished' => 'import_finished_callback', //終了時のコールバック関数
        'progress_message' => t('Finished @current out of @total.'), // 状態表示
    }
    // オペレーション配列の定義
    $batch['operations'][] = array('batch_operation_function_1', array( [引数が無ければ、空の配列] ) );
    $batch['operations'][] = array('batch_operation_function_2', array( $arg_1, $arg_2 ) );
    ・・・・・・
    // バッチの実行
    batch_set($batch);
    
    // オペレーション関数
    function batch_operation_function($arg_1, $arg_2, &$context){
    
      // バッチ内の処理
    
    }

一つのオペレーション内に大量なループ、長時間の作業ロジックを避けるべき

  • バッチの各作業しているオペレーション内でで長い時間のタスクや、大量ループなどより、オペレーションが異常終了のことがあります(メモリや、タイムアウトなどの可能性)
  • 各作業を細分化して、オペレーション単位で実行させます
drupal
development
feeds

モジュール(Job Scheduler)がバックグランドでタスクを実行する便利なツールの一つ

  • 環境:Drupal7.54、Job Scheduler7.x-2.0
  • モジュール:Feedsに依存され、バッググランドタスク実行に利用されている
  • Job Schedulerの単独利用も可能だが、管理UIが無くて、ほとんどAPIとしてバックグランドジョブとしての利用
  • Job Scheduler APIの利用は以下のステップとなります
    • hook_cron_job_scheduler_info()の実装(タスクを実行するコールバック関数名の定義)
      /**
       * Implements hook_cron_job_scheduler_info().
       */
      function drills_custom_feeds_cron_job_scheduler_info()
      {
        $schedulers = array();
        $schedulers['chinese_sentence_import_scheduler'] = array(
            'worker callback' => 'chinese_sentence_import',     // タスク内容のコールバック
        );
        return $schedulers;
      }
      
    • 定義されたタスクのコールバック関数を定義
      function chinese_sentence_import($job) {
      
            //  実際のタスク処理ロジック
      
      }
    • 上記処理内容をスケジュールに設定
        //Add a job.
        $job = array(
            'type' => 'story',     // 任意の識別名
            'id' => 20170309,      // 任意のID(例:日付)
            'period' => 3600,      // 実行開始時間(例:3600秒後から実行)
            'periodic' => FALSE,   // 周期的に実行か(FALSE:一回のみ、TRUE:周期的)
        );
        JobScheduler::get('chinese_sentence_import_scheduler')->set($job);
      
    • 上記コードが実行されると、job_scheduleに一レコードが生成され、cronが実行時に、セットされた実行開始時間を比較して、バックグランドで実行されます
      モジュールJob Scheduleが簡単に実装される

Job Schedulerモジュールは長い処理時間(30秒以上)のジョブに適していない

  • モジュールの構造としてはシンプルで、使いやすいです。
    • 一つのジョブに一つのタスクコールバックしかありません(すべてのタスク処理がのコールバックに記述する必要があります)
  • 一度に200ジョブまで、30秒までの処理が制限されていています
    • job_scheduler.moduleでjob_scheduler_cronの処理部分を確認すれば、30秒までの処理が記述されています
      JobSchedulerモジュールのタスク処理制限:30秒以内、200個ジョブまで
    • 30秒以上になると、次のジョブが処理しなくなります

Job Schedulerモジュールで長時間かつ一度実行のみのタスクを実行させる裏技

  • 時に数時間のタスクを実行する必要の場合がありますが、一度のみの実行であれば、以下の方法を試して良いでしょう
  • JobSchedulerクラスがジョブ(Job)をセットすることではなく、dispatch関数(cron実行されたときに、この関数で各ジョブを実行させる)を利用して、即時にタスクを実行させます
     JobScheduler::get('chinese_sentence_import_scheduler')->dispath($job);
  • 上記タスクを実行させるブラウザが返答を待ち状態になりますが、無視してブラウザを閉じっても構わないです。
    • バックグランドで実行しているので、成功するか、失敗する分かりません。
    • タスク実行時に結果をどこかに出力(例:watchdogでレポートに出力)して、確認する方法があります
  • Feedsがデータインポート時にこの方法の利用はできません。
    • Feedsがバックグランドジョブの設定は即時実行タイプ(dispath)ではないからです。
    • 無理矢理にFeedsのコード修正して、実行させることができますが、ほかのインポート対象に影響を与えないため、コードの回復が必要でしょう
drupal
development
data import

Drupalのバッチ(Batch)が複数のオペレーション(Operation)から構成され

  • 一つのバッチに一つ以上のオペレーションから構成される
    一つのバッチに一つ以上のオペレーションがある
  • オペレーション単位でバッチプログレスの状態を管理しています(プログレス・バーと言う)
  • 基本的なバッチプログラムは以下のようで
    // バッチ定義の配列
    $batch=array{
        'title' => t('バッチのタイトル'),   // バッチの名前
        'operations' => array(),      // オペレーション配列
        'finished' => 'import_finished_callback', //終了時のコールバック関数
        'progress_message' => t('Finished @current out of @total.'), // 状態表示
    }
    // オペレーション配列の定義
    $batch['operations'][] = array('batch_operation_function_1', array( [引数が無ければ、空の配列] ) );
    $batch['operations'][] = array('batch_operation_function_2', array( $arg_1, $arg_2 ) );
    ・・・・・・
    // バッチの実行
    batch_set($batch);
    
    // オペレーション関数
    function batch_operation_function($arg_1, $arg_2, &$context){
    
      // バッチ内の処理
    
    }

一つのオペレーション内に大量なループ、長時間の作業ロジックを避けるべき

  • バッチの各作業しているオペレーション内でで長い時間のタスクや、大量ループなどより、オペレーションが異常終了のことがあります(メモリや、タイムアウトなどの可能性)
  • 各作業を細分化して、オペレーション単位で実行させます
drupal
development
feeds

モジュール(Job Scheduler)がバックグランドでタスクを実行する便利なツールの一つ

  • 環境:Drupal7.54、Job Scheduler7.x-2.0
  • モジュール:Feedsに依存され、バッググランドタスク実行に利用されている
  • Job Schedulerの単独利用も可能だが、管理UIが無くて、ほとんどAPIとしてバックグランドジョブとしての利用
  • Job Scheduler APIの利用は以下のステップとなります
    • hook_cron_job_scheduler_info()の実装(タスクを実行するコールバック関数名の定義)
      /**
       * Implements hook_cron_job_scheduler_info().
       */
      function drills_custom_feeds_cron_job_scheduler_info()
      {
        $schedulers = array();
        $schedulers['chinese_sentence_import_scheduler'] = array(
            'worker callback' => 'chinese_sentence_import',     // タスク内容のコールバック
        );
        return $schedulers;
      }
      
    • 定義されたタスクのコールバック関数を定義
      function chinese_sentence_import($job) {
      
            //  実際のタスク処理ロジック
      
      }
    • 上記処理内容をスケジュールに設定
        //Add a job.
        $job = array(
            'type' => 'story',     // 任意の識別名
            'id' => 20170309,      // 任意のID(例:日付)
            'period' => 3600,      // 実行開始時間(例:3600秒後から実行)
            'periodic' => FALSE,   // 周期的に実行か(FALSE:一回のみ、TRUE:周期的)
        );
        JobScheduler::get('chinese_sentence_import_scheduler')->set($job);
      
    • 上記コードが実行されると、job_scheduleに一レコードが生成され、cronが実行時に、セットされた実行開始時間を比較して、バックグランドで実行されます
      モジュールJob Scheduleが簡単に実装される

Job Schedulerモジュールは長い処理時間(30秒以上)のジョブに適していない

  • モジュールの構造としてはシンプルで、使いやすいです。
    • 一つのジョブに一つのタスクコールバックしかありません(すべてのタスク処理がのコールバックに記述する必要があります)
  • 一度に200ジョブまで、30秒までの処理が制限されていています
    • job_scheduler.moduleでjob_scheduler_cronの処理部分を確認すれば、30秒までの処理が記述されています
      JobSchedulerモジュールのタスク処理制限:30秒以内、200個ジョブまで
    • 30秒以上になると、次のジョブが処理しなくなります

Job Schedulerモジュールで長時間かつ一度実行のみのタスクを実行させる裏技

  • 時に数時間のタスクを実行する必要の場合がありますが、一度のみの実行であれば、以下の方法を試して良いでしょう
  • JobSchedulerクラスがジョブ(Job)をセットすることではなく、dispatch関数(cron実行されたときに、この関数で各ジョブを実行させる)を利用して、即時にタスクを実行させます
     JobScheduler::get('chinese_sentence_import_scheduler')->dispath($job);
  • 上記タスクを実行させるブラウザが返答を待ち状態になりますが、無視してブラウザを閉じっても構わないです。
    • バックグランドで実行しているので、成功するか、失敗する分かりません。
    • タスク実行時に結果をどこかに出力(例:watchdogでレポートに出力)して、確認する方法があります
  • Feedsがデータインポート時にこの方法の利用はできません。
    • Feedsがバックグランドジョブの設定は即時実行タイプ(dispath)ではないからです。
    • 無理矢理にFeedsのコード修正して、実行させることができますが、ほかのインポート対象に影響を与えないため、コードの回復が必要でしょう
drupal
development
data import

Drupalのバッチ(Batch)が複数のオペレーション(Operation)から構成され

  • 一つのバッチに一つ以上のオペレーションから構成される
    一つのバッチに一つ以上のオペレーションがある
  • オペレーション単位でバッチプログレスの状態を管理しています(プログレス・バーと言う)
  • 基本的なバッチプログラムは以下のようで
    // バッチ定義の配列
    $batch=array{
        'title' => t('バッチのタイトル'),   // バッチの名前
        'operations' => array(),      // オペレーション配列
        'finished' => 'import_finished_callback', //終了時のコールバック関数
        'progress_message' => t('Finished @current out of @total.'), // 状態表示
    }
    // オペレーション配列の定義
    $batch['operations'][] = array('batch_operation_function_1', array( [引数が無ければ、空の配列] ) );
    $batch['operations'][] = array('batch_operation_function_2', array( $arg_1, $arg_2 ) );
    ・・・・・・
    // バッチの実行
    batch_set($batch);
    
    // オペレーション関数
    function batch_operation_function($arg_1, $arg_2, &$context){
    
      // バッチ内の処理
    
    }

一つのオペレーション内に大量なループ、長時間の作業ロジックを避けるべき

  • バッチの各作業しているオペレーション内でで長い時間のタスクや、大量ループなどより、オペレーションが異常終了のことがあります(メモリや、タイムアウトなどの可能性)
  • 各作業を細分化して、オペレーション単位で実行させます
drupal
development
feeds

モジュール(Job Scheduler)がバックグランドでタスクを実行する便利なツールの一つ

  • 環境:Drupal7.54、Job Scheduler7.x-2.0
  • モジュール:Feedsに依存され、バッググランドタスク実行に利用されている
  • Job Schedulerの単独利用も可能だが、管理UIが無くて、ほとんどAPIとしてバックグランドジョブとしての利用
  • Job Scheduler APIの利用は以下のステップとなります
    • hook_cron_job_scheduler_info()の実装(タスクを実行するコールバック関数名の定義)
      /**
       * Implements hook_cron_job_scheduler_info().
       */
      function drills_custom_feeds_cron_job_scheduler_info()
      {
        $schedulers = array();
        $schedulers['chinese_sentence_import_scheduler'] = array(
            'worker callback' => 'chinese_sentence_import',     // タスク内容のコールバック
        );
        return $schedulers;
      }
      
    • 定義されたタスクのコールバック関数を定義
      function chinese_sentence_import($job) {
      
            //  実際のタスク処理ロジック
      
      }
    • 上記処理内容をスケジュールに設定
        //Add a job.
        $job = array(
            'type' => 'story',     // 任意の識別名
            'id' => 20170309,      // 任意のID(例:日付)
            'period' => 3600,      // 実行開始時間(例:3600秒後から実行)
            'periodic' => FALSE,   // 周期的に実行か(FALSE:一回のみ、TRUE:周期的)
        );
        JobScheduler::get('chinese_sentence_import_scheduler')->set($job);
      
    • 上記コードが実行されると、job_scheduleに一レコードが生成され、cronが実行時に、セットされた実行開始時間を比較して、バックグランドで実行されます
      モジュールJob Scheduleが簡単に実装される

Job Schedulerモジュールは長い処理時間(30秒以上)のジョブに適していない

  • モジュールの構造としてはシンプルで、使いやすいです。
    • 一つのジョブに一つのタスクコールバックしかありません(すべてのタスク処理がのコールバックに記述する必要があります)
  • 一度に200ジョブまで、30秒までの処理が制限されていています
    • job_scheduler.moduleでjob_scheduler_cronの処理部分を確認すれば、30秒までの処理が記述されています
      JobSchedulerモジュールのタスク処理制限:30秒以内、200個ジョブまで
    • 30秒以上になると、次のジョブが処理しなくなります

Job Schedulerモジュールで長時間かつ一度実行のみのタスクを実行させる裏技

  • 時に数時間のタスクを実行する必要の場合がありますが、一度のみの実行であれば、以下の方法を試して良いでしょう
  • JobSchedulerクラスがジョブ(Job)をセットすることではなく、dispatch関数(cron実行されたときに、この関数で各ジョブを実行させる)を利用して、即時にタスクを実行させます
     JobScheduler::get('chinese_sentence_import_scheduler')->dispath($job);
  • 上記タスクを実行させるブラウザが返答を待ち状態になりますが、無視してブラウザを閉じっても構わないです。
    • バックグランドで実行しているので、成功するか、失敗する分かりません。
    • タスク実行時に結果をどこかに出力(例:watchdogでレポートに出力)して、確認する方法があります
  • Feedsがデータインポート時にこの方法の利用はできません。
    • Feedsがバックグランドジョブの設定は即時実行タイプ(dispath)ではないからです。
    • 無理矢理にFeedsのコード修正して、実行させることができますが、ほかのインポート対象に影響を与えないため、コードの回復が必要でしょう
drupal
development
data import

Drupalのバッチ(Batch)が複数のオペレーション(Operation)から構成され

  • 一つのバッチに一つ以上のオペレーションから構成される
    一つのバッチに一つ以上のオペレーションがある
  • オペレーション単位でバッチプログレスの状態を管理しています(プログレス・バーと言う)
  • 基本的なバッチプログラムは以下のようで
    // バッチ定義の配列
    $batch=array{
        'title' => t('バッチのタイトル'),   // バッチの名前
        'operations' => array(),      // オペレーション配列
        'finished' => 'import_finished_callback', //終了時のコールバック関数
        'progress_message' => t('Finished @current out of @total.'), // 状態表示
    }
    // オペレーション配列の定義
    $batch['operations'][] = array('batch_operation_function_1', array( [引数が無ければ、空の配列] ) );
    $batch['operations'][] = array('batch_operation_function_2', array( $arg_1, $arg_2 ) );
    ・・・・・・
    // バッチの実行
    batch_set($batch);
    
    // オペレーション関数
    function batch_operation_function($arg_1, $arg_2, &$context){
    
      // バッチ内の処理
    
    }

一つのオペレーション内に大量なループ、長時間の作業ロジックを避けるべき

  • バッチの各作業しているオペレーション内でで長い時間のタスクや、大量ループなどより、オペレーションが異常終了のことがあります(メモリや、タイムアウトなどの可能性)
  • 各作業を細分化して、オペレーション単位で実行させます
drupal
development
feeds

モジュール(Job Scheduler)がバックグランドでタスクを実行する便利なツールの一つ

  • 環境:Drupal7.54、Job Scheduler7.x-2.0
  • モジュール:Feedsに依存され、バッググランドタスク実行に利用されている
  • Job Schedulerの単独利用も可能だが、管理UIが無くて、ほとんどAPIとしてバックグランドジョブとしての利用
  • Job Scheduler APIの利用は以下のステップとなります
    • hook_cron_job_scheduler_info()の実装(タスクを実行するコールバック関数名の定義)
      /**
       * Implements hook_cron_job_scheduler_info().
       */
      function drills_custom_feeds_cron_job_scheduler_info()
      {
        $schedulers = array();
        $schedulers['chinese_sentence_import_scheduler'] = array(
            'worker callback' => 'chinese_sentence_import',     // タスク内容のコールバック
        );
        return $schedulers;
      }
      
    • 定義されたタスクのコールバック関数を定義
      function chinese_sentence_import($job) {
      
            //  実際のタスク処理ロジック
      
      }
    • 上記処理内容をスケジュールに設定
        //Add a job.
        $job = array(
            'type' => 'story',     // 任意の識別名
            'id' => 20170309,      // 任意のID(例:日付)
            'period' => 3600,      // 実行開始時間(例:3600秒後から実行)
            'periodic' => FALSE,   // 周期的に実行か(FALSE:一回のみ、TRUE:周期的)
        );
        JobScheduler::get('chinese_sentence_import_scheduler')->set($job);
      
    • 上記コードが実行されると、job_scheduleに一レコードが生成され、cronが実行時に、セットされた実行開始時間を比較して、バックグランドで実行されます
      モジュールJob Scheduleが簡単に実装される

Job Schedulerモジュールは長い処理時間(30秒以上)のジョブに適していない

  • モジュールの構造としてはシンプルで、使いやすいです。
    • 一つのジョブに一つのタスクコールバックしかありません(すべてのタスク処理がのコールバックに記述する必要があります)
  • 一度に200ジョブまで、30秒までの処理が制限されていています
    • job_scheduler.moduleでjob_scheduler_cronの処理部分を確認すれば、30秒までの処理が記述されています
      JobSchedulerモジュールのタスク処理制限:30秒以内、200個ジョブまで
    • 30秒以上になると、次のジョブが処理しなくなります

Job Schedulerモジュールで長時間かつ一度実行のみのタスクを実行させる裏技

  • 時に数時間のタスクを実行する必要の場合がありますが、一度のみの実行であれば、以下の方法を試して良いでしょう
  • JobSchedulerクラスがジョブ(Job)をセットすることではなく、dispatch関数(cron実行されたときに、この関数で各ジョブを実行させる)を利用して、即時にタスクを実行させます
     JobScheduler::get('chinese_sentence_import_scheduler')->dispath($job);
  • 上記タスクを実行させるブラウザが返答を待ち状態になりますが、無視してブラウザを閉じっても構わないです。
    • バックグランドで実行しているので、成功するか、失敗する分かりません。
    • タスク実行時に結果をどこかに出力(例:watchdogでレポートに出力)して、確認する方法があります
  • Feedsがデータインポート時にこの方法の利用はできません。
    • Feedsがバックグランドジョブの設定は即時実行タイプ(dispath)ではないからです。
    • 無理矢理にFeedsのコード修正して、実行させることができますが、ほかのインポート対象に影響を与えないため、コードの回復が必要でしょう
drupal
development
data import

Drupalのバッチ(Batch)が複数のオペレーション(Operation)から構成され

  • 一つのバッチに一つ以上のオペレーションから構成される
    一つのバッチに一つ以上のオペレーションがある
  • オペレーション単位でバッチプログレスの状態を管理しています(プログレス・バーと言う)
  • 基本的なバッチプログラムは以下のようで
    // バッチ定義の配列
    $batch=array{
        'title' => t('バッチのタイトル'),   // バッチの名前
        'operations' => array(),      // オペレーション配列
        'finished' => 'import_finished_callback', //終了時のコールバック関数
        'progress_message' => t('Finished @current out of @total.'), // 状態表示
    }
    // オペレーション配列の定義
    $batch['operations'][] = array('batch_operation_function_1', array( [引数が無ければ、空の配列] ) );
    $batch['operations'][] = array('batch_operation_function_2', array( $arg_1, $arg_2 ) );
    ・・・・・・
    // バッチの実行
    batch_set($batch);
    
    // オペレーション関数
    function batch_operation_function($arg_1, $arg_2, &$context){
    
      // バッチ内の処理
    
    }

一つのオペレーション内に大量なループ、長時間の作業ロジックを避けるべき

  • バッチの各作業しているオペレーション内でで長い時間のタスクや、大量ループなどより、オペレーションが異常終了のことがあります(メモリや、タイムアウトなどの可能性)
  • 各作業を細分化して、オペレーション単位で実行させます
drupal
development
feeds

モジュール(Job Scheduler)がバックグランドでタスクを実行する便利なツールの一つ

  • 環境:Drupal7.54、Job Scheduler7.x-2.0
  • モジュール:Feedsに依存され、バッググランドタスク実行に利用されている
  • Job Schedulerの単独利用も可能だが、管理UIが無くて、ほとんどAPIとしてバックグランドジョブとしての利用
  • Job Scheduler APIの利用は以下のステップとなります
    • hook_cron_job_scheduler_info()の実装(タスクを実行するコールバック関数名の定義)
      /**
       * Implements hook_cron_job_scheduler_info().
       */
      function drills_custom_feeds_cron_job_scheduler_info()
      {
        $schedulers = array();
        $schedulers['chinese_sentence_import_scheduler'] = array(
            'worker callback' => 'chinese_sentence_import',     // タスク内容のコールバック
        );
        return $schedulers;
      }
      
    • 定義されたタスクのコールバック関数を定義
      function chinese_sentence_import($job) {
      
            //  実際のタスク処理ロジック
      
      }
    • 上記処理内容をスケジュールに設定
        //Add a job.
        $job = array(
            'type' => 'story',     // 任意の識別名
            'id' => 20170309,      // 任意のID(例:日付)
            'period' => 3600,      // 実行開始時間(例:3600秒後から実行)
            'periodic' => FALSE,   // 周期的に実行か(FALSE:一回のみ、TRUE:周期的)
        );
        JobScheduler::get('chinese_sentence_import_scheduler')->set($job);
      
    • 上記コードが実行されると、job_scheduleに一レコードが生成され、cronが実行時に、セットされた実行開始時間を比較して、バックグランドで実行されます
      モジュールJob Scheduleが簡単に実装される

Job Schedulerモジュールは長い処理時間(30秒以上)のジョブに適していない

  • モジュールの構造としてはシンプルで、使いやすいです。
    • 一つのジョブに一つのタスクコールバックしかありません(すべてのタスク処理がのコールバックに記述する必要があります)
  • 一度に200ジョブまで、30秒までの処理が制限されていています
    • job_scheduler.moduleでjob_scheduler_cronの処理部分を確認すれば、30秒までの処理が記述されています
      JobSchedulerモジュールのタスク処理制限:30秒以内、200個ジョブまで
    • 30秒以上になると、次のジョブが処理しなくなります

Job Schedulerモジュールで長時間かつ一度実行のみのタスクを実行させる裏技

  • 時に数時間のタスクを実行する必要の場合がありますが、一度のみの実行であれば、以下の方法を試して良いでしょう
  • JobSchedulerクラスがジョブ(Job)をセットすることではなく、dispatch関数(cron実行されたときに、この関数で各ジョブを実行させる)を利用して、即時にタスクを実行させます
     JobScheduler::get('chinese_sentence_import_scheduler')->dispath($job);
  • 上記タスクを実行させるブラウザが返答を待ち状態になりますが、無視してブラウザを閉じっても構わないです。
    • バックグランドで実行しているので、成功するか、失敗する分かりません。
    • タスク実行時に結果をどこかに出力(例:watchdogでレポートに出力)して、確認する方法があります
  • Feedsがデータインポート時にこの方法の利用はできません。
    • Feedsがバックグランドジョブの設定は即時実行タイプ(dispath)ではないからです。
    • 無理矢理にFeedsのコード修正して、実行させることができますが、ほかのインポート対象に影響を与えないため、コードの回復が必要でしょう
drupal
development
data import

Drupalのバッチ(Batch)が複数のオペレーション(Operation)から構成され

  • 一つのバッチに一つ以上のオペレーションから構成される
    一つのバッチに一つ以上のオペレーションがある
  • オペレーション単位でバッチプログレスの状態を管理しています(プログレス・バーと言う)
  • 基本的なバッチプログラムは以下のようで
    // バッチ定義の配列
    $batch=array{
        'title' => t('バッチのタイトル'),   // バッチの名前
        'operations' => array(),      // オペレーション配列
        'finished' => 'import_finished_callback', //終了時のコールバック関数
        'progress_message' => t('Finished @current out of @total.'), // 状態表示
    }
    // オペレーション配列の定義
    $batch['operations'][] = array('batch_operation_function_1', array( [引数が無ければ、空の配列] ) );
    $batch['operations'][] = array('batch_operation_function_2', array( $arg_1, $arg_2 ) );
    ・・・・・・
    // バッチの実行
    batch_set($batch);
    
    // オペレーション関数
    function batch_operation_function($arg_1, $arg_2, &$context){
    
      // バッチ内の処理
    
    }

一つのオペレーション内に大量なループ、長時間の作業ロジックを避けるべき

  • バッチの各作業しているオペレーション内でで長い時間のタスクや、大量ループなどより、オペレーションが異常終了のことがあります(メモリや、タイムアウトなどの可能性)
  • 各作業を細分化して、オペレーション単位で実行させます
drupal
development
feeds

モジュール(Job Scheduler)がバックグランドでタスクを実行する便利なツールの一つ

  • 環境:Drupal7.54、Job Scheduler7.x-2.0
  • モジュール:Feedsに依存され、バッググランドタスク実行に利用されている
  • Job Schedulerの単独利用も可能だが、管理UIが無くて、ほとんどAPIとしてバックグランドジョブとしての利用
  • Job Scheduler APIの利用は以下のステップとなります
    • hook_cron_job_scheduler_info()の実装(タスクを実行するコールバック関数名の定義)
      /**
       * Implements hook_cron_job_scheduler_info().
       */
      function drills_custom_feeds_cron_job_scheduler_info()
      {
        $schedulers = array();
        $schedulers['chinese_sentence_import_scheduler'] = array(
            'worker callback' => 'chinese_sentence_import',     // タスク内容のコールバック
        );
        return $schedulers;
      }
      
    • 定義されたタスクのコールバック関数を定義
      function chinese_sentence_import($job) {
      
            //  実際のタスク処理ロジック
      
      }
    • 上記処理内容をスケジュールに設定
        //Add a job.
        $job = array(
            'type' => 'story',     // 任意の識別名
            'id' => 20170309,      // 任意のID(例:日付)
            'period' => 3600,      // 実行開始時間(例:3600秒後から実行)
            'periodic' => FALSE,   // 周期的に実行か(FALSE:一回のみ、TRUE:周期的)
        );
        JobScheduler::get('chinese_sentence_import_scheduler')->set($job);
      
    • 上記コードが実行されると、job_scheduleに一レコードが生成され、cronが実行時に、セットされた実行開始時間を比較して、バックグランドで実行されます
      モジュールJob Scheduleが簡単に実装される

Job Schedulerモジュールは長い処理時間(30秒以上)のジョブに適していない

  • モジュールの構造としてはシンプルで、使いやすいです。
    • 一つのジョブに一つのタスクコールバックしかありません(すべてのタスク処理がのコールバックに記述する必要があります)
  • 一度に200ジョブまで、30秒までの処理が制限されていています
    • job_scheduler.moduleでjob_scheduler_cronの処理部分を確認すれば、30秒までの処理が記述されています
      JobSchedulerモジュールのタスク処理制限:30秒以内、200個ジョブまで
    • 30秒以上になると、次のジョブが処理しなくなります

Job Schedulerモジュールで長時間かつ一度実行のみのタスクを実行させる裏技

  • 時に数時間のタスクを実行する必要の場合がありますが、一度のみの実行であれば、以下の方法を試して良いでしょう
  • JobSchedulerクラスがジョブ(Job)をセットすることではなく、dispatch関数(cron実行されたときに、この関数で各ジョブを実行させる)を利用して、即時にタスクを実行させます
     JobScheduler::get('chinese_sentence_import_scheduler')->dispath($job);
  • 上記タスクを実行させるブラウザが返答を待ち状態になりますが、無視してブラウザを閉じっても構わないです。
    • バックグランドで実行しているので、成功するか、失敗する分かりません。
    • タスク実行時に結果をどこかに出力(例:watchdogでレポートに出力)して、確認する方法があります
  • Feedsがデータインポート時にこの方法の利用はできません。
    • Feedsがバックグランドジョブの設定は即時実行タイプ(dispath)ではないからです。
    • 無理矢理にFeedsのコード修正して、実行させることができますが、ほかのインポート対象に影響を与えないため、コードの回復が必要でしょう
drupal
development
data import

Drupalのバッチ(Batch)が複数のオペレーション(Operation)から構成され

  • 一つのバッチに一つ以上のオペレーションから構成される
    一つのバッチに一つ以上のオペレーションがある
  • オペレーション単位でバッチプログレスの状態を管理しています(プログレス・バーと言う)
  • 基本的なバッチプログラムは以下のようで
    // バッチ定義の配列
    $batch=array{
        'title' => t('バッチのタイトル'),   // バッチの名前
        'operations' => array(),      // オペレーション配列
        'finished' => 'import_finished_callback', //終了時のコールバック関数
        'progress_message' => t('Finished @current out of @total.'), // 状態表示
    }
    // オペレーション配列の定義
    $batch['operations'][] = array('batch_operation_function_1', array( [引数が無ければ、空の配列] ) );
    $batch['operations'][] = array('batch_operation_function_2', array( $arg_1, $arg_2 ) );
    ・・・・・・
    // バッチの実行
    batch_set($batch);
    
    // オペレーション関数
    function batch_operation_function($arg_1, $arg_2, &$context){
    
      // バッチ内の処理
    
    }

一つのオペレーション内に大量なループ、長時間の作業ロジックを避けるべき

  • バッチの各作業しているオペレーション内でで長い時間のタスクや、大量ループなどより、オペレーションが異常終了のことがあります(メモリや、タイムアウトなどの可能性)
  • 各作業を細分化して、オペレーション単位で実行させます
drupal
development
feeds

モジュール(Job Scheduler)がバックグランドでタスクを実行する便利なツールの一つ

  • 環境:Drupal7.54、Job Scheduler7.x-2.0
  • モジュール:Feedsに依存され、バッググランドタスク実行に利用されている
  • Job Schedulerの単独利用も可能だが、管理UIが無くて、ほとんどAPIとしてバックグランドジョブとしての利用
  • Job Scheduler APIの利用は以下のステップとなります
    • hook_cron_job_scheduler_info()の実装(タスクを実行するコールバック関数名の定義)
      /**
       * Implements hook_cron_job_scheduler_info().
       */
      function drills_custom_feeds_cron_job_scheduler_info()
      {
        $schedulers = array();
        $schedulers['chinese_sentence_import_scheduler'] = array(
            'worker callback' => 'chinese_sentence_import',     // タスク内容のコールバック
        );
        return $schedulers;
      }
      
    • 定義されたタスクのコールバック関数を定義
      function chinese_sentence_import($job) {
      
            //  実際のタスク処理ロジック
      
      }
    • 上記処理内容をスケジュールに設定
        //Add a job.
        $job = array(
            'type' => 'story',     // 任意の識別名
            'id' => 20170309,      // 任意のID(例:日付)
            'period' => 3600,      // 実行開始時間(例:3600秒後から実行)
            'periodic' => FALSE,   // 周期的に実行か(FALSE:一回のみ、TRUE:周期的)
        );
        JobScheduler::get('chinese_sentence_import_scheduler')->set($job);
      
    • 上記コードが実行されると、job_scheduleに一レコードが生成され、cronが実行時に、セットされた実行開始時間を比較して、バックグランドで実行されます
      モジュールJob Scheduleが簡単に実装される

Job Schedulerモジュールは長い処理時間(30秒以上)のジョブに適していない

  • モジュールの構造としてはシンプルで、使いやすいです。
    • 一つのジョブに一つのタスクコールバックしかありません(すべてのタスク処理がのコールバックに記述する必要があります)
  • 一度に200ジョブまで、30秒までの処理が制限されていています
    • job_scheduler.moduleでjob_scheduler_cronの処理部分を確認すれば、30秒までの処理が記述されています
      JobSchedulerモジュールのタスク処理制限:30秒以内、200個ジョブまで
    • 30秒以上になると、次のジョブが処理しなくなります

Job Schedulerモジュールで長時間かつ一度実行のみのタスクを実行させる裏技

  • 時に数時間のタスクを実行する必要の場合がありますが、一度のみの実行であれば、以下の方法を試して良いでしょう
  • JobSchedulerクラスがジョブ(Job)をセットすることではなく、dispatch関数(cron実行されたときに、この関数で各ジョブを実行させる)を利用して、即時にタスクを実行させます
     JobScheduler::get('chinese_sentence_import_scheduler')->dispath($job);
  • 上記タスクを実行させるブラウザが返答を待ち状態になりますが、無視してブラウザを閉じっても構わないです。
    • バックグランドで実行しているので、成功するか、失敗する分かりません。
    • タスク実行時に結果をどこかに出力(例:watchdogでレポートに出力)して、確認する方法があります
  • Feedsがデータインポート時にこの方法の利用はできません。
    • Feedsがバックグランドジョブの設定は即時実行タイプ(dispath)ではないからです。
    • 無理矢理にFeedsのコード修正して、実行させることができますが、ほかのインポート対象に影響を与えないため、コードの回復が必要でしょう
drupal
development
data import

Drupalのバッチ(Batch)が複数のオペレーション(Operation)から構成され

  • 一つのバッチに一つ以上のオペレーションから構成される
    一つのバッチに一つ以上のオペレーションがある
  • オペレーション単位でバッチプログレスの状態を管理しています(プログレス・バーと言う)
  • 基本的なバッチプログラムは以下のようで
    // バッチ定義の配列
    $batch=array{
        'title' => t('バッチのタイトル'),   // バッチの名前
        'operations' => array(),      // オペレーション配列
        'finished' => 'import_finished_callback', //終了時のコールバック関数
        'progress_message' => t('Finished @current out of @total.'), // 状態表示
    }
    // オペレーション配列の定義
    $batch['operations'][] = array('batch_operation_function_1', array( [引数が無ければ、空の配列] ) );
    $batch['operations'][] = array('batch_operation_function_2', array( $arg_1, $arg_2 ) );
    ・・・・・・
    // バッチの実行
    batch_set($batch);
    
    // オペレーション関数
    function batch_operation_function($arg_1, $arg_2, &$context){
    
      // バッチ内の処理
    
    }

一つのオペレーション内に大量なループ、長時間の作業ロジックを避けるべき

  • バッチの各作業しているオペレーション内でで長い時間のタスクや、大量ループなどより、オペレーションが異常終了のことがあります(メモリや、タイムアウトなどの可能性)
  • 各作業を細分化して、オペレーション単位で実行させます
drupal
development
feeds

モジュール(Job Scheduler)がバックグランドでタスクを実行する便利なツールの一つ

  • 環境:Drupal7.54、Job Scheduler7.x-2.0
  • モジュール:Feedsに依存され、バッググランドタスク実行に利用されている
  • Job Schedulerの単独利用も可能だが、管理UIが無くて、ほとんどAPIとしてバックグランドジョブとしての利用
  • Job Scheduler APIの利用は以下のステップとなります
    • hook_cron_job_scheduler_info()の実装(タスクを実行するコールバック関数名の定義)
      /**
       * Implements hook_cron_job_scheduler_info().
       */
      function drills_custom_feeds_cron_job_scheduler_info()
      {
        $schedulers = array();
        $schedulers['chinese_sentence_import_scheduler'] = array(
            'worker callback' => 'chinese_sentence_import',     // タスク内容のコールバック
        );
        return $schedulers;
      }
      
    • 定義されたタスクのコールバック関数を定義
      function chinese_sentence_import($job) {
      
            //  実際のタスク処理ロジック
      
      }
    • 上記処理内容をスケジュールに設定
        //Add a job.
        $job = array(
            'type' => 'story',     // 任意の識別名
            'id' => 20170309,      // 任意のID(例:日付)
            'period' => 3600,      // 実行開始時間(例:3600秒後から実行)
            'periodic' => FALSE,   // 周期的に実行か(FALSE:一回のみ、TRUE:周期的)
        );
        JobScheduler::get('chinese_sentence_import_scheduler')->set($job);
      
    • 上記コードが実行されると、job_scheduleに一レコードが生成され、cronが実行時に、セットされた実行開始時間を比較して、バックグランドで実行されます
      モジュールJob Scheduleが簡単に実装される

Job Schedulerモジュールは長い処理時間(30秒以上)のジョブに適していない

  • モジュールの構造としてはシンプルで、使いやすいです。
    • 一つのジョブに一つのタスクコールバックしかありません(すべてのタスク処理がのコールバックに記述する必要があります)
  • 一度に200ジョブまで、30秒までの処理が制限されていています
    • job_scheduler.moduleでjob_scheduler_cronの処理部分を確認すれば、30秒までの処理が記述されています
      JobSchedulerモジュールのタスク処理制限:30秒以内、200個ジョブまで
    • 30秒以上になると、次のジョブが処理しなくなります

Job Schedulerモジュールで長時間かつ一度実行のみのタスクを実行させる裏技

  • 時に数時間のタスクを実行する必要の場合がありますが、一度のみの実行であれば、以下の方法を試して良いでしょう
  • JobSchedulerクラスがジョブ(Job)をセットすることではなく、dispatch関数(cron実行されたときに、この関数で各ジョブを実行させる)を利用して、即時にタスクを実行させます
     JobScheduler::get('chinese_sentence_import_scheduler')->dispath($job);
  • 上記タスクを実行させるブラウザが返答を待ち状態になりますが、無視してブラウザを閉じっても構わないです。
    • バックグランドで実行しているので、成功するか、失敗する分かりません。
    • タスク実行時に結果をどこかに出力(例:watchdogでレポートに出力)して、確認する方法があります
  • Feedsがデータインポート時にこの方法の利用はできません。
    • Feedsがバックグランドジョブの設定は即時実行タイプ(dispath)ではないからです。
    • 無理矢理にFeedsのコード修正して、実行させることができますが、ほかのインポート対象に影響を与えないため、コードの回復が必要でしょう
drupal
development
data import

Drupalのバッチ(Batch)が複数のオペレーション(Operation)から構成され

  • 一つのバッチに一つ以上のオペレーションから構成される
    一つのバッチに一つ以上のオペレーションがある
  • オペレーション単位でバッチプログレスの状態を管理しています(プログレス・バーと言う)
  • 基本的なバッチプログラムは以下のようで
    // バッチ定義の配列
    $batch=array{
        'title' => t('バッチのタイトル'),   // バッチの名前
        'operations' => array(),      // オペレーション配列
        'finished' => 'import_finished_callback', //終了時のコールバック関数
        'progress_message' => t('Finished @current out of @total.'), // 状態表示
    }
    // オペレーション配列の定義
    $batch['operations'][] = array('batch_operation_function_1', array( [引数が無ければ、空の配列] ) );
    $batch['operations'][] = array('batch_operation_function_2', array( $arg_1, $arg_2 ) );
    ・・・・・・
    // バッチの実行
    batch_set($batch);
    
    // オペレーション関数
    function batch_operation_function($arg_1, $arg_2, &$context){
    
      // バッチ内の処理
    
    }

一つのオペレーション内に大量なループ、長時間の作業ロジックを避けるべき

  • バッチの各作業しているオペレーション内でで長い時間のタスクや、大量ループなどより、オペレーションが異常終了のことがあります(メモリや、タイムアウトなどの可能性)
  • 各作業を細分化して、オペレーション単位で実行させます
drupal
development
feeds

モジュール(Job Scheduler)がバックグランドでタスクを実行する便利なツールの一つ

  • 環境:Drupal7.54、Job Scheduler7.x-2.0
  • モジュール:Feedsに依存され、バッググランドタスク実行に利用されている
  • Job Schedulerの単独利用も可能だが、管理UIが無くて、ほとんどAPIとしてバックグランドジョブとしての利用
  • Job Scheduler APIの利用は以下のステップとなります
    • hook_cron_job_scheduler_info()の実装(タスクを実行するコールバック関数名の定義)
      /**
       * Implements hook_cron_job_scheduler_info().
       */
      function drills_custom_feeds_cron_job_scheduler_info()
      {
        $schedulers = array();
        $schedulers['chinese_sentence_import_scheduler'] = array(
            'worker callback' => 'chinese_sentence_import',     // タスク内容のコールバック
        );
        return $schedulers;
      }
      
    • 定義されたタスクのコールバック関数を定義
      function chinese_sentence_import($job) {
      
            //  実際のタスク処理ロジック
      
      }
    • 上記処理内容をスケジュールに設定
        //Add a job.
        $job = array(
            'type' => 'story',     // 任意の識別名
            'id' => 20170309,      // 任意のID(例:日付)
            'period' => 3600,      // 実行開始時間(例:3600秒後から実行)
            'periodic' => FALSE,   // 周期的に実行か(FALSE:一回のみ、TRUE:周期的)
        );
        JobScheduler::get('chinese_sentence_import_scheduler')->set($job);
      
    • 上記コードが実行されると、job_scheduleに一レコードが生成され、cronが実行時に、セットされた実行開始時間を比較して、バックグランドで実行されます
      モジュールJob Scheduleが簡単に実装される

Job Schedulerモジュールは長い処理時間(30秒以上)のジョブに適していない

  • モジュールの構造としてはシンプルで、使いやすいです。
    • 一つのジョブに一つのタスクコールバックしかありません(すべてのタスク処理がのコールバックに記述する必要があります)
  • 一度に200ジョブまで、30秒までの処理が制限されていています
    • job_scheduler.moduleでjob_scheduler_cronの処理部分を確認すれば、30秒までの処理が記述されています
      JobSchedulerモジュールのタスク処理制限:30秒以内、200個ジョブまで
    • 30秒以上になると、次のジョブが処理しなくなります

Job Schedulerモジュールで長時間かつ一度実行のみのタスクを実行させる裏技

  • 時に数時間のタスクを実行する必要の場合がありますが、一度のみの実行であれば、以下の方法を試して良いでしょう
  • JobSchedulerクラスがジョブ(Job)をセットすることではなく、dispatch関数(cron実行されたときに、この関数で各ジョブを実行させる)を利用して、即時にタスクを実行させます
     JobScheduler::get('chinese_sentence_import_scheduler')->dispath($job);
  • 上記タスクを実行させるブラウザが返答を待ち状態になりますが、無視してブラウザを閉じっても構わないです。
    • バックグランドで実行しているので、成功するか、失敗する分かりません。
    • タスク実行時に結果をどこかに出力(例:watchdogでレポートに出力)して、確認する方法があります
  • Feedsがデータインポート時にこの方法の利用はできません。
    • Feedsがバックグランドジョブの設定は即時実行タイプ(dispath)ではないからです。
    • 無理矢理にFeedsのコード修正して、実行させることができますが、ほかのインポート対象に影響を与えないため、コードの回復が必要でしょう
drupal
development
data import

Drupalのバッチ(Batch)が複数のオペレーション(Operation)から構成され

  • 一つのバッチに一つ以上のオペレーションから構成される
    一つのバッチに一つ以上のオペレーションがある
  • オペレーション単位でバッチプログレスの状態を管理しています(プログレス・バーと言う)
  • 基本的なバッチプログラムは以下のようで
    // バッチ定義の配列
    $batch=array{
        'title' => t('バッチのタイトル'),   // バッチの名前
        'operations' => array(),      // オペレーション配列
        'finished' => 'import_finished_callback', //終了時のコールバック関数
        'progress_message' => t('Finished @current out of @total.'), // 状態表示
    }
    // オペレーション配列の定義
    $batch['operations'][] = array('batch_operation_function_1', array( [引数が無ければ、空の配列] ) );
    $batch['operations'][] = array('batch_operation_function_2', array( $arg_1, $arg_2 ) );
    ・・・・・・
    // バッチの実行
    batch_set($batch);
    
    // オペレーション関数
    function batch_operation_function($arg_1, $arg_2, &$context){
    
      // バッチ内の処理
    
    }

一つのオペレーション内に大量なループ、長時間の作業ロジックを避けるべき

  • バッチの各作業しているオペレーション内でで長い時間のタスクや、大量ループなどより、オペレーションが異常終了のことがあります(メモリや、タイムアウトなどの可能性)
  • 各作業を細分化して、オペレーション単位で実行させます
drupal
development
feeds

モジュール(Job Scheduler)がバックグランドでタスクを実行する便利なツールの一つ

  • 環境:Drupal7.54、Job Scheduler7.x-2.0
  • モジュール:Feedsに依存され、バッググランドタスク実行に利用されている
  • Job Schedulerの単独利用も可能だが、管理UIが無くて、ほとんどAPIとしてバックグランドジョブとしての利用
  • Job Scheduler APIの利用は以下のステップとなります
    • hook_cron_job_scheduler_info()の実装(タスクを実行するコールバック関数名の定義)
      /**
       * Implements hook_cron_job_scheduler_info().
       */
      function drills_custom_feeds_cron_job_scheduler_info()
      {
        $schedulers = array();
        $schedulers['chinese_sentence_import_scheduler'] = array(
            'worker callback' => 'chinese_sentence_import',     // タスク内容のコールバック
        );
        return $schedulers;
      }
      
    • 定義されたタスクのコールバック関数を定義
      function chinese_sentence_import($job) {
      
            //  実際のタスク処理ロジック
      
      }
    • 上記処理内容をスケジュールに設定
        //Add a job.
        $job = array(
            'type' => 'story',     // 任意の識別名
            'id' => 20170309,      // 任意のID(例:日付)
            'period' => 3600,      // 実行開始時間(例:3600秒後から実行)
            'periodic' => FALSE,   // 周期的に実行か(FALSE:一回のみ、TRUE:周期的)
        );
        JobScheduler::get('chinese_sentence_import_scheduler')->set($job);
      
    • 上記コードが実行されると、job_scheduleに一レコードが生成され、cronが実行時に、セットされた実行開始時間を比較して、バックグランドで実行されます
      モジュールJob Scheduleが簡単に実装される

Job Schedulerモジュールは長い処理時間(30秒以上)のジョブに適していない

  • モジュールの構造としてはシンプルで、使いやすいです。
    • 一つのジョブに一つのタスクコールバックしかありません(すべてのタスク処理がのコールバックに記述する必要があります)
  • 一度に200ジョブまで、30秒までの処理が制限されていています
    • job_scheduler.moduleでjob_scheduler_cronの処理部分を確認すれば、30秒までの処理が記述されています
      JobSchedulerモジュールのタスク処理制限:30秒以内、200個ジョブまで
    • 30秒以上になると、次のジョブが処理しなくなります

Job Schedulerモジュールで長時間かつ一度実行のみのタスクを実行させる裏技

  • 時に数時間のタスクを実行する必要の場合がありますが、一度のみの実行であれば、以下の方法を試して良いでしょう
  • JobSchedulerクラスがジョブ(Job)をセットすることではなく、dispatch関数(cron実行されたときに、この関数で各ジョブを実行させる)を利用して、即時にタスクを実行させます
     JobScheduler::get('chinese_sentence_import_scheduler')->dispath($job);
  • 上記タスクを実行させるブラウザが返答を待ち状態になりますが、無視してブラウザを閉じっても構わないです。
    • バックグランドで実行しているので、成功するか、失敗する分かりません。
    • タスク実行時に結果をどこかに出力(例:watchdogでレポートに出力)して、確認する方法があります
  • Feedsがデータインポート時にこの方法の利用はできません。
    • Feedsがバックグランドジョブの設定は即時実行タイプ(dispath)ではないからです。
    • 無理矢理にFeedsのコード修正して、実行させることができますが、ほかのインポート対象に影響を与えないため、コードの回復が必要でしょう
drupal
development
data import

Drupalのバッチ(Batch)が複数のオペレーション(Operation)から構成され

  • 一つのバッチに一つ以上のオペレーションから構成される
    一つのバッチに一つ以上のオペレーションがある
  • オペレーション単位でバッチプログレスの状態を管理しています(プログレス・バーと言う)
  • 基本的なバッチプログラムは以下のようで
    // バッチ定義の配列
    $batch=array{
        'title' => t('バッチのタイトル'),   // バッチの名前
        'operations' => array(),      // オペレーション配列
        'finished' => 'import_finished_callback', //終了時のコールバック関数
        'progress_message' => t('Finished @current out of @total.'), // 状態表示
    }
    // オペレーション配列の定義
    $batch['operations'][] = array('batch_operation_function_1', array( [引数が無ければ、空の配列] ) );
    $batch['operations'][] = array('batch_operation_function_2', array( $arg_1, $arg_2 ) );
    ・・・・・・
    // バッチの実行
    batch_set($batch);
    
    // オペレーション関数
    function batch_operation_function($arg_1, $arg_2, &$context){
    
      // バッチ内の処理
    
    }

一つのオペレーション内に大量なループ、長時間の作業ロジックを避けるべき

  • バッチの各作業しているオペレーション内でで長い時間のタスクや、大量ループなどより、オペレーションが異常終了のことがあります(メモリや、タイムアウトなどの可能性)
  • 各作業を細分化して、オペレーション単位で実行させます
drupal
development
feeds

モジュール(Job Scheduler)がバックグランドでタスクを実行する便利なツールの一つ

  • 環境:Drupal7.54、Job Scheduler7.x-2.0
  • モジュール:Feedsに依存され、バッググランドタスク実行に利用されている
  • Job Schedulerの単独利用も可能だが、管理UIが無くて、ほとんどAPIとしてバックグランドジョブとしての利用
  • Job Scheduler APIの利用は以下のステップとなります
    • hook_cron_job_scheduler_info()の実装(タスクを実行するコールバック関数名の定義)
      /**
       * Implements hook_cron_job_scheduler_info().
       */
      function drills_custom_feeds_cron_job_scheduler_info()
      {
        $schedulers = array();
        $schedulers['chinese_sentence_import_scheduler'] = array(
            'worker callback' => 'chinese_sentence_import',     // タスク内容のコールバック
        );
        return $schedulers;
      }
      
    • 定義されたタスクのコールバック関数を定義
      function chinese_sentence_import($job) {
      
            //  実際のタスク処理ロジック
      
      }
    • 上記処理内容をスケジュールに設定
        //Add a job.
        $job = array(
            'type' => 'story',     // 任意の識別名
            'id' => 20170309,      // 任意のID(例:日付)
            'period' => 3600,      // 実行開始時間(例:3600秒後から実行)
            'periodic' => FALSE,   // 周期的に実行か(FALSE:一回のみ、TRUE:周期的)
        );
        JobScheduler::get('chinese_sentence_import_scheduler')->set($job);
      
    • 上記コードが実行されると、job_scheduleに一レコードが生成され、cronが実行時に、セットされた実行開始時間を比較して、バックグランドで実行されます
      モジュールJob Scheduleが簡単に実装される

Job Schedulerモジュールは長い処理時間(30秒以上)のジョブに適していない

  • モジュールの構造としてはシンプルで、使いやすいです。
    • 一つのジョブに一つのタスクコールバックしかありません(すべてのタスク処理がのコールバックに記述する必要があります)
  • 一度に200ジョブまで、30秒までの処理が制限されていています
    • job_scheduler.moduleでjob_scheduler_cronの処理部分を確認すれば、30秒までの処理が記述されています
      JobSchedulerモジュールのタスク処理制限:30秒以内、200個ジョブまで
    • 30秒以上になると、次のジョブが処理しなくなります

Job Schedulerモジュールで長時間かつ一度実行のみのタスクを実行させる裏技

  • 時に数時間のタスクを実行する必要の場合がありますが、一度のみの実行であれば、以下の方法を試して良いでしょう
  • JobSchedulerクラスがジョブ(Job)をセットすることではなく、dispatch関数(cron実行されたときに、この関数で各ジョブを実行させる)を利用して、即時にタスクを実行させます
     JobScheduler::get('chinese_sentence_import_scheduler')->dispath($job);
  • 上記タスクを実行させるブラウザが返答を待ち状態になりますが、無視してブラウザを閉じっても構わないです。
    • バックグランドで実行しているので、成功するか、失敗する分かりません。
    • タスク実行時に結果をどこかに出力(例:watchdogでレポートに出力)して、確認する方法があります
  • Feedsがデータインポート時にこの方法の利用はできません。
    • Feedsがバックグランドジョブの設定は即時実行タイプ(dispath)ではないからです。
    • 無理矢理にFeedsのコード修正して、実行させることができますが、ほかのインポート対象に影響を与えないため、コードの回復が必要でしょう
drupal
feeds
module usage

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

モジュール(Feeds)が非階層化されているタクソノミータームのインポートが可能

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのcsvファイルインポートについて、「Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考にしてください。
  • 非階層化のタクソノミータームcsvデータは以下のよう
    DrupalのFeedsで非階層化のタクソノミータームのインポート
  • タクソノミータームのインポート操作はビデオを参考にしてください
  • プロセッサーのマッピング設定ポイント:
    • 記事のタイトルをキーにして、タイトルでインポートデータを記事との照合(タイトルは重複しない前提)
    • タクソノミータームが存在しない場合、新規作成を行います
    • タクソノミーターム名を照合してインポートします
  • csvデータをインポートしたら新規作成したタクソノミータームの確認

モジュール(Feeds tamper term hierarchy)で階層化されたcsvタクソノミータームデータのインポート

  • 必要なモジュール:Feeds tamper term hierarchy(サンドボックスプロジェクト、ダウンロードはここ)
  • 以下のような階層化されたcsvタクソノミータームデータをインポートします
    Drupalのモジュール(Feeds tamper term hierarchy)で階層化されたタクソノミータームのインポート
  • 具体的なインポート方法はビデオを確認してください。
  • 既存のタクソノミータームのデータマッピング時に以下の注意点:
    • 既存のタクソノミータームの新規作成チェックを外します(Feeds tamper term hierarchyが同じ機能があったため)
    • タクソノミーターム検索は「名前」ではなく、タームIDで検索するとの設定
  • TamperのFeeds tamper term hierarchyで設定は、「Term hierarchy separator」(csvデータのターム親子区切り)がインポートデータにある区切り記号と一致していることの確認
Embedded thumbnail for Drupalのモジュール(Feeds)で階層化されたタクソノミータームのインポート
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

モジュール(Feeds)が非階層化されているタクソノミータームのインポートが可能

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのcsvファイルインポートについて、「Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考にしてください。
  • 非階層化のタクソノミータームcsvデータは以下のよう
    DrupalのFeedsで非階層化のタクソノミータームのインポート
  • タクソノミータームのインポート操作はビデオを参考にしてください
  • プロセッサーのマッピング設定ポイント:
    • 記事のタイトルをキーにして、タイトルでインポートデータを記事との照合(タイトルは重複しない前提)
    • タクソノミータームが存在しない場合、新規作成を行います
    • タクソノミーターム名を照合してインポートします
  • csvデータをインポートしたら新規作成したタクソノミータームの確認

モジュール(Feeds tamper term hierarchy)で階層化されたcsvタクソノミータームデータのインポート

  • 必要なモジュール:Feeds tamper term hierarchy(サンドボックスプロジェクト、ダウンロードはここ)
  • 以下のような階層化されたcsvタクソノミータームデータをインポートします
    Drupalのモジュール(Feeds tamper term hierarchy)で階層化されたタクソノミータームのインポート
  • 具体的なインポート方法はビデオを確認してください。
  • 既存のタクソノミータームのデータマッピング時に以下の注意点:
    • 既存のタクソノミータームの新規作成チェックを外します(Feeds tamper term hierarchyが同じ機能があったため)
    • タクソノミーターム検索は「名前」ではなく、タームIDで検索するとの設定
  • TamperのFeeds tamper term hierarchyで設定は、「Term hierarchy separator」(csvデータのターム親子区切り)がインポートデータにある区切り記号と一致していることの確認
Embedded thumbnail for Drupalのモジュール(Feeds)で階層化されたタクソノミータームのインポート
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

モジュール(Feeds)が非階層化されているタクソノミータームのインポートが可能

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのcsvファイルインポートについて、「Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考にしてください。
  • 非階層化のタクソノミータームcsvデータは以下のよう
    DrupalのFeedsで非階層化のタクソノミータームのインポート
  • タクソノミータームのインポート操作はビデオを参考にしてください
  • プロセッサーのマッピング設定ポイント:
    • 記事のタイトルをキーにして、タイトルでインポートデータを記事との照合(タイトルは重複しない前提)
    • タクソノミータームが存在しない場合、新規作成を行います
    • タクソノミーターム名を照合してインポートします
  • csvデータをインポートしたら新規作成したタクソノミータームの確認

モジュール(Feeds tamper term hierarchy)で階層化されたcsvタクソノミータームデータのインポート

  • 必要なモジュール:Feeds tamper term hierarchy(サンドボックスプロジェクト、ダウンロードはここ)
  • 以下のような階層化されたcsvタクソノミータームデータをインポートします
    Drupalのモジュール(Feeds tamper term hierarchy)で階層化されたタクソノミータームのインポート
  • 具体的なインポート方法はビデオを確認してください。
  • 既存のタクソノミータームのデータマッピング時に以下の注意点:
    • 既存のタクソノミータームの新規作成チェックを外します(Feeds tamper term hierarchyが同じ機能があったため)
    • タクソノミーターム検索は「名前」ではなく、タームIDで検索するとの設定
  • TamperのFeeds tamper term hierarchyで設定は、「Term hierarchy separator」(csvデータのターム親子区切り)がインポートデータにある区切り記号と一致していることの確認
Embedded thumbnail for Drupalのモジュール(Feeds)で階層化されたタクソノミータームのインポート
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

モジュール(Feeds)が非階層化されているタクソノミータームのインポートが可能

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのcsvファイルインポートについて、「Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考にしてください。
  • 非階層化のタクソノミータームcsvデータは以下のよう
    DrupalのFeedsで非階層化のタクソノミータームのインポート
  • タクソノミータームのインポート操作はビデオを参考にしてください
  • プロセッサーのマッピング設定ポイント:
    • 記事のタイトルをキーにして、タイトルでインポートデータを記事との照合(タイトルは重複しない前提)
    • タクソノミータームが存在しない場合、新規作成を行います
    • タクソノミーターム名を照合してインポートします
  • csvデータをインポートしたら新規作成したタクソノミータームの確認

モジュール(Feeds tamper term hierarchy)で階層化されたcsvタクソノミータームデータのインポート

  • 必要なモジュール:Feeds tamper term hierarchy(サンドボックスプロジェクト、ダウンロードはここ)
  • 以下のような階層化されたcsvタクソノミータームデータをインポートします
    Drupalのモジュール(Feeds tamper term hierarchy)で階層化されたタクソノミータームのインポート
  • 具体的なインポート方法はビデオを確認してください。
  • 既存のタクソノミータームのデータマッピング時に以下の注意点:
    • 既存のタクソノミータームの新規作成チェックを外します(Feeds tamper term hierarchyが同じ機能があったため)
    • タクソノミーターム検索は「名前」ではなく、タームIDで検索するとの設定
  • TamperのFeeds tamper term hierarchyで設定は、「Term hierarchy separator」(csvデータのターム親子区切り)がインポートデータにある区切り記号と一致していることの確認
Embedded thumbnail for Drupalのモジュール(Feeds)で階層化されたタクソノミータームのインポート
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

モジュール(Feeds)が非階層化されているタクソノミータームのインポートが可能

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのcsvファイルインポートについて、「Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考にしてください。
  • 非階層化のタクソノミータームcsvデータは以下のよう
    DrupalのFeedsで非階層化のタクソノミータームのインポート
  • タクソノミータームのインポート操作はビデオを参考にしてください
  • プロセッサーのマッピング設定ポイント:
    • 記事のタイトルをキーにして、タイトルでインポートデータを記事との照合(タイトルは重複しない前提)
    • タクソノミータームが存在しない場合、新規作成を行います
    • タクソノミーターム名を照合してインポートします
  • csvデータをインポートしたら新規作成したタクソノミータームの確認

モジュール(Feeds tamper term hierarchy)で階層化されたcsvタクソノミータームデータのインポート

  • 必要なモジュール:Feeds tamper term hierarchy(サンドボックスプロジェクト、ダウンロードはここ)
  • 以下のような階層化されたcsvタクソノミータームデータをインポートします
    Drupalのモジュール(Feeds tamper term hierarchy)で階層化されたタクソノミータームのインポート
  • 具体的なインポート方法はビデオを確認してください。
  • 既存のタクソノミータームのデータマッピング時に以下の注意点:
    • 既存のタクソノミータームの新規作成チェックを外します(Feeds tamper term hierarchyが同じ機能があったため)
    • タクソノミーターム検索は「名前」ではなく、タームIDで検索するとの設定
  • TamperのFeeds tamper term hierarchyで設定は、「Term hierarchy separator」(csvデータのターム親子区切り)がインポートデータにある区切り記号と一致していることの確認
Embedded thumbnail for Drupalのモジュール(Feeds)で階層化されたタクソノミータームのインポート
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

モジュール(Feeds)が非階層化されているタクソノミータームのインポートが可能

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのcsvファイルインポートについて、「Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考にしてください。
  • 非階層化のタクソノミータームcsvデータは以下のよう
    DrupalのFeedsで非階層化のタクソノミータームのインポート
  • タクソノミータームのインポート操作はビデオを参考にしてください
  • プロセッサーのマッピング設定ポイント:
    • 記事のタイトルをキーにして、タイトルでインポートデータを記事との照合(タイトルは重複しない前提)
    • タクソノミータームが存在しない場合、新規作成を行います
    • タクソノミーターム名を照合してインポートします
  • csvデータをインポートしたら新規作成したタクソノミータームの確認

モジュール(Feeds tamper term hierarchy)で階層化されたcsvタクソノミータームデータのインポート

  • 必要なモジュール:Feeds tamper term hierarchy(サンドボックスプロジェクト、ダウンロードはここ)
  • 以下のような階層化されたcsvタクソノミータームデータをインポートします
    Drupalのモジュール(Feeds tamper term hierarchy)で階層化されたタクソノミータームのインポート
  • 具体的なインポート方法はビデオを確認してください。
  • 既存のタクソノミータームのデータマッピング時に以下の注意点:
    • 既存のタクソノミータームの新規作成チェックを外します(Feeds tamper term hierarchyが同じ機能があったため)
    • タクソノミーターム検索は「名前」ではなく、タームIDで検索するとの設定
  • TamperのFeeds tamper term hierarchyで設定は、「Term hierarchy separator」(csvデータのターム親子区切り)がインポートデータにある区切り記号と一致していることの確認
Embedded thumbnail for Drupalのモジュール(Feeds)で階層化されたタクソノミータームのインポート
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

モジュール(Feeds)が非階層化されているタクソノミータームのインポートが可能

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのcsvファイルインポートについて、「Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考にしてください。
  • 非階層化のタクソノミータームcsvデータは以下のよう
    DrupalのFeedsで非階層化のタクソノミータームのインポート
  • タクソノミータームのインポート操作はビデオを参考にしてください
  • プロセッサーのマッピング設定ポイント:
    • 記事のタイトルをキーにして、タイトルでインポートデータを記事との照合(タイトルは重複しない前提)
    • タクソノミータームが存在しない場合、新規作成を行います
    • タクソノミーターム名を照合してインポートします
  • csvデータをインポートしたら新規作成したタクソノミータームの確認

モジュール(Feeds tamper term hierarchy)で階層化されたcsvタクソノミータームデータのインポート

  • 必要なモジュール:Feeds tamper term hierarchy(サンドボックスプロジェクト、ダウンロードはここ)
  • 以下のような階層化されたcsvタクソノミータームデータをインポートします
    Drupalのモジュール(Feeds tamper term hierarchy)で階層化されたタクソノミータームのインポート
  • 具体的なインポート方法はビデオを確認してください。
  • 既存のタクソノミータームのデータマッピング時に以下の注意点:
    • 既存のタクソノミータームの新規作成チェックを外します(Feeds tamper term hierarchyが同じ機能があったため)
    • タクソノミーターム検索は「名前」ではなく、タームIDで検索するとの設定
  • TamperのFeeds tamper term hierarchyで設定は、「Term hierarchy separator」(csvデータのターム親子区切り)がインポートデータにある区切り記号と一致していることの確認
Embedded thumbnail for Drupalのモジュール(Feeds)で階層化されたタクソノミータームのインポート
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

モジュール(Feeds)が非階層化されているタクソノミータームのインポートが可能

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのcsvファイルインポートについて、「Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考にしてください。
  • 非階層化のタクソノミータームcsvデータは以下のよう
    DrupalのFeedsで非階層化のタクソノミータームのインポート
  • タクソノミータームのインポート操作はビデオを参考にしてください
  • プロセッサーのマッピング設定ポイント:
    • 記事のタイトルをキーにして、タイトルでインポートデータを記事との照合(タイトルは重複しない前提)
    • タクソノミータームが存在しない場合、新規作成を行います
    • タクソノミーターム名を照合してインポートします
  • csvデータをインポートしたら新規作成したタクソノミータームの確認

モジュール(Feeds tamper term hierarchy)で階層化されたcsvタクソノミータームデータのインポート

  • 必要なモジュール:Feeds tamper term hierarchy(サンドボックスプロジェクト、ダウンロードはここ)
  • 以下のような階層化されたcsvタクソノミータームデータをインポートします
    Drupalのモジュール(Feeds tamper term hierarchy)で階層化されたタクソノミータームのインポート
  • 具体的なインポート方法はビデオを確認してください。
  • 既存のタクソノミータームのデータマッピング時に以下の注意点:
    • 既存のタクソノミータームの新規作成チェックを外します(Feeds tamper term hierarchyが同じ機能があったため)
    • タクソノミーターム検索は「名前」ではなく、タームIDで検索するとの設定
  • TamperのFeeds tamper term hierarchyで設定は、「Term hierarchy separator」(csvデータのターム親子区切り)がインポートデータにある区切り記号と一致していることの確認
Embedded thumbnail for Drupalのモジュール(Feeds)で階層化されたタクソノミータームのインポート
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

モジュール(Feeds)が非階層化されているタクソノミータームのインポートが可能

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのcsvファイルインポートについて、「Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考にしてください。
  • 非階層化のタクソノミータームcsvデータは以下のよう
    DrupalのFeedsで非階層化のタクソノミータームのインポート
  • タクソノミータームのインポート操作はビデオを参考にしてください
  • プロセッサーのマッピング設定ポイント:
    • 記事のタイトルをキーにして、タイトルでインポートデータを記事との照合(タイトルは重複しない前提)
    • タクソノミータームが存在しない場合、新規作成を行います
    • タクソノミーターム名を照合してインポートします
  • csvデータをインポートしたら新規作成したタクソノミータームの確認

モジュール(Feeds tamper term hierarchy)で階層化されたcsvタクソノミータームデータのインポート

  • 必要なモジュール:Feeds tamper term hierarchy(サンドボックスプロジェクト、ダウンロードはここ)
  • 以下のような階層化されたcsvタクソノミータームデータをインポートします
    Drupalのモジュール(Feeds tamper term hierarchy)で階層化されたタクソノミータームのインポート
  • 具体的なインポート方法はビデオを確認してください。
  • 既存のタクソノミータームのデータマッピング時に以下の注意点:
    • 既存のタクソノミータームの新規作成チェックを外します(Feeds tamper term hierarchyが同じ機能があったため)
    • タクソノミーターム検索は「名前」ではなく、タームIDで検索するとの設定
  • TamperのFeeds tamper term hierarchyで設定は、「Term hierarchy separator」(csvデータのターム親子区切り)がインポートデータにある区切り記号と一致していることの確認
Embedded thumbnail for Drupalのモジュール(Feeds)で階層化されたタクソノミータームのインポート
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

モジュール(Feeds)が非階層化されているタクソノミータームのインポートが可能

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのcsvファイルインポートについて、「Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考にしてください。
  • 非階層化のタクソノミータームcsvデータは以下のよう
    DrupalのFeedsで非階層化のタクソノミータームのインポート
  • タクソノミータームのインポート操作はビデオを参考にしてください
  • プロセッサーのマッピング設定ポイント:
    • 記事のタイトルをキーにして、タイトルでインポートデータを記事との照合(タイトルは重複しない前提)
    • タクソノミータームが存在しない場合、新規作成を行います
    • タクソノミーターム名を照合してインポートします
  • csvデータをインポートしたら新規作成したタクソノミータームの確認

モジュール(Feeds tamper term hierarchy)で階層化されたcsvタクソノミータームデータのインポート

  • 必要なモジュール:Feeds tamper term hierarchy(サンドボックスプロジェクト、ダウンロードはここ)
  • 以下のような階層化されたcsvタクソノミータームデータをインポートします
    Drupalのモジュール(Feeds tamper term hierarchy)で階層化されたタクソノミータームのインポート
  • 具体的なインポート方法はビデオを確認してください。
  • 既存のタクソノミータームのデータマッピング時に以下の注意点:
    • 既存のタクソノミータームの新規作成チェックを外します(Feeds tamper term hierarchyが同じ機能があったため)
    • タクソノミーターム検索は「名前」ではなく、タームIDで検索するとの設定
  • TamperのFeeds tamper term hierarchyで設定は、「Term hierarchy separator」(csvデータのターム親子区切り)がインポートデータにある区切り記号と一致していることの確認
Embedded thumbnail for Drupalのモジュール(Feeds)で階層化されたタクソノミータームのインポート
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

モジュール(Feeds)が非階層化されているタクソノミータームのインポートが可能

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのcsvファイルインポートについて、「Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考にしてください。
  • 非階層化のタクソノミータームcsvデータは以下のよう
    DrupalのFeedsで非階層化のタクソノミータームのインポート
  • タクソノミータームのインポート操作はビデオを参考にしてください
  • プロセッサーのマッピング設定ポイント:
    • 記事のタイトルをキーにして、タイトルでインポートデータを記事との照合(タイトルは重複しない前提)
    • タクソノミータームが存在しない場合、新規作成を行います
    • タクソノミーターム名を照合してインポートします
  • csvデータをインポートしたら新規作成したタクソノミータームの確認

モジュール(Feeds tamper term hierarchy)で階層化されたcsvタクソノミータームデータのインポート

  • 必要なモジュール:Feeds tamper term hierarchy(サンドボックスプロジェクト、ダウンロードはここ)
  • 以下のような階層化されたcsvタクソノミータームデータをインポートします
    Drupalのモジュール(Feeds tamper term hierarchy)で階層化されたタクソノミータームのインポート
  • 具体的なインポート方法はビデオを確認してください。
  • 既存のタクソノミータームのデータマッピング時に以下の注意点:
    • 既存のタクソノミータームの新規作成チェックを外します(Feeds tamper term hierarchyが同じ機能があったため)
    • タクソノミーターム検索は「名前」ではなく、タームIDで検索するとの設定
  • TamperのFeeds tamper term hierarchyで設定は、「Term hierarchy separator」(csvデータのターム親子区切り)がインポートデータにある区切り記号と一致していることの確認
Embedded thumbnail for Drupalのモジュール(Feeds)で階層化されたタクソノミータームのインポート
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

モジュール(Feeds)が非階層化されているタクソノミータームのインポートが可能

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのcsvファイルインポートについて、「Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考にしてください。
  • 非階層化のタクソノミータームcsvデータは以下のよう
    DrupalのFeedsで非階層化のタクソノミータームのインポート
  • タクソノミータームのインポート操作はビデオを参考にしてください
  • プロセッサーのマッピング設定ポイント:
    • 記事のタイトルをキーにして、タイトルでインポートデータを記事との照合(タイトルは重複しない前提)
    • タクソノミータームが存在しない場合、新規作成を行います
    • タクソノミーターム名を照合してインポートします
  • csvデータをインポートしたら新規作成したタクソノミータームの確認

モジュール(Feeds tamper term hierarchy)で階層化されたcsvタクソノミータームデータのインポート

  • 必要なモジュール:Feeds tamper term hierarchy(サンドボックスプロジェクト、ダウンロードはここ)
  • 以下のような階層化されたcsvタクソノミータームデータをインポートします
    Drupalのモジュール(Feeds tamper term hierarchy)で階層化されたタクソノミータームのインポート
  • 具体的なインポート方法はビデオを確認してください。
  • 既存のタクソノミータームのデータマッピング時に以下の注意点:
    • 既存のタクソノミータームの新規作成チェックを外します(Feeds tamper term hierarchyが同じ機能があったため)
    • タクソノミーターム検索は「名前」ではなく、タームIDで検索するとの設定
  • TamperのFeeds tamper term hierarchyで設定は、「Term hierarchy separator」(csvデータのターム親子区切り)がインポートデータにある区切り記号と一致していることの確認
Embedded thumbnail for Drupalのモジュール(Feeds)で階層化されたタクソノミータームのインポート
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

モジュール(Feeds)が非階層化されているタクソノミータームのインポートが可能

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのcsvファイルインポートについて、「Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考にしてください。
  • 非階層化のタクソノミータームcsvデータは以下のよう
    DrupalのFeedsで非階層化のタクソノミータームのインポート
  • タクソノミータームのインポート操作はビデオを参考にしてください
  • プロセッサーのマッピング設定ポイント:
    • 記事のタイトルをキーにして、タイトルでインポートデータを記事との照合(タイトルは重複しない前提)
    • タクソノミータームが存在しない場合、新規作成を行います
    • タクソノミーターム名を照合してインポートします
  • csvデータをインポートしたら新規作成したタクソノミータームの確認

モジュール(Feeds tamper term hierarchy)で階層化されたcsvタクソノミータームデータのインポート

  • 必要なモジュール:Feeds tamper term hierarchy(サンドボックスプロジェクト、ダウンロードはここ)
  • 以下のような階層化されたcsvタクソノミータームデータをインポートします
    Drupalのモジュール(Feeds tamper term hierarchy)で階層化されたタクソノミータームのインポート
  • 具体的なインポート方法はビデオを確認してください。
  • 既存のタクソノミータームのデータマッピング時に以下の注意点:
    • 既存のタクソノミータームの新規作成チェックを外します(Feeds tamper term hierarchyが同じ機能があったため)
    • タクソノミーターム検索は「名前」ではなく、タームIDで検索するとの設定
  • TamperのFeeds tamper term hierarchyで設定は、「Term hierarchy separator」(csvデータのターム親子区切り)がインポートデータにある区切り記号と一致していることの確認
Embedded thumbnail for Drupalのモジュール(Feeds)で階層化されたタクソノミータームのインポート
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

モジュール(Feeds)が非階層化されているタクソノミータームのインポートが可能

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのcsvファイルインポートについて、「Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考にしてください。
  • 非階層化のタクソノミータームcsvデータは以下のよう
    DrupalのFeedsで非階層化のタクソノミータームのインポート
  • タクソノミータームのインポート操作はビデオを参考にしてください
  • プロセッサーのマッピング設定ポイント:
    • 記事のタイトルをキーにして、タイトルでインポートデータを記事との照合(タイトルは重複しない前提)
    • タクソノミータームが存在しない場合、新規作成を行います
    • タクソノミーターム名を照合してインポートします
  • csvデータをインポートしたら新規作成したタクソノミータームの確認

モジュール(Feeds tamper term hierarchy)で階層化されたcsvタクソノミータームデータのインポート

  • 必要なモジュール:Feeds tamper term hierarchy(サンドボックスプロジェクト、ダウンロードはここ)
  • 以下のような階層化されたcsvタクソノミータームデータをインポートします
    Drupalのモジュール(Feeds tamper term hierarchy)で階層化されたタクソノミータームのインポート
  • 具体的なインポート方法はビデオを確認してください。
  • 既存のタクソノミータームのデータマッピング時に以下の注意点:
    • 既存のタクソノミータームの新規作成チェックを外します(Feeds tamper term hierarchyが同じ機能があったため)
    • タクソノミーターム検索は「名前」ではなく、タームIDで検索するとの設定
  • TamperのFeeds tamper term hierarchyで設定は、「Term hierarchy separator」(csvデータのターム親子区切り)がインポートデータにある区切り記号と一致していることの確認
Embedded thumbnail for Drupalのモジュール(Feeds)で階層化されたタクソノミータームのインポート
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

モジュール(Feeds)が非階層化されているタクソノミータームのインポートが可能

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのcsvファイルインポートについて、「Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考にしてください。
  • 非階層化のタクソノミータームcsvデータは以下のよう
    DrupalのFeedsで非階層化のタクソノミータームのインポート
  • タクソノミータームのインポート操作はビデオを参考にしてください
  • プロセッサーのマッピング設定ポイント:
    • 記事のタイトルをキーにして、タイトルでインポートデータを記事との照合(タイトルは重複しない前提)
    • タクソノミータームが存在しない場合、新規作成を行います
    • タクソノミーターム名を照合してインポートします
  • csvデータをインポートしたら新規作成したタクソノミータームの確認

モジュール(Feeds tamper term hierarchy)で階層化されたcsvタクソノミータームデータのインポート

  • 必要なモジュール:Feeds tamper term hierarchy(サンドボックスプロジェクト、ダウンロードはここ)
  • 以下のような階層化されたcsvタクソノミータームデータをインポートします
    Drupalのモジュール(Feeds tamper term hierarchy)で階層化されたタクソノミータームのインポート
  • 具体的なインポート方法はビデオを確認してください。
  • 既存のタクソノミータームのデータマッピング時に以下の注意点:
    • 既存のタクソノミータームの新規作成チェックを外します(Feeds tamper term hierarchyが同じ機能があったため)
    • タクソノミーターム検索は「名前」ではなく、タームIDで検索するとの設定
  • TamperのFeeds tamper term hierarchyで設定は、「Term hierarchy separator」(csvデータのターム親子区切り)がインポートデータにある区切り記号と一致していることの確認
Embedded thumbnail for Drupalのモジュール(Feeds)で階層化されたタクソノミータームのインポート
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

モジュール(Feeds)が非階層化されているタクソノミータームのインポートが可能

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのcsvファイルインポートについて、「Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考にしてください。
  • 非階層化のタクソノミータームcsvデータは以下のよう
    DrupalのFeedsで非階層化のタクソノミータームのインポート
  • タクソノミータームのインポート操作はビデオを参考にしてください
  • プロセッサーのマッピング設定ポイント:
    • 記事のタイトルをキーにして、タイトルでインポートデータを記事との照合(タイトルは重複しない前提)
    • タクソノミータームが存在しない場合、新規作成を行います
    • タクソノミーターム名を照合してインポートします
  • csvデータをインポートしたら新規作成したタクソノミータームの確認

モジュール(Feeds tamper term hierarchy)で階層化されたcsvタクソノミータームデータのインポート

  • 必要なモジュール:Feeds tamper term hierarchy(サンドボックスプロジェクト、ダウンロードはここ)
  • 以下のような階層化されたcsvタクソノミータームデータをインポートします
    Drupalのモジュール(Feeds tamper term hierarchy)で階層化されたタクソノミータームのインポート
  • 具体的なインポート方法はビデオを確認してください。
  • 既存のタクソノミータームのデータマッピング時に以下の注意点:
    • 既存のタクソノミータームの新規作成チェックを外します(Feeds tamper term hierarchyが同じ機能があったため)
    • タクソノミーターム検索は「名前」ではなく、タームIDで検索するとの設定
  • TamperのFeeds tamper term hierarchyで設定は、「Term hierarchy separator」(csvデータのターム親子区切り)がインポートデータにある区切り記号と一致していることの確認
Embedded thumbnail for Drupalのモジュール(Feeds)で階層化されたタクソノミータームのインポート
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

モジュール(Feeds)が非階層化されているタクソノミータームのインポートが可能

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのcsvファイルインポートについて、「Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考にしてください。
  • 非階層化のタクソノミータームcsvデータは以下のよう
    DrupalのFeedsで非階層化のタクソノミータームのインポート
  • タクソノミータームのインポート操作はビデオを参考にしてください
  • プロセッサーのマッピング設定ポイント:
    • 記事のタイトルをキーにして、タイトルでインポートデータを記事との照合(タイトルは重複しない前提)
    • タクソノミータームが存在しない場合、新規作成を行います
    • タクソノミーターム名を照合してインポートします
  • csvデータをインポートしたら新規作成したタクソノミータームの確認

モジュール(Feeds tamper term hierarchy)で階層化されたcsvタクソノミータームデータのインポート

  • 必要なモジュール:Feeds tamper term hierarchy(サンドボックスプロジェクト、ダウンロードはここ)
  • 以下のような階層化されたcsvタクソノミータームデータをインポートします
    Drupalのモジュール(Feeds tamper term hierarchy)で階層化されたタクソノミータームのインポート
  • 具体的なインポート方法はビデオを確認してください。
  • 既存のタクソノミータームのデータマッピング時に以下の注意点:
    • 既存のタクソノミータームの新規作成チェックを外します(Feeds tamper term hierarchyが同じ機能があったため)
    • タクソノミーターム検索は「名前」ではなく、タームIDで検索するとの設定
  • TamperのFeeds tamper term hierarchyで設定は、「Term hierarchy separator」(csvデータのターム親子区切り)がインポートデータにある区切り記号と一致していることの確認
Embedded thumbnail for Drupalのモジュール(Feeds)で階層化されたタクソノミータームのインポート
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

モジュール(Feeds)が非階層化されているタクソノミータームのインポートが可能

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのcsvファイルインポートについて、「Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考にしてください。
  • 非階層化のタクソノミータームcsvデータは以下のよう
    DrupalのFeedsで非階層化のタクソノミータームのインポート
  • タクソノミータームのインポート操作はビデオを参考にしてください
  • プロセッサーのマッピング設定ポイント:
    • 記事のタイトルをキーにして、タイトルでインポートデータを記事との照合(タイトルは重複しない前提)
    • タクソノミータームが存在しない場合、新規作成を行います
    • タクソノミーターム名を照合してインポートします
  • csvデータをインポートしたら新規作成したタクソノミータームの確認

モジュール(Feeds tamper term hierarchy)で階層化されたcsvタクソノミータームデータのインポート

  • 必要なモジュール:Feeds tamper term hierarchy(サンドボックスプロジェクト、ダウンロードはここ)
  • 以下のような階層化されたcsvタクソノミータームデータをインポートします
    Drupalのモジュール(Feeds tamper term hierarchy)で階層化されたタクソノミータームのインポート
  • 具体的なインポート方法はビデオを確認してください。
  • 既存のタクソノミータームのデータマッピング時に以下の注意点:
    • 既存のタクソノミータームの新規作成チェックを外します(Feeds tamper term hierarchyが同じ機能があったため)
    • タクソノミーターム検索は「名前」ではなく、タームIDで検索するとの設定
  • TamperのFeeds tamper term hierarchyで設定は、「Term hierarchy separator」(csvデータのターム親子区切り)がインポートデータにある区切り記号と一致していることの確認
Embedded thumbnail for Drupalのモジュール(Feeds)で階層化されたタクソノミータームのインポート
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

モジュール(Feeds)が非階層化されているタクソノミータームのインポートが可能

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのcsvファイルインポートについて、「Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考にしてください。
  • 非階層化のタクソノミータームcsvデータは以下のよう
    DrupalのFeedsで非階層化のタクソノミータームのインポート
  • タクソノミータームのインポート操作はビデオを参考にしてください
  • プロセッサーのマッピング設定ポイント:
    • 記事のタイトルをキーにして、タイトルでインポートデータを記事との照合(タイトルは重複しない前提)
    • タクソノミータームが存在しない場合、新規作成を行います
    • タクソノミーターム名を照合してインポートします
  • csvデータをインポートしたら新規作成したタクソノミータームの確認

モジュール(Feeds tamper term hierarchy)で階層化されたcsvタクソノミータームデータのインポート

  • 必要なモジュール:Feeds tamper term hierarchy(サンドボックスプロジェクト、ダウンロードはここ)
  • 以下のような階層化されたcsvタクソノミータームデータをインポートします
    Drupalのモジュール(Feeds tamper term hierarchy)で階層化されたタクソノミータームのインポート
  • 具体的なインポート方法はビデオを確認してください。
  • 既存のタクソノミータームのデータマッピング時に以下の注意点:
    • 既存のタクソノミータームの新規作成チェックを外します(Feeds tamper term hierarchyが同じ機能があったため)
    • タクソノミーターム検索は「名前」ではなく、タームIDで検索するとの設定
  • TamperのFeeds tamper term hierarchyで設定は、「Term hierarchy separator」(csvデータのターム親子区切り)がインポートデータにある区切り記号と一致していることの確認
Embedded thumbnail for Drupalのモジュール(Feeds)で階層化されたタクソノミータームのインポート
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

モジュール(Feeds)が非階層化されているタクソノミータームのインポートが可能

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのcsvファイルインポートについて、「Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考にしてください。
  • 非階層化のタクソノミータームcsvデータは以下のよう
    DrupalのFeedsで非階層化のタクソノミータームのインポート
  • タクソノミータームのインポート操作はビデオを参考にしてください
  • プロセッサーのマッピング設定ポイント:
    • 記事のタイトルをキーにして、タイトルでインポートデータを記事との照合(タイトルは重複しない前提)
    • タクソノミータームが存在しない場合、新規作成を行います
    • タクソノミーターム名を照合してインポートします
  • csvデータをインポートしたら新規作成したタクソノミータームの確認

モジュール(Feeds tamper term hierarchy)で階層化されたcsvタクソノミータームデータのインポート

  • 必要なモジュール:Feeds tamper term hierarchy(サンドボックスプロジェクト、ダウンロードはここ)
  • 以下のような階層化されたcsvタクソノミータームデータをインポートします
    Drupalのモジュール(Feeds tamper term hierarchy)で階層化されたタクソノミータームのインポート
  • 具体的なインポート方法はビデオを確認してください。
  • 既存のタクソノミータームのデータマッピング時に以下の注意点:
    • 既存のタクソノミータームの新規作成チェックを外します(Feeds tamper term hierarchyが同じ機能があったため)
    • タクソノミーターム検索は「名前」ではなく、タームIDで検索するとの設定
  • TamperのFeeds tamper term hierarchyで設定は、「Term hierarchy separator」(csvデータのターム親子区切り)がインポートデータにある区切り記号と一致していることの確認
Embedded thumbnail for Drupalのモジュール(Feeds)で階層化されたタクソノミータームのインポート
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

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

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

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

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

やりたいこと:モジュール(Feeds)でのデータマッピング時にPHPコードでフィールド値を加工する

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Tamper7.x-1.1、Feeds Tamper PHP7.x1.2
  • Feedsデータインポートの基本は「 Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考してください
  • データマッピングに、各インポートフィールドの値を加工するため、Feeds Tamperモジュールが良く利用します
  • この中に、特殊なフィールド値加工(例:既存のデータを取得するなど)のためFeeds Tamper PHPを利用して、PHPスクリプトの実行ができます
  • Feeds Tamper PHPでインポートデータの扱い、以下のパラメーターで、任意のフィールドの値の利用ができます
    • $field: 渡されたフィールドの値
    • $item['フィールド名']: インポート元で定義していたフィールド名でその値を取得する
      Drupalのモジュール(Feeds)のデータマッピング時にFeedsTamperでのPHPコードより各フィールドの値を加工します
  • 任意のフィールド(例:body)で他のフィールドの値(例:title)の取得することができます

注意点:PHPコード実行のセキュリティ問題とパフォーマンスへの影響

  • PHPコードを実行するには、eval()関数で行うため、任意のPHPコードの実行が可能となります
  • 特にインポートが公開の場合、PHPコード実行のセキュリティ問題を注意深く対応すべきです
  • また、データ取得したり、多くループをしたりして、パフォーマンスへの影響が考えるべきです
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

問題点:モジュール(Feeds)でデータインポート時に間違って設定があった場合インポートエラーなどが発生

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Import Previews7.x-1.x
  • 複雑なデータマッピング設定(例:Feeds Tamperなどで)時に、間違いやすくなります。その場合実際のデータをインポートで確認する必要があります
  • 間違った設定より、データインポートエラーなどが発生します

解決:モジュール(Feeds Import Preview)でインポート設定を確認します

  • モジュール(Feeds Import Preview)でデータインポート直前のステップまでに進んで、実際のインポート設定の確認ができます
    Drupalのモジュール(Feeds Import Preview)でデータインポート設定の確認ができます
  • 実際にソースから各フィールドの値が表示されています。
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
feeds
module usage

やりたいこと:コンテンツ(例:記事)のbodyフィールドの多言語データのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Entity Translation7.x-1.0
  • コンテンツのbody以外のフィールドがEntity Translation有効であれば、Feedsのデータマッピングで複数の言語のターゲットが現れます
    • drupalのfeedsで多言語コンテンツデータのインポート
  • BodyにEntity Translation有効の場合にマッピングでのターゲットが一つしかありません
  • 複数回でそれぞれの言語データをインポートします
    DrupalのFeedsで多言語bodyデータのインポート

FeedsのNode Processor設定画面でコンテンツ(例:記事)の初期言語を設定

  • コンテンツの元言語を設定する必要があります(もし、設定しなければ多言語の表示に影響しないが、コンテンツの翻訳タグが表示されない)
  • Node Processor設定画面でノートの言語を選択して、データインポート時に設定してくれます(ビデオを参考)

Feedsのマッピング設定画面でbodyのインポート言語設定を行います

  • データマッピング管理画面でbodyフィールドに言語設定があります
    データマッピング管理画面でbodyフィールドの言語設定
  • 複数の言語に対して複数のインポーターを用意するか、複数回で言語設定を行います

各言語に応じて複数回を分けてデータインポートする必要があります

  • 言語ごとにデータインポートする必要があります
    • 一括して同一フィールドに複数の言語インポートができません
  • 具体的なステップはビデオを参考してください
Embedded thumbnail for 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
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
system_management

モジュール(Localization Update)でサイトの多言語ユーザーインターフェースを導入します

  • 背景:Drupal7.54、Localization Update7.x-2.1
  • モジュール(Localization Update)をインストール/有効化します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)で「言語を追加」リンクをクリックすると、必要なユーザーインターフェース言語の導入ができます

管理者がサイト単位でユーザーインターフェース言語の一括設定(ほかの言語を使用しない)

  • Druaplを初期インストール(英語バージョンの場合)後に、別の言語(例:日本語)を導入し、その言語のみを使用します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)でのデフォルト値を選択すればよいです
    サイト単位の言語設定
  • サイト管理者が選択してから、一般ユーザーの選択はできません。

複数の言語をユーザーインターフェースとして利用する場合に、URL/ブラウザ/セッション/ユーザーの言語設定などよりサイトの言語自動判別ができます

  • 複数のユーザーインターフェース言語がある場合、どれを使用するかは決める必要があります
  • 言語判別設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語 » 判別と選択)言語利用の判別条件を設定します
    言語の判別設定と判別順序設定
    • URL: URLから言語を判定する(パス接頭語かドメイン)
    • セッション: 言語をrequest/sessionパラメーターから判定する。
    • ブラウザ: ブラウザーの言語設定から言語を判定する。
    • ユーザー: ユーザープロフィールで設定した言語に従う。
    • デフォルト: サイトのデフォルト言語を使う
  • 上記判別方法のい任意、または全部の選択はできます
  • 判別の優先順のソートができます
  • URLで言語判断設定した場合、URLのドメイン/パス接頭語の設定が必要となります
    言語判別のURLドメイン/パス接頭語設定
    • 「言語のドメイン」と「言語コードのパス接頭語」のどちらかの設定(両方の設定はできない)
    • 設定された方式で言語を判別となります
    • 説明の言葉通りに、一度設定したら、変更時にすでに存在しているパスが使用できなくなりますので、ご注意ください(変更後にすべてのパスを再構築などの作業が必要)
      言語判定URLの設定
Embedded thumbnail for Drupalの多言語ユーザーインターフェースの導入と設定
drupal
video
feeds

やりたいこと:Feedsで多言語コンテンツデータのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Feeds:Enity Translation7.x-1.0
  • モジュール:Entity Translationで多言語サイトを構築しています
  • 複数の言語コンテンツをデータ移行したいです
  • いろいろ調べてみてた、同一フィールドに多言語インポート方法が少なく、難しそうです

解決方法:モジュール(Feeds:Entity Translation)で多言語コンテンツデータの移行

  • 多言語コンテンツデータ移行をサポートするモジュールがあまり多くないようで、一つモジュール(Feeds: Entity Translation)を見つけました
  • モジュール(Feeds: Entity Translation)をインストール/有効化したら、Feedsのデータマッピング管理画面に、多言語有効なフィールドの各言語対応ターゲットが現れます
    多言語コンテンツデータ移行にサポートするFeeds: Entity Translation
  • 同一フィールドの各言語対応ターゲットを選択して多言語コンテンツインポートができました
Embedded thumbnail for DrupalのFeedsで多言語コンテンツデータのインポート
drupal
feeds
module usage

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

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

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

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

やりたいこと:モジュール(Feeds)でのデータマッピング時にPHPコードでフィールド値を加工する

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Tamper7.x-1.1、Feeds Tamper PHP7.x1.2
  • Feedsデータインポートの基本は「 Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考してください
  • データマッピングに、各インポートフィールドの値を加工するため、Feeds Tamperモジュールが良く利用します
  • この中に、特殊なフィールド値加工(例:既存のデータを取得するなど)のためFeeds Tamper PHPを利用して、PHPスクリプトの実行ができます
  • Feeds Tamper PHPでインポートデータの扱い、以下のパラメーターで、任意のフィールドの値の利用ができます
    • $field: 渡されたフィールドの値
    • $item['フィールド名']: インポート元で定義していたフィールド名でその値を取得する
      Drupalのモジュール(Feeds)のデータマッピング時にFeedsTamperでのPHPコードより各フィールドの値を加工します
  • 任意のフィールド(例:body)で他のフィールドの値(例:title)の取得することができます

注意点:PHPコード実行のセキュリティ問題とパフォーマンスへの影響

  • PHPコードを実行するには、eval()関数で行うため、任意のPHPコードの実行が可能となります
  • 特にインポートが公開の場合、PHPコード実行のセキュリティ問題を注意深く対応すべきです
  • また、データ取得したり、多くループをしたりして、パフォーマンスへの影響が考えるべきです
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

問題点:モジュール(Feeds)でデータインポート時に間違って設定があった場合インポートエラーなどが発生

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Import Previews7.x-1.x
  • 複雑なデータマッピング設定(例:Feeds Tamperなどで)時に、間違いやすくなります。その場合実際のデータをインポートで確認する必要があります
  • 間違った設定より、データインポートエラーなどが発生します

解決:モジュール(Feeds Import Preview)でインポート設定を確認します

  • モジュール(Feeds Import Preview)でデータインポート直前のステップまでに進んで、実際のインポート設定の確認ができます
    Drupalのモジュール(Feeds Import Preview)でデータインポート設定の確認ができます
  • 実際にソースから各フィールドの値が表示されています。
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
feeds
module usage

やりたいこと:コンテンツ(例:記事)のbodyフィールドの多言語データのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Entity Translation7.x-1.0
  • コンテンツのbody以外のフィールドがEntity Translation有効であれば、Feedsのデータマッピングで複数の言語のターゲットが現れます
    • drupalのfeedsで多言語コンテンツデータのインポート
  • BodyにEntity Translation有効の場合にマッピングでのターゲットが一つしかありません
  • 複数回でそれぞれの言語データをインポートします
    DrupalのFeedsで多言語bodyデータのインポート

FeedsのNode Processor設定画面でコンテンツ(例:記事)の初期言語を設定

  • コンテンツの元言語を設定する必要があります(もし、設定しなければ多言語の表示に影響しないが、コンテンツの翻訳タグが表示されない)
  • Node Processor設定画面でノートの言語を選択して、データインポート時に設定してくれます(ビデオを参考)

Feedsのマッピング設定画面でbodyのインポート言語設定を行います

  • データマッピング管理画面でbodyフィールドに言語設定があります
    データマッピング管理画面でbodyフィールドの言語設定
  • 複数の言語に対して複数のインポーターを用意するか、複数回で言語設定を行います

各言語に応じて複数回を分けてデータインポートする必要があります

  • 言語ごとにデータインポートする必要があります
    • 一括して同一フィールドに複数の言語インポートができません
  • 具体的なステップはビデオを参考してください
Embedded thumbnail for 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
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
system_management

モジュール(Localization Update)でサイトの多言語ユーザーインターフェースを導入します

  • 背景:Drupal7.54、Localization Update7.x-2.1
  • モジュール(Localization Update)をインストール/有効化します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)で「言語を追加」リンクをクリックすると、必要なユーザーインターフェース言語の導入ができます

管理者がサイト単位でユーザーインターフェース言語の一括設定(ほかの言語を使用しない)

  • Druaplを初期インストール(英語バージョンの場合)後に、別の言語(例:日本語)を導入し、その言語のみを使用します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)でのデフォルト値を選択すればよいです
    サイト単位の言語設定
  • サイト管理者が選択してから、一般ユーザーの選択はできません。

複数の言語をユーザーインターフェースとして利用する場合に、URL/ブラウザ/セッション/ユーザーの言語設定などよりサイトの言語自動判別ができます

  • 複数のユーザーインターフェース言語がある場合、どれを使用するかは決める必要があります
  • 言語判別設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語 » 判別と選択)言語利用の判別条件を設定します
    言語の判別設定と判別順序設定
    • URL: URLから言語を判定する(パス接頭語かドメイン)
    • セッション: 言語をrequest/sessionパラメーターから判定する。
    • ブラウザ: ブラウザーの言語設定から言語を判定する。
    • ユーザー: ユーザープロフィールで設定した言語に従う。
    • デフォルト: サイトのデフォルト言語を使う
  • 上記判別方法のい任意、または全部の選択はできます
  • 判別の優先順のソートができます
  • URLで言語判断設定した場合、URLのドメイン/パス接頭語の設定が必要となります
    言語判別のURLドメイン/パス接頭語設定
    • 「言語のドメイン」と「言語コードのパス接頭語」のどちらかの設定(両方の設定はできない)
    • 設定された方式で言語を判別となります
    • 説明の言葉通りに、一度設定したら、変更時にすでに存在しているパスが使用できなくなりますので、ご注意ください(変更後にすべてのパスを再構築などの作業が必要)
      言語判定URLの設定
Embedded thumbnail for Drupalの多言語ユーザーインターフェースの導入と設定
drupal
video
feeds

やりたいこと:Feedsで多言語コンテンツデータのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Feeds:Enity Translation7.x-1.0
  • モジュール:Entity Translationで多言語サイトを構築しています
  • 複数の言語コンテンツをデータ移行したいです
  • いろいろ調べてみてた、同一フィールドに多言語インポート方法が少なく、難しそうです

解決方法:モジュール(Feeds:Entity Translation)で多言語コンテンツデータの移行

  • 多言語コンテンツデータ移行をサポートするモジュールがあまり多くないようで、一つモジュール(Feeds: Entity Translation)を見つけました
  • モジュール(Feeds: Entity Translation)をインストール/有効化したら、Feedsのデータマッピング管理画面に、多言語有効なフィールドの各言語対応ターゲットが現れます
    多言語コンテンツデータ移行にサポートするFeeds: Entity Translation
  • 同一フィールドの各言語対応ターゲットを選択して多言語コンテンツインポートができました
Embedded thumbnail for DrupalのFeedsで多言語コンテンツデータのインポート
drupal
feeds
module usage

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

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

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

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

やりたいこと:モジュール(Feeds)でのデータマッピング時にPHPコードでフィールド値を加工する

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Tamper7.x-1.1、Feeds Tamper PHP7.x1.2
  • Feedsデータインポートの基本は「 Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考してください
  • データマッピングに、各インポートフィールドの値を加工するため、Feeds Tamperモジュールが良く利用します
  • この中に、特殊なフィールド値加工(例:既存のデータを取得するなど)のためFeeds Tamper PHPを利用して、PHPスクリプトの実行ができます
  • Feeds Tamper PHPでインポートデータの扱い、以下のパラメーターで、任意のフィールドの値の利用ができます
    • $field: 渡されたフィールドの値
    • $item['フィールド名']: インポート元で定義していたフィールド名でその値を取得する
      Drupalのモジュール(Feeds)のデータマッピング時にFeedsTamperでのPHPコードより各フィールドの値を加工します
  • 任意のフィールド(例:body)で他のフィールドの値(例:title)の取得することができます

注意点:PHPコード実行のセキュリティ問題とパフォーマンスへの影響

  • PHPコードを実行するには、eval()関数で行うため、任意のPHPコードの実行が可能となります
  • 特にインポートが公開の場合、PHPコード実行のセキュリティ問題を注意深く対応すべきです
  • また、データ取得したり、多くループをしたりして、パフォーマンスへの影響が考えるべきです
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

問題点:モジュール(Feeds)でデータインポート時に間違って設定があった場合インポートエラーなどが発生

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Import Previews7.x-1.x
  • 複雑なデータマッピング設定(例:Feeds Tamperなどで)時に、間違いやすくなります。その場合実際のデータをインポートで確認する必要があります
  • 間違った設定より、データインポートエラーなどが発生します

解決:モジュール(Feeds Import Preview)でインポート設定を確認します

  • モジュール(Feeds Import Preview)でデータインポート直前のステップまでに進んで、実際のインポート設定の確認ができます
    Drupalのモジュール(Feeds Import Preview)でデータインポート設定の確認ができます
  • 実際にソースから各フィールドの値が表示されています。
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
feeds
module usage

やりたいこと:コンテンツ(例:記事)のbodyフィールドの多言語データのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Entity Translation7.x-1.0
  • コンテンツのbody以外のフィールドがEntity Translation有効であれば、Feedsのデータマッピングで複数の言語のターゲットが現れます
    • drupalのfeedsで多言語コンテンツデータのインポート
  • BodyにEntity Translation有効の場合にマッピングでのターゲットが一つしかありません
  • 複数回でそれぞれの言語データをインポートします
    DrupalのFeedsで多言語bodyデータのインポート

FeedsのNode Processor設定画面でコンテンツ(例:記事)の初期言語を設定

  • コンテンツの元言語を設定する必要があります(もし、設定しなければ多言語の表示に影響しないが、コンテンツの翻訳タグが表示されない)
  • Node Processor設定画面でノートの言語を選択して、データインポート時に設定してくれます(ビデオを参考)

Feedsのマッピング設定画面でbodyのインポート言語設定を行います

  • データマッピング管理画面でbodyフィールドに言語設定があります
    データマッピング管理画面でbodyフィールドの言語設定
  • 複数の言語に対して複数のインポーターを用意するか、複数回で言語設定を行います

各言語に応じて複数回を分けてデータインポートする必要があります

  • 言語ごとにデータインポートする必要があります
    • 一括して同一フィールドに複数の言語インポートができません
  • 具体的なステップはビデオを参考してください
Embedded thumbnail for 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
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
system_management

モジュール(Localization Update)でサイトの多言語ユーザーインターフェースを導入します

  • 背景:Drupal7.54、Localization Update7.x-2.1
  • モジュール(Localization Update)をインストール/有効化します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)で「言語を追加」リンクをクリックすると、必要なユーザーインターフェース言語の導入ができます

管理者がサイト単位でユーザーインターフェース言語の一括設定(ほかの言語を使用しない)

  • Druaplを初期インストール(英語バージョンの場合)後に、別の言語(例:日本語)を導入し、その言語のみを使用します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)でのデフォルト値を選択すればよいです
    サイト単位の言語設定
  • サイト管理者が選択してから、一般ユーザーの選択はできません。

複数の言語をユーザーインターフェースとして利用する場合に、URL/ブラウザ/セッション/ユーザーの言語設定などよりサイトの言語自動判別ができます

  • 複数のユーザーインターフェース言語がある場合、どれを使用するかは決める必要があります
  • 言語判別設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語 » 判別と選択)言語利用の判別条件を設定します
    言語の判別設定と判別順序設定
    • URL: URLから言語を判定する(パス接頭語かドメイン)
    • セッション: 言語をrequest/sessionパラメーターから判定する。
    • ブラウザ: ブラウザーの言語設定から言語を判定する。
    • ユーザー: ユーザープロフィールで設定した言語に従う。
    • デフォルト: サイトのデフォルト言語を使う
  • 上記判別方法のい任意、または全部の選択はできます
  • 判別の優先順のソートができます
  • URLで言語判断設定した場合、URLのドメイン/パス接頭語の設定が必要となります
    言語判別のURLドメイン/パス接頭語設定
    • 「言語のドメイン」と「言語コードのパス接頭語」のどちらかの設定(両方の設定はできない)
    • 設定された方式で言語を判別となります
    • 説明の言葉通りに、一度設定したら、変更時にすでに存在しているパスが使用できなくなりますので、ご注意ください(変更後にすべてのパスを再構築などの作業が必要)
      言語判定URLの設定
Embedded thumbnail for Drupalの多言語ユーザーインターフェースの導入と設定
drupal
video
feeds

やりたいこと:Feedsで多言語コンテンツデータのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Feeds:Enity Translation7.x-1.0
  • モジュール:Entity Translationで多言語サイトを構築しています
  • 複数の言語コンテンツをデータ移行したいです
  • いろいろ調べてみてた、同一フィールドに多言語インポート方法が少なく、難しそうです

解決方法:モジュール(Feeds:Entity Translation)で多言語コンテンツデータの移行

  • 多言語コンテンツデータ移行をサポートするモジュールがあまり多くないようで、一つモジュール(Feeds: Entity Translation)を見つけました
  • モジュール(Feeds: Entity Translation)をインストール/有効化したら、Feedsのデータマッピング管理画面に、多言語有効なフィールドの各言語対応ターゲットが現れます
    多言語コンテンツデータ移行にサポートするFeeds: Entity Translation
  • 同一フィールドの各言語対応ターゲットを選択して多言語コンテンツインポートができました
Embedded thumbnail for DrupalのFeedsで多言語コンテンツデータのインポート
drupal
feeds
module usage

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

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

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

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

やりたいこと:モジュール(Feeds)でのデータマッピング時にPHPコードでフィールド値を加工する

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Tamper7.x-1.1、Feeds Tamper PHP7.x1.2
  • Feedsデータインポートの基本は「 Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考してください
  • データマッピングに、各インポートフィールドの値を加工するため、Feeds Tamperモジュールが良く利用します
  • この中に、特殊なフィールド値加工(例:既存のデータを取得するなど)のためFeeds Tamper PHPを利用して、PHPスクリプトの実行ができます
  • Feeds Tamper PHPでインポートデータの扱い、以下のパラメーターで、任意のフィールドの値の利用ができます
    • $field: 渡されたフィールドの値
    • $item['フィールド名']: インポート元で定義していたフィールド名でその値を取得する
      Drupalのモジュール(Feeds)のデータマッピング時にFeedsTamperでのPHPコードより各フィールドの値を加工します
  • 任意のフィールド(例:body)で他のフィールドの値(例:title)の取得することができます

注意点:PHPコード実行のセキュリティ問題とパフォーマンスへの影響

  • PHPコードを実行するには、eval()関数で行うため、任意のPHPコードの実行が可能となります
  • 特にインポートが公開の場合、PHPコード実行のセキュリティ問題を注意深く対応すべきです
  • また、データ取得したり、多くループをしたりして、パフォーマンスへの影響が考えるべきです
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

問題点:モジュール(Feeds)でデータインポート時に間違って設定があった場合インポートエラーなどが発生

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Import Previews7.x-1.x
  • 複雑なデータマッピング設定(例:Feeds Tamperなどで)時に、間違いやすくなります。その場合実際のデータをインポートで確認する必要があります
  • 間違った設定より、データインポートエラーなどが発生します

解決:モジュール(Feeds Import Preview)でインポート設定を確認します

  • モジュール(Feeds Import Preview)でデータインポート直前のステップまでに進んで、実際のインポート設定の確認ができます
    Drupalのモジュール(Feeds Import Preview)でデータインポート設定の確認ができます
  • 実際にソースから各フィールドの値が表示されています。
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
feeds
module usage

やりたいこと:コンテンツ(例:記事)のbodyフィールドの多言語データのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Entity Translation7.x-1.0
  • コンテンツのbody以外のフィールドがEntity Translation有効であれば、Feedsのデータマッピングで複数の言語のターゲットが現れます
    • drupalのfeedsで多言語コンテンツデータのインポート
  • BodyにEntity Translation有効の場合にマッピングでのターゲットが一つしかありません
  • 複数回でそれぞれの言語データをインポートします
    DrupalのFeedsで多言語bodyデータのインポート

FeedsのNode Processor設定画面でコンテンツ(例:記事)の初期言語を設定

  • コンテンツの元言語を設定する必要があります(もし、設定しなければ多言語の表示に影響しないが、コンテンツの翻訳タグが表示されない)
  • Node Processor設定画面でノートの言語を選択して、データインポート時に設定してくれます(ビデオを参考)

Feedsのマッピング設定画面でbodyのインポート言語設定を行います

  • データマッピング管理画面でbodyフィールドに言語設定があります
    データマッピング管理画面でbodyフィールドの言語設定
  • 複数の言語に対して複数のインポーターを用意するか、複数回で言語設定を行います

各言語に応じて複数回を分けてデータインポートする必要があります

  • 言語ごとにデータインポートする必要があります
    • 一括して同一フィールドに複数の言語インポートができません
  • 具体的なステップはビデオを参考してください
Embedded thumbnail for 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
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
system_management

モジュール(Localization Update)でサイトの多言語ユーザーインターフェースを導入します

  • 背景:Drupal7.54、Localization Update7.x-2.1
  • モジュール(Localization Update)をインストール/有効化します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)で「言語を追加」リンクをクリックすると、必要なユーザーインターフェース言語の導入ができます

管理者がサイト単位でユーザーインターフェース言語の一括設定(ほかの言語を使用しない)

  • Druaplを初期インストール(英語バージョンの場合)後に、別の言語(例:日本語)を導入し、その言語のみを使用します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)でのデフォルト値を選択すればよいです
    サイト単位の言語設定
  • サイト管理者が選択してから、一般ユーザーの選択はできません。

複数の言語をユーザーインターフェースとして利用する場合に、URL/ブラウザ/セッション/ユーザーの言語設定などよりサイトの言語自動判別ができます

  • 複数のユーザーインターフェース言語がある場合、どれを使用するかは決める必要があります
  • 言語判別設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語 » 判別と選択)言語利用の判別条件を設定します
    言語の判別設定と判別順序設定
    • URL: URLから言語を判定する(パス接頭語かドメイン)
    • セッション: 言語をrequest/sessionパラメーターから判定する。
    • ブラウザ: ブラウザーの言語設定から言語を判定する。
    • ユーザー: ユーザープロフィールで設定した言語に従う。
    • デフォルト: サイトのデフォルト言語を使う
  • 上記判別方法のい任意、または全部の選択はできます
  • 判別の優先順のソートができます
  • URLで言語判断設定した場合、URLのドメイン/パス接頭語の設定が必要となります
    言語判別のURLドメイン/パス接頭語設定
    • 「言語のドメイン」と「言語コードのパス接頭語」のどちらかの設定(両方の設定はできない)
    • 設定された方式で言語を判別となります
    • 説明の言葉通りに、一度設定したら、変更時にすでに存在しているパスが使用できなくなりますので、ご注意ください(変更後にすべてのパスを再構築などの作業が必要)
      言語判定URLの設定
Embedded thumbnail for Drupalの多言語ユーザーインターフェースの導入と設定
drupal
video
feeds

やりたいこと:Feedsで多言語コンテンツデータのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Feeds:Enity Translation7.x-1.0
  • モジュール:Entity Translationで多言語サイトを構築しています
  • 複数の言語コンテンツをデータ移行したいです
  • いろいろ調べてみてた、同一フィールドに多言語インポート方法が少なく、難しそうです

解決方法:モジュール(Feeds:Entity Translation)で多言語コンテンツデータの移行

  • 多言語コンテンツデータ移行をサポートするモジュールがあまり多くないようで、一つモジュール(Feeds: Entity Translation)を見つけました
  • モジュール(Feeds: Entity Translation)をインストール/有効化したら、Feedsのデータマッピング管理画面に、多言語有効なフィールドの各言語対応ターゲットが現れます
    多言語コンテンツデータ移行にサポートするFeeds: Entity Translation
  • 同一フィールドの各言語対応ターゲットを選択して多言語コンテンツインポートができました
Embedded thumbnail for DrupalのFeedsで多言語コンテンツデータのインポート
drupal
feeds
module usage

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

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

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

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

やりたいこと:モジュール(Feeds)でのデータマッピング時にPHPコードでフィールド値を加工する

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Tamper7.x-1.1、Feeds Tamper PHP7.x1.2
  • Feedsデータインポートの基本は「 Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考してください
  • データマッピングに、各インポートフィールドの値を加工するため、Feeds Tamperモジュールが良く利用します
  • この中に、特殊なフィールド値加工(例:既存のデータを取得するなど)のためFeeds Tamper PHPを利用して、PHPスクリプトの実行ができます
  • Feeds Tamper PHPでインポートデータの扱い、以下のパラメーターで、任意のフィールドの値の利用ができます
    • $field: 渡されたフィールドの値
    • $item['フィールド名']: インポート元で定義していたフィールド名でその値を取得する
      Drupalのモジュール(Feeds)のデータマッピング時にFeedsTamperでのPHPコードより各フィールドの値を加工します
  • 任意のフィールド(例:body)で他のフィールドの値(例:title)の取得することができます

注意点:PHPコード実行のセキュリティ問題とパフォーマンスへの影響

  • PHPコードを実行するには、eval()関数で行うため、任意のPHPコードの実行が可能となります
  • 特にインポートが公開の場合、PHPコード実行のセキュリティ問題を注意深く対応すべきです
  • また、データ取得したり、多くループをしたりして、パフォーマンスへの影響が考えるべきです
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

問題点:モジュール(Feeds)でデータインポート時に間違って設定があった場合インポートエラーなどが発生

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Import Previews7.x-1.x
  • 複雑なデータマッピング設定(例:Feeds Tamperなどで)時に、間違いやすくなります。その場合実際のデータをインポートで確認する必要があります
  • 間違った設定より、データインポートエラーなどが発生します

解決:モジュール(Feeds Import Preview)でインポート設定を確認します

  • モジュール(Feeds Import Preview)でデータインポート直前のステップまでに進んで、実際のインポート設定の確認ができます
    Drupalのモジュール(Feeds Import Preview)でデータインポート設定の確認ができます
  • 実際にソースから各フィールドの値が表示されています。
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
feeds
module usage

やりたいこと:コンテンツ(例:記事)のbodyフィールドの多言語データのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Entity Translation7.x-1.0
  • コンテンツのbody以外のフィールドがEntity Translation有効であれば、Feedsのデータマッピングで複数の言語のターゲットが現れます
    • drupalのfeedsで多言語コンテンツデータのインポート
  • BodyにEntity Translation有効の場合にマッピングでのターゲットが一つしかありません
  • 複数回でそれぞれの言語データをインポートします
    DrupalのFeedsで多言語bodyデータのインポート

FeedsのNode Processor設定画面でコンテンツ(例:記事)の初期言語を設定

  • コンテンツの元言語を設定する必要があります(もし、設定しなければ多言語の表示に影響しないが、コンテンツの翻訳タグが表示されない)
  • Node Processor設定画面でノートの言語を選択して、データインポート時に設定してくれます(ビデオを参考)

Feedsのマッピング設定画面でbodyのインポート言語設定を行います

  • データマッピング管理画面でbodyフィールドに言語設定があります
    データマッピング管理画面でbodyフィールドの言語設定
  • 複数の言語に対して複数のインポーターを用意するか、複数回で言語設定を行います

各言語に応じて複数回を分けてデータインポートする必要があります

  • 言語ごとにデータインポートする必要があります
    • 一括して同一フィールドに複数の言語インポートができません
  • 具体的なステップはビデオを参考してください
Embedded thumbnail for 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
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
system_management

モジュール(Localization Update)でサイトの多言語ユーザーインターフェースを導入します

  • 背景:Drupal7.54、Localization Update7.x-2.1
  • モジュール(Localization Update)をインストール/有効化します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)で「言語を追加」リンクをクリックすると、必要なユーザーインターフェース言語の導入ができます

管理者がサイト単位でユーザーインターフェース言語の一括設定(ほかの言語を使用しない)

  • Druaplを初期インストール(英語バージョンの場合)後に、別の言語(例:日本語)を導入し、その言語のみを使用します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)でのデフォルト値を選択すればよいです
    サイト単位の言語設定
  • サイト管理者が選択してから、一般ユーザーの選択はできません。

複数の言語をユーザーインターフェースとして利用する場合に、URL/ブラウザ/セッション/ユーザーの言語設定などよりサイトの言語自動判別ができます

  • 複数のユーザーインターフェース言語がある場合、どれを使用するかは決める必要があります
  • 言語判別設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語 » 判別と選択)言語利用の判別条件を設定します
    言語の判別設定と判別順序設定
    • URL: URLから言語を判定する(パス接頭語かドメイン)
    • セッション: 言語をrequest/sessionパラメーターから判定する。
    • ブラウザ: ブラウザーの言語設定から言語を判定する。
    • ユーザー: ユーザープロフィールで設定した言語に従う。
    • デフォルト: サイトのデフォルト言語を使う
  • 上記判別方法のい任意、または全部の選択はできます
  • 判別の優先順のソートができます
  • URLで言語判断設定した場合、URLのドメイン/パス接頭語の設定が必要となります
    言語判別のURLドメイン/パス接頭語設定
    • 「言語のドメイン」と「言語コードのパス接頭語」のどちらかの設定(両方の設定はできない)
    • 設定された方式で言語を判別となります
    • 説明の言葉通りに、一度設定したら、変更時にすでに存在しているパスが使用できなくなりますので、ご注意ください(変更後にすべてのパスを再構築などの作業が必要)
      言語判定URLの設定
Embedded thumbnail for Drupalの多言語ユーザーインターフェースの導入と設定
drupal
video
feeds

やりたいこと:Feedsで多言語コンテンツデータのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Feeds:Enity Translation7.x-1.0
  • モジュール:Entity Translationで多言語サイトを構築しています
  • 複数の言語コンテンツをデータ移行したいです
  • いろいろ調べてみてた、同一フィールドに多言語インポート方法が少なく、難しそうです

解決方法:モジュール(Feeds:Entity Translation)で多言語コンテンツデータの移行

  • 多言語コンテンツデータ移行をサポートするモジュールがあまり多くないようで、一つモジュール(Feeds: Entity Translation)を見つけました
  • モジュール(Feeds: Entity Translation)をインストール/有効化したら、Feedsのデータマッピング管理画面に、多言語有効なフィールドの各言語対応ターゲットが現れます
    多言語コンテンツデータ移行にサポートするFeeds: Entity Translation
  • 同一フィールドの各言語対応ターゲットを選択して多言語コンテンツインポートができました
Embedded thumbnail for DrupalのFeedsで多言語コンテンツデータのインポート
drupal
feeds
module usage

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

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

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

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

やりたいこと:モジュール(Feeds)でのデータマッピング時にPHPコードでフィールド値を加工する

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Tamper7.x-1.1、Feeds Tamper PHP7.x1.2
  • Feedsデータインポートの基本は「 Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考してください
  • データマッピングに、各インポートフィールドの値を加工するため、Feeds Tamperモジュールが良く利用します
  • この中に、特殊なフィールド値加工(例:既存のデータを取得するなど)のためFeeds Tamper PHPを利用して、PHPスクリプトの実行ができます
  • Feeds Tamper PHPでインポートデータの扱い、以下のパラメーターで、任意のフィールドの値の利用ができます
    • $field: 渡されたフィールドの値
    • $item['フィールド名']: インポート元で定義していたフィールド名でその値を取得する
      Drupalのモジュール(Feeds)のデータマッピング時にFeedsTamperでのPHPコードより各フィールドの値を加工します
  • 任意のフィールド(例:body)で他のフィールドの値(例:title)の取得することができます

注意点:PHPコード実行のセキュリティ問題とパフォーマンスへの影響

  • PHPコードを実行するには、eval()関数で行うため、任意のPHPコードの実行が可能となります
  • 特にインポートが公開の場合、PHPコード実行のセキュリティ問題を注意深く対応すべきです
  • また、データ取得したり、多くループをしたりして、パフォーマンスへの影響が考えるべきです
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

問題点:モジュール(Feeds)でデータインポート時に間違って設定があった場合インポートエラーなどが発生

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Import Previews7.x-1.x
  • 複雑なデータマッピング設定(例:Feeds Tamperなどで)時に、間違いやすくなります。その場合実際のデータをインポートで確認する必要があります
  • 間違った設定より、データインポートエラーなどが発生します

解決:モジュール(Feeds Import Preview)でインポート設定を確認します

  • モジュール(Feeds Import Preview)でデータインポート直前のステップまでに進んで、実際のインポート設定の確認ができます
    Drupalのモジュール(Feeds Import Preview)でデータインポート設定の確認ができます
  • 実際にソースから各フィールドの値が表示されています。
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
feeds
module usage

やりたいこと:コンテンツ(例:記事)のbodyフィールドの多言語データのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Entity Translation7.x-1.0
  • コンテンツのbody以外のフィールドがEntity Translation有効であれば、Feedsのデータマッピングで複数の言語のターゲットが現れます
    • drupalのfeedsで多言語コンテンツデータのインポート
  • BodyにEntity Translation有効の場合にマッピングでのターゲットが一つしかありません
  • 複数回でそれぞれの言語データをインポートします
    DrupalのFeedsで多言語bodyデータのインポート

FeedsのNode Processor設定画面でコンテンツ(例:記事)の初期言語を設定

  • コンテンツの元言語を設定する必要があります(もし、設定しなければ多言語の表示に影響しないが、コンテンツの翻訳タグが表示されない)
  • Node Processor設定画面でノートの言語を選択して、データインポート時に設定してくれます(ビデオを参考)

Feedsのマッピング設定画面でbodyのインポート言語設定を行います

  • データマッピング管理画面でbodyフィールドに言語設定があります
    データマッピング管理画面でbodyフィールドの言語設定
  • 複数の言語に対して複数のインポーターを用意するか、複数回で言語設定を行います

各言語に応じて複数回を分けてデータインポートする必要があります

  • 言語ごとにデータインポートする必要があります
    • 一括して同一フィールドに複数の言語インポートができません
  • 具体的なステップはビデオを参考してください
Embedded thumbnail for 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
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
system_management

モジュール(Localization Update)でサイトの多言語ユーザーインターフェースを導入します

  • 背景:Drupal7.54、Localization Update7.x-2.1
  • モジュール(Localization Update)をインストール/有効化します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)で「言語を追加」リンクをクリックすると、必要なユーザーインターフェース言語の導入ができます

管理者がサイト単位でユーザーインターフェース言語の一括設定(ほかの言語を使用しない)

  • Druaplを初期インストール(英語バージョンの場合)後に、別の言語(例:日本語)を導入し、その言語のみを使用します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)でのデフォルト値を選択すればよいです
    サイト単位の言語設定
  • サイト管理者が選択してから、一般ユーザーの選択はできません。

複数の言語をユーザーインターフェースとして利用する場合に、URL/ブラウザ/セッション/ユーザーの言語設定などよりサイトの言語自動判別ができます

  • 複数のユーザーインターフェース言語がある場合、どれを使用するかは決める必要があります
  • 言語判別設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語 » 判別と選択)言語利用の判別条件を設定します
    言語の判別設定と判別順序設定
    • URL: URLから言語を判定する(パス接頭語かドメイン)
    • セッション: 言語をrequest/sessionパラメーターから判定する。
    • ブラウザ: ブラウザーの言語設定から言語を判定する。
    • ユーザー: ユーザープロフィールで設定した言語に従う。
    • デフォルト: サイトのデフォルト言語を使う
  • 上記判別方法のい任意、または全部の選択はできます
  • 判別の優先順のソートができます
  • URLで言語判断設定した場合、URLのドメイン/パス接頭語の設定が必要となります
    言語判別のURLドメイン/パス接頭語設定
    • 「言語のドメイン」と「言語コードのパス接頭語」のどちらかの設定(両方の設定はできない)
    • 設定された方式で言語を判別となります
    • 説明の言葉通りに、一度設定したら、変更時にすでに存在しているパスが使用できなくなりますので、ご注意ください(変更後にすべてのパスを再構築などの作業が必要)
      言語判定URLの設定
Embedded thumbnail for Drupalの多言語ユーザーインターフェースの導入と設定
drupal
video
feeds

やりたいこと:Feedsで多言語コンテンツデータのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Feeds:Enity Translation7.x-1.0
  • モジュール:Entity Translationで多言語サイトを構築しています
  • 複数の言語コンテンツをデータ移行したいです
  • いろいろ調べてみてた、同一フィールドに多言語インポート方法が少なく、難しそうです

解決方法:モジュール(Feeds:Entity Translation)で多言語コンテンツデータの移行

  • 多言語コンテンツデータ移行をサポートするモジュールがあまり多くないようで、一つモジュール(Feeds: Entity Translation)を見つけました
  • モジュール(Feeds: Entity Translation)をインストール/有効化したら、Feedsのデータマッピング管理画面に、多言語有効なフィールドの各言語対応ターゲットが現れます
    多言語コンテンツデータ移行にサポートするFeeds: Entity Translation
  • 同一フィールドの各言語対応ターゲットを選択して多言語コンテンツインポートができました
Embedded thumbnail for DrupalのFeedsで多言語コンテンツデータのインポート
drupal
feeds
module usage

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

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

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

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

やりたいこと:モジュール(Feeds)でのデータマッピング時にPHPコードでフィールド値を加工する

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Tamper7.x-1.1、Feeds Tamper PHP7.x1.2
  • Feedsデータインポートの基本は「 Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考してください
  • データマッピングに、各インポートフィールドの値を加工するため、Feeds Tamperモジュールが良く利用します
  • この中に、特殊なフィールド値加工(例:既存のデータを取得するなど)のためFeeds Tamper PHPを利用して、PHPスクリプトの実行ができます
  • Feeds Tamper PHPでインポートデータの扱い、以下のパラメーターで、任意のフィールドの値の利用ができます
    • $field: 渡されたフィールドの値
    • $item['フィールド名']: インポート元で定義していたフィールド名でその値を取得する
      Drupalのモジュール(Feeds)のデータマッピング時にFeedsTamperでのPHPコードより各フィールドの値を加工します
  • 任意のフィールド(例:body)で他のフィールドの値(例:title)の取得することができます

注意点:PHPコード実行のセキュリティ問題とパフォーマンスへの影響

  • PHPコードを実行するには、eval()関数で行うため、任意のPHPコードの実行が可能となります
  • 特にインポートが公開の場合、PHPコード実行のセキュリティ問題を注意深く対応すべきです
  • また、データ取得したり、多くループをしたりして、パフォーマンスへの影響が考えるべきです
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

問題点:モジュール(Feeds)でデータインポート時に間違って設定があった場合インポートエラーなどが発生

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Import Previews7.x-1.x
  • 複雑なデータマッピング設定(例:Feeds Tamperなどで)時に、間違いやすくなります。その場合実際のデータをインポートで確認する必要があります
  • 間違った設定より、データインポートエラーなどが発生します

解決:モジュール(Feeds Import Preview)でインポート設定を確認します

  • モジュール(Feeds Import Preview)でデータインポート直前のステップまでに進んで、実際のインポート設定の確認ができます
    Drupalのモジュール(Feeds Import Preview)でデータインポート設定の確認ができます
  • 実際にソースから各フィールドの値が表示されています。
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
feeds
module usage

やりたいこと:コンテンツ(例:記事)のbodyフィールドの多言語データのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Entity Translation7.x-1.0
  • コンテンツのbody以外のフィールドがEntity Translation有効であれば、Feedsのデータマッピングで複数の言語のターゲットが現れます
    • drupalのfeedsで多言語コンテンツデータのインポート
  • BodyにEntity Translation有効の場合にマッピングでのターゲットが一つしかありません
  • 複数回でそれぞれの言語データをインポートします
    DrupalのFeedsで多言語bodyデータのインポート

FeedsのNode Processor設定画面でコンテンツ(例:記事)の初期言語を設定

  • コンテンツの元言語を設定する必要があります(もし、設定しなければ多言語の表示に影響しないが、コンテンツの翻訳タグが表示されない)
  • Node Processor設定画面でノートの言語を選択して、データインポート時に設定してくれます(ビデオを参考)

Feedsのマッピング設定画面でbodyのインポート言語設定を行います

  • データマッピング管理画面でbodyフィールドに言語設定があります
    データマッピング管理画面でbodyフィールドの言語設定
  • 複数の言語に対して複数のインポーターを用意するか、複数回で言語設定を行います

各言語に応じて複数回を分けてデータインポートする必要があります

  • 言語ごとにデータインポートする必要があります
    • 一括して同一フィールドに複数の言語インポートができません
  • 具体的なステップはビデオを参考してください
Embedded thumbnail for 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
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
system_management

モジュール(Localization Update)でサイトの多言語ユーザーインターフェースを導入します

  • 背景:Drupal7.54、Localization Update7.x-2.1
  • モジュール(Localization Update)をインストール/有効化します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)で「言語を追加」リンクをクリックすると、必要なユーザーインターフェース言語の導入ができます

管理者がサイト単位でユーザーインターフェース言語の一括設定(ほかの言語を使用しない)

  • Druaplを初期インストール(英語バージョンの場合)後に、別の言語(例:日本語)を導入し、その言語のみを使用します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)でのデフォルト値を選択すればよいです
    サイト単位の言語設定
  • サイト管理者が選択してから、一般ユーザーの選択はできません。

複数の言語をユーザーインターフェースとして利用する場合に、URL/ブラウザ/セッション/ユーザーの言語設定などよりサイトの言語自動判別ができます

  • 複数のユーザーインターフェース言語がある場合、どれを使用するかは決める必要があります
  • 言語判別設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語 » 判別と選択)言語利用の判別条件を設定します
    言語の判別設定と判別順序設定
    • URL: URLから言語を判定する(パス接頭語かドメイン)
    • セッション: 言語をrequest/sessionパラメーターから判定する。
    • ブラウザ: ブラウザーの言語設定から言語を判定する。
    • ユーザー: ユーザープロフィールで設定した言語に従う。
    • デフォルト: サイトのデフォルト言語を使う
  • 上記判別方法のい任意、または全部の選択はできます
  • 判別の優先順のソートができます
  • URLで言語判断設定した場合、URLのドメイン/パス接頭語の設定が必要となります
    言語判別のURLドメイン/パス接頭語設定
    • 「言語のドメイン」と「言語コードのパス接頭語」のどちらかの設定(両方の設定はできない)
    • 設定された方式で言語を判別となります
    • 説明の言葉通りに、一度設定したら、変更時にすでに存在しているパスが使用できなくなりますので、ご注意ください(変更後にすべてのパスを再構築などの作業が必要)
      言語判定URLの設定
Embedded thumbnail for Drupalの多言語ユーザーインターフェースの導入と設定
drupal
video
feeds

やりたいこと:Feedsで多言語コンテンツデータのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Feeds:Enity Translation7.x-1.0
  • モジュール:Entity Translationで多言語サイトを構築しています
  • 複数の言語コンテンツをデータ移行したいです
  • いろいろ調べてみてた、同一フィールドに多言語インポート方法が少なく、難しそうです

解決方法:モジュール(Feeds:Entity Translation)で多言語コンテンツデータの移行

  • 多言語コンテンツデータ移行をサポートするモジュールがあまり多くないようで、一つモジュール(Feeds: Entity Translation)を見つけました
  • モジュール(Feeds: Entity Translation)をインストール/有効化したら、Feedsのデータマッピング管理画面に、多言語有効なフィールドの各言語対応ターゲットが現れます
    多言語コンテンツデータ移行にサポートするFeeds: Entity Translation
  • 同一フィールドの各言語対応ターゲットを選択して多言語コンテンツインポートができました
Embedded thumbnail for DrupalのFeedsで多言語コンテンツデータのインポート
drupal
feeds
module usage

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

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

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

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

やりたいこと:モジュール(Feeds)でのデータマッピング時にPHPコードでフィールド値を加工する

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Tamper7.x-1.1、Feeds Tamper PHP7.x1.2
  • Feedsデータインポートの基本は「 Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考してください
  • データマッピングに、各インポートフィールドの値を加工するため、Feeds Tamperモジュールが良く利用します
  • この中に、特殊なフィールド値加工(例:既存のデータを取得するなど)のためFeeds Tamper PHPを利用して、PHPスクリプトの実行ができます
  • Feeds Tamper PHPでインポートデータの扱い、以下のパラメーターで、任意のフィールドの値の利用ができます
    • $field: 渡されたフィールドの値
    • $item['フィールド名']: インポート元で定義していたフィールド名でその値を取得する
      Drupalのモジュール(Feeds)のデータマッピング時にFeedsTamperでのPHPコードより各フィールドの値を加工します
  • 任意のフィールド(例:body)で他のフィールドの値(例:title)の取得することができます

注意点:PHPコード実行のセキュリティ問題とパフォーマンスへの影響

  • PHPコードを実行するには、eval()関数で行うため、任意のPHPコードの実行が可能となります
  • 特にインポートが公開の場合、PHPコード実行のセキュリティ問題を注意深く対応すべきです
  • また、データ取得したり、多くループをしたりして、パフォーマンスへの影響が考えるべきです
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

問題点:モジュール(Feeds)でデータインポート時に間違って設定があった場合インポートエラーなどが発生

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Import Previews7.x-1.x
  • 複雑なデータマッピング設定(例:Feeds Tamperなどで)時に、間違いやすくなります。その場合実際のデータをインポートで確認する必要があります
  • 間違った設定より、データインポートエラーなどが発生します

解決:モジュール(Feeds Import Preview)でインポート設定を確認します

  • モジュール(Feeds Import Preview)でデータインポート直前のステップまでに進んで、実際のインポート設定の確認ができます
    Drupalのモジュール(Feeds Import Preview)でデータインポート設定の確認ができます
  • 実際にソースから各フィールドの値が表示されています。
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
feeds
module usage

やりたいこと:コンテンツ(例:記事)のbodyフィールドの多言語データのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Entity Translation7.x-1.0
  • コンテンツのbody以外のフィールドがEntity Translation有効であれば、Feedsのデータマッピングで複数の言語のターゲットが現れます
    • drupalのfeedsで多言語コンテンツデータのインポート
  • BodyにEntity Translation有効の場合にマッピングでのターゲットが一つしかありません
  • 複数回でそれぞれの言語データをインポートします
    DrupalのFeedsで多言語bodyデータのインポート

FeedsのNode Processor設定画面でコンテンツ(例:記事)の初期言語を設定

  • コンテンツの元言語を設定する必要があります(もし、設定しなければ多言語の表示に影響しないが、コンテンツの翻訳タグが表示されない)
  • Node Processor設定画面でノートの言語を選択して、データインポート時に設定してくれます(ビデオを参考)

Feedsのマッピング設定画面でbodyのインポート言語設定を行います

  • データマッピング管理画面でbodyフィールドに言語設定があります
    データマッピング管理画面でbodyフィールドの言語設定
  • 複数の言語に対して複数のインポーターを用意するか、複数回で言語設定を行います

各言語に応じて複数回を分けてデータインポートする必要があります

  • 言語ごとにデータインポートする必要があります
    • 一括して同一フィールドに複数の言語インポートができません
  • 具体的なステップはビデオを参考してください
Embedded thumbnail for 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
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
system_management

モジュール(Localization Update)でサイトの多言語ユーザーインターフェースを導入します

  • 背景:Drupal7.54、Localization Update7.x-2.1
  • モジュール(Localization Update)をインストール/有効化します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)で「言語を追加」リンクをクリックすると、必要なユーザーインターフェース言語の導入ができます

管理者がサイト単位でユーザーインターフェース言語の一括設定(ほかの言語を使用しない)

  • Druaplを初期インストール(英語バージョンの場合)後に、別の言語(例:日本語)を導入し、その言語のみを使用します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)でのデフォルト値を選択すればよいです
    サイト単位の言語設定
  • サイト管理者が選択してから、一般ユーザーの選択はできません。

複数の言語をユーザーインターフェースとして利用する場合に、URL/ブラウザ/セッション/ユーザーの言語設定などよりサイトの言語自動判別ができます

  • 複数のユーザーインターフェース言語がある場合、どれを使用するかは決める必要があります
  • 言語判別設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語 » 判別と選択)言語利用の判別条件を設定します
    言語の判別設定と判別順序設定
    • URL: URLから言語を判定する(パス接頭語かドメイン)
    • セッション: 言語をrequest/sessionパラメーターから判定する。
    • ブラウザ: ブラウザーの言語設定から言語を判定する。
    • ユーザー: ユーザープロフィールで設定した言語に従う。
    • デフォルト: サイトのデフォルト言語を使う
  • 上記判別方法のい任意、または全部の選択はできます
  • 判別の優先順のソートができます
  • URLで言語判断設定した場合、URLのドメイン/パス接頭語の設定が必要となります
    言語判別のURLドメイン/パス接頭語設定
    • 「言語のドメイン」と「言語コードのパス接頭語」のどちらかの設定(両方の設定はできない)
    • 設定された方式で言語を判別となります
    • 説明の言葉通りに、一度設定したら、変更時にすでに存在しているパスが使用できなくなりますので、ご注意ください(変更後にすべてのパスを再構築などの作業が必要)
      言語判定URLの設定
Embedded thumbnail for Drupalの多言語ユーザーインターフェースの導入と設定
drupal
video
feeds

やりたいこと:Feedsで多言語コンテンツデータのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Feeds:Enity Translation7.x-1.0
  • モジュール:Entity Translationで多言語サイトを構築しています
  • 複数の言語コンテンツをデータ移行したいです
  • いろいろ調べてみてた、同一フィールドに多言語インポート方法が少なく、難しそうです

解決方法:モジュール(Feeds:Entity Translation)で多言語コンテンツデータの移行

  • 多言語コンテンツデータ移行をサポートするモジュールがあまり多くないようで、一つモジュール(Feeds: Entity Translation)を見つけました
  • モジュール(Feeds: Entity Translation)をインストール/有効化したら、Feedsのデータマッピング管理画面に、多言語有効なフィールドの各言語対応ターゲットが現れます
    多言語コンテンツデータ移行にサポートするFeeds: Entity Translation
  • 同一フィールドの各言語対応ターゲットを選択して多言語コンテンツインポートができました
Embedded thumbnail for DrupalのFeedsで多言語コンテンツデータのインポート
drupal
feeds
module usage

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

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

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

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

やりたいこと:モジュール(Feeds)でのデータマッピング時にPHPコードでフィールド値を加工する

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Tamper7.x-1.1、Feeds Tamper PHP7.x1.2
  • Feedsデータインポートの基本は「 Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考してください
  • データマッピングに、各インポートフィールドの値を加工するため、Feeds Tamperモジュールが良く利用します
  • この中に、特殊なフィールド値加工(例:既存のデータを取得するなど)のためFeeds Tamper PHPを利用して、PHPスクリプトの実行ができます
  • Feeds Tamper PHPでインポートデータの扱い、以下のパラメーターで、任意のフィールドの値の利用ができます
    • $field: 渡されたフィールドの値
    • $item['フィールド名']: インポート元で定義していたフィールド名でその値を取得する
      Drupalのモジュール(Feeds)のデータマッピング時にFeedsTamperでのPHPコードより各フィールドの値を加工します
  • 任意のフィールド(例:body)で他のフィールドの値(例:title)の取得することができます

注意点:PHPコード実行のセキュリティ問題とパフォーマンスへの影響

  • PHPコードを実行するには、eval()関数で行うため、任意のPHPコードの実行が可能となります
  • 特にインポートが公開の場合、PHPコード実行のセキュリティ問題を注意深く対応すべきです
  • また、データ取得したり、多くループをしたりして、パフォーマンスへの影響が考えるべきです
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

問題点:モジュール(Feeds)でデータインポート時に間違って設定があった場合インポートエラーなどが発生

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Import Previews7.x-1.x
  • 複雑なデータマッピング設定(例:Feeds Tamperなどで)時に、間違いやすくなります。その場合実際のデータをインポートで確認する必要があります
  • 間違った設定より、データインポートエラーなどが発生します

解決:モジュール(Feeds Import Preview)でインポート設定を確認します

  • モジュール(Feeds Import Preview)でデータインポート直前のステップまでに進んで、実際のインポート設定の確認ができます
    Drupalのモジュール(Feeds Import Preview)でデータインポート設定の確認ができます
  • 実際にソースから各フィールドの値が表示されています。
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
feeds
module usage

やりたいこと:コンテンツ(例:記事)のbodyフィールドの多言語データのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Entity Translation7.x-1.0
  • コンテンツのbody以外のフィールドがEntity Translation有効であれば、Feedsのデータマッピングで複数の言語のターゲットが現れます
    • drupalのfeedsで多言語コンテンツデータのインポート
  • BodyにEntity Translation有効の場合にマッピングでのターゲットが一つしかありません
  • 複数回でそれぞれの言語データをインポートします
    DrupalのFeedsで多言語bodyデータのインポート

FeedsのNode Processor設定画面でコンテンツ(例:記事)の初期言語を設定

  • コンテンツの元言語を設定する必要があります(もし、設定しなければ多言語の表示に影響しないが、コンテンツの翻訳タグが表示されない)
  • Node Processor設定画面でノートの言語を選択して、データインポート時に設定してくれます(ビデオを参考)

Feedsのマッピング設定画面でbodyのインポート言語設定を行います

  • データマッピング管理画面でbodyフィールドに言語設定があります
    データマッピング管理画面でbodyフィールドの言語設定
  • 複数の言語に対して複数のインポーターを用意するか、複数回で言語設定を行います

各言語に応じて複数回を分けてデータインポートする必要があります

  • 言語ごとにデータインポートする必要があります
    • 一括して同一フィールドに複数の言語インポートができません
  • 具体的なステップはビデオを参考してください
Embedded thumbnail for 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
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
system_management

モジュール(Localization Update)でサイトの多言語ユーザーインターフェースを導入します

  • 背景:Drupal7.54、Localization Update7.x-2.1
  • モジュール(Localization Update)をインストール/有効化します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)で「言語を追加」リンクをクリックすると、必要なユーザーインターフェース言語の導入ができます

管理者がサイト単位でユーザーインターフェース言語の一括設定(ほかの言語を使用しない)

  • Druaplを初期インストール(英語バージョンの場合)後に、別の言語(例:日本語)を導入し、その言語のみを使用します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)でのデフォルト値を選択すればよいです
    サイト単位の言語設定
  • サイト管理者が選択してから、一般ユーザーの選択はできません。

複数の言語をユーザーインターフェースとして利用する場合に、URL/ブラウザ/セッション/ユーザーの言語設定などよりサイトの言語自動判別ができます

  • 複数のユーザーインターフェース言語がある場合、どれを使用するかは決める必要があります
  • 言語判別設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語 » 判別と選択)言語利用の判別条件を設定します
    言語の判別設定と判別順序設定
    • URL: URLから言語を判定する(パス接頭語かドメイン)
    • セッション: 言語をrequest/sessionパラメーターから判定する。
    • ブラウザ: ブラウザーの言語設定から言語を判定する。
    • ユーザー: ユーザープロフィールで設定した言語に従う。
    • デフォルト: サイトのデフォルト言語を使う
  • 上記判別方法のい任意、または全部の選択はできます
  • 判別の優先順のソートができます
  • URLで言語判断設定した場合、URLのドメイン/パス接頭語の設定が必要となります
    言語判別のURLドメイン/パス接頭語設定
    • 「言語のドメイン」と「言語コードのパス接頭語」のどちらかの設定(両方の設定はできない)
    • 設定された方式で言語を判別となります
    • 説明の言葉通りに、一度設定したら、変更時にすでに存在しているパスが使用できなくなりますので、ご注意ください(変更後にすべてのパスを再構築などの作業が必要)
      言語判定URLの設定
Embedded thumbnail for Drupalの多言語ユーザーインターフェースの導入と設定
drupal
video
feeds

やりたいこと:Feedsで多言語コンテンツデータのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Feeds:Enity Translation7.x-1.0
  • モジュール:Entity Translationで多言語サイトを構築しています
  • 複数の言語コンテンツをデータ移行したいです
  • いろいろ調べてみてた、同一フィールドに多言語インポート方法が少なく、難しそうです

解決方法:モジュール(Feeds:Entity Translation)で多言語コンテンツデータの移行

  • 多言語コンテンツデータ移行をサポートするモジュールがあまり多くないようで、一つモジュール(Feeds: Entity Translation)を見つけました
  • モジュール(Feeds: Entity Translation)をインストール/有効化したら、Feedsのデータマッピング管理画面に、多言語有効なフィールドの各言語対応ターゲットが現れます
    多言語コンテンツデータ移行にサポートするFeeds: Entity Translation
  • 同一フィールドの各言語対応ターゲットを選択して多言語コンテンツインポートができました
Embedded thumbnail for DrupalのFeedsで多言語コンテンツデータのインポート
drupal
feeds
module usage

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

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

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

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

やりたいこと:モジュール(Feeds)でのデータマッピング時にPHPコードでフィールド値を加工する

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Tamper7.x-1.1、Feeds Tamper PHP7.x1.2
  • Feedsデータインポートの基本は「 Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考してください
  • データマッピングに、各インポートフィールドの値を加工するため、Feeds Tamperモジュールが良く利用します
  • この中に、特殊なフィールド値加工(例:既存のデータを取得するなど)のためFeeds Tamper PHPを利用して、PHPスクリプトの実行ができます
  • Feeds Tamper PHPでインポートデータの扱い、以下のパラメーターで、任意のフィールドの値の利用ができます
    • $field: 渡されたフィールドの値
    • $item['フィールド名']: インポート元で定義していたフィールド名でその値を取得する
      Drupalのモジュール(Feeds)のデータマッピング時にFeedsTamperでのPHPコードより各フィールドの値を加工します
  • 任意のフィールド(例:body)で他のフィールドの値(例:title)の取得することができます

注意点:PHPコード実行のセキュリティ問題とパフォーマンスへの影響

  • PHPコードを実行するには、eval()関数で行うため、任意のPHPコードの実行が可能となります
  • 特にインポートが公開の場合、PHPコード実行のセキュリティ問題を注意深く対応すべきです
  • また、データ取得したり、多くループをしたりして、パフォーマンスへの影響が考えるべきです
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

問題点:モジュール(Feeds)でデータインポート時に間違って設定があった場合インポートエラーなどが発生

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Import Previews7.x-1.x
  • 複雑なデータマッピング設定(例:Feeds Tamperなどで)時に、間違いやすくなります。その場合実際のデータをインポートで確認する必要があります
  • 間違った設定より、データインポートエラーなどが発生します

解決:モジュール(Feeds Import Preview)でインポート設定を確認します

  • モジュール(Feeds Import Preview)でデータインポート直前のステップまでに進んで、実際のインポート設定の確認ができます
    Drupalのモジュール(Feeds Import Preview)でデータインポート設定の確認ができます
  • 実際にソースから各フィールドの値が表示されています。
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
feeds
module usage

やりたいこと:コンテンツ(例:記事)のbodyフィールドの多言語データのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Entity Translation7.x-1.0
  • コンテンツのbody以外のフィールドがEntity Translation有効であれば、Feedsのデータマッピングで複数の言語のターゲットが現れます
    • drupalのfeedsで多言語コンテンツデータのインポート
  • BodyにEntity Translation有効の場合にマッピングでのターゲットが一つしかありません
  • 複数回でそれぞれの言語データをインポートします
    DrupalのFeedsで多言語bodyデータのインポート

FeedsのNode Processor設定画面でコンテンツ(例:記事)の初期言語を設定

  • コンテンツの元言語を設定する必要があります(もし、設定しなければ多言語の表示に影響しないが、コンテンツの翻訳タグが表示されない)
  • Node Processor設定画面でノートの言語を選択して、データインポート時に設定してくれます(ビデオを参考)

Feedsのマッピング設定画面でbodyのインポート言語設定を行います

  • データマッピング管理画面でbodyフィールドに言語設定があります
    データマッピング管理画面でbodyフィールドの言語設定
  • 複数の言語に対して複数のインポーターを用意するか、複数回で言語設定を行います

各言語に応じて複数回を分けてデータインポートする必要があります

  • 言語ごとにデータインポートする必要があります
    • 一括して同一フィールドに複数の言語インポートができません
  • 具体的なステップはビデオを参考してください
Embedded thumbnail for 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
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
system_management

モジュール(Localization Update)でサイトの多言語ユーザーインターフェースを導入します

  • 背景:Drupal7.54、Localization Update7.x-2.1
  • モジュール(Localization Update)をインストール/有効化します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)で「言語を追加」リンクをクリックすると、必要なユーザーインターフェース言語の導入ができます

管理者がサイト単位でユーザーインターフェース言語の一括設定(ほかの言語を使用しない)

  • Druaplを初期インストール(英語バージョンの場合)後に、別の言語(例:日本語)を導入し、その言語のみを使用します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)でのデフォルト値を選択すればよいです
    サイト単位の言語設定
  • サイト管理者が選択してから、一般ユーザーの選択はできません。

複数の言語をユーザーインターフェースとして利用する場合に、URL/ブラウザ/セッション/ユーザーの言語設定などよりサイトの言語自動判別ができます

  • 複数のユーザーインターフェース言語がある場合、どれを使用するかは決める必要があります
  • 言語判別設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語 » 判別と選択)言語利用の判別条件を設定します
    言語の判別設定と判別順序設定
    • URL: URLから言語を判定する(パス接頭語かドメイン)
    • セッション: 言語をrequest/sessionパラメーターから判定する。
    • ブラウザ: ブラウザーの言語設定から言語を判定する。
    • ユーザー: ユーザープロフィールで設定した言語に従う。
    • デフォルト: サイトのデフォルト言語を使う
  • 上記判別方法のい任意、または全部の選択はできます
  • 判別の優先順のソートができます
  • URLで言語判断設定した場合、URLのドメイン/パス接頭語の設定が必要となります
    言語判別のURLドメイン/パス接頭語設定
    • 「言語のドメイン」と「言語コードのパス接頭語」のどちらかの設定(両方の設定はできない)
    • 設定された方式で言語を判別となります
    • 説明の言葉通りに、一度設定したら、変更時にすでに存在しているパスが使用できなくなりますので、ご注意ください(変更後にすべてのパスを再構築などの作業が必要)
      言語判定URLの設定
Embedded thumbnail for Drupalの多言語ユーザーインターフェースの導入と設定
drupal
video
feeds

やりたいこと:Feedsで多言語コンテンツデータのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Feeds:Enity Translation7.x-1.0
  • モジュール:Entity Translationで多言語サイトを構築しています
  • 複数の言語コンテンツをデータ移行したいです
  • いろいろ調べてみてた、同一フィールドに多言語インポート方法が少なく、難しそうです

解決方法:モジュール(Feeds:Entity Translation)で多言語コンテンツデータの移行

  • 多言語コンテンツデータ移行をサポートするモジュールがあまり多くないようで、一つモジュール(Feeds: Entity Translation)を見つけました
  • モジュール(Feeds: Entity Translation)をインストール/有効化したら、Feedsのデータマッピング管理画面に、多言語有効なフィールドの各言語対応ターゲットが現れます
    多言語コンテンツデータ移行にサポートするFeeds: Entity Translation
  • 同一フィールドの各言語対応ターゲットを選択して多言語コンテンツインポートができました
Embedded thumbnail for DrupalのFeedsで多言語コンテンツデータのインポート
drupal
feeds
module usage

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

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

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

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

やりたいこと:モジュール(Feeds)でのデータマッピング時にPHPコードでフィールド値を加工する

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Tamper7.x-1.1、Feeds Tamper PHP7.x1.2
  • Feedsデータインポートの基本は「 Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考してください
  • データマッピングに、各インポートフィールドの値を加工するため、Feeds Tamperモジュールが良く利用します
  • この中に、特殊なフィールド値加工(例:既存のデータを取得するなど)のためFeeds Tamper PHPを利用して、PHPスクリプトの実行ができます
  • Feeds Tamper PHPでインポートデータの扱い、以下のパラメーターで、任意のフィールドの値の利用ができます
    • $field: 渡されたフィールドの値
    • $item['フィールド名']: インポート元で定義していたフィールド名でその値を取得する
      Drupalのモジュール(Feeds)のデータマッピング時にFeedsTamperでのPHPコードより各フィールドの値を加工します
  • 任意のフィールド(例:body)で他のフィールドの値(例:title)の取得することができます

注意点:PHPコード実行のセキュリティ問題とパフォーマンスへの影響

  • PHPコードを実行するには、eval()関数で行うため、任意のPHPコードの実行が可能となります
  • 特にインポートが公開の場合、PHPコード実行のセキュリティ問題を注意深く対応すべきです
  • また、データ取得したり、多くループをしたりして、パフォーマンスへの影響が考えるべきです
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

問題点:モジュール(Feeds)でデータインポート時に間違って設定があった場合インポートエラーなどが発生

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Import Previews7.x-1.x
  • 複雑なデータマッピング設定(例:Feeds Tamperなどで)時に、間違いやすくなります。その場合実際のデータをインポートで確認する必要があります
  • 間違った設定より、データインポートエラーなどが発生します

解決:モジュール(Feeds Import Preview)でインポート設定を確認します

  • モジュール(Feeds Import Preview)でデータインポート直前のステップまでに進んで、実際のインポート設定の確認ができます
    Drupalのモジュール(Feeds Import Preview)でデータインポート設定の確認ができます
  • 実際にソースから各フィールドの値が表示されています。
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
feeds
module usage

やりたいこと:コンテンツ(例:記事)のbodyフィールドの多言語データのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Entity Translation7.x-1.0
  • コンテンツのbody以外のフィールドがEntity Translation有効であれば、Feedsのデータマッピングで複数の言語のターゲットが現れます
    • drupalのfeedsで多言語コンテンツデータのインポート
  • BodyにEntity Translation有効の場合にマッピングでのターゲットが一つしかありません
  • 複数回でそれぞれの言語データをインポートします
    DrupalのFeedsで多言語bodyデータのインポート

FeedsのNode Processor設定画面でコンテンツ(例:記事)の初期言語を設定

  • コンテンツの元言語を設定する必要があります(もし、設定しなければ多言語の表示に影響しないが、コンテンツの翻訳タグが表示されない)
  • Node Processor設定画面でノートの言語を選択して、データインポート時に設定してくれます(ビデオを参考)

Feedsのマッピング設定画面でbodyのインポート言語設定を行います

  • データマッピング管理画面でbodyフィールドに言語設定があります
    データマッピング管理画面でbodyフィールドの言語設定
  • 複数の言語に対して複数のインポーターを用意するか、複数回で言語設定を行います

各言語に応じて複数回を分けてデータインポートする必要があります

  • 言語ごとにデータインポートする必要があります
    • 一括して同一フィールドに複数の言語インポートができません
  • 具体的なステップはビデオを参考してください
Embedded thumbnail for 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
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
system_management

モジュール(Localization Update)でサイトの多言語ユーザーインターフェースを導入します

  • 背景:Drupal7.54、Localization Update7.x-2.1
  • モジュール(Localization Update)をインストール/有効化します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)で「言語を追加」リンクをクリックすると、必要なユーザーインターフェース言語の導入ができます

管理者がサイト単位でユーザーインターフェース言語の一括設定(ほかの言語を使用しない)

  • Druaplを初期インストール(英語バージョンの場合)後に、別の言語(例:日本語)を導入し、その言語のみを使用します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)でのデフォルト値を選択すればよいです
    サイト単位の言語設定
  • サイト管理者が選択してから、一般ユーザーの選択はできません。

複数の言語をユーザーインターフェースとして利用する場合に、URL/ブラウザ/セッション/ユーザーの言語設定などよりサイトの言語自動判別ができます

  • 複数のユーザーインターフェース言語がある場合、どれを使用するかは決める必要があります
  • 言語判別設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語 » 判別と選択)言語利用の判別条件を設定します
    言語の判別設定と判別順序設定
    • URL: URLから言語を判定する(パス接頭語かドメイン)
    • セッション: 言語をrequest/sessionパラメーターから判定する。
    • ブラウザ: ブラウザーの言語設定から言語を判定する。
    • ユーザー: ユーザープロフィールで設定した言語に従う。
    • デフォルト: サイトのデフォルト言語を使う
  • 上記判別方法のい任意、または全部の選択はできます
  • 判別の優先順のソートができます
  • URLで言語判断設定した場合、URLのドメイン/パス接頭語の設定が必要となります
    言語判別のURLドメイン/パス接頭語設定
    • 「言語のドメイン」と「言語コードのパス接頭語」のどちらかの設定(両方の設定はできない)
    • 設定された方式で言語を判別となります
    • 説明の言葉通りに、一度設定したら、変更時にすでに存在しているパスが使用できなくなりますので、ご注意ください(変更後にすべてのパスを再構築などの作業が必要)
      言語判定URLの設定
Embedded thumbnail for Drupalの多言語ユーザーインターフェースの導入と設定
drupal
video
feeds

やりたいこと:Feedsで多言語コンテンツデータのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Feeds:Enity Translation7.x-1.0
  • モジュール:Entity Translationで多言語サイトを構築しています
  • 複数の言語コンテンツをデータ移行したいです
  • いろいろ調べてみてた、同一フィールドに多言語インポート方法が少なく、難しそうです

解決方法:モジュール(Feeds:Entity Translation)で多言語コンテンツデータの移行

  • 多言語コンテンツデータ移行をサポートするモジュールがあまり多くないようで、一つモジュール(Feeds: Entity Translation)を見つけました
  • モジュール(Feeds: Entity Translation)をインストール/有効化したら、Feedsのデータマッピング管理画面に、多言語有効なフィールドの各言語対応ターゲットが現れます
    多言語コンテンツデータ移行にサポートするFeeds: Entity Translation
  • 同一フィールドの各言語対応ターゲットを選択して多言語コンテンツインポートができました
Embedded thumbnail for DrupalのFeedsで多言語コンテンツデータのインポート
drupal
feeds
module usage

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

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

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

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

やりたいこと:モジュール(Feeds)でのデータマッピング時にPHPコードでフィールド値を加工する

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Tamper7.x-1.1、Feeds Tamper PHP7.x1.2
  • Feedsデータインポートの基本は「 Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考してください
  • データマッピングに、各インポートフィールドの値を加工するため、Feeds Tamperモジュールが良く利用します
  • この中に、特殊なフィールド値加工(例:既存のデータを取得するなど)のためFeeds Tamper PHPを利用して、PHPスクリプトの実行ができます
  • Feeds Tamper PHPでインポートデータの扱い、以下のパラメーターで、任意のフィールドの値の利用ができます
    • $field: 渡されたフィールドの値
    • $item['フィールド名']: インポート元で定義していたフィールド名でその値を取得する
      Drupalのモジュール(Feeds)のデータマッピング時にFeedsTamperでのPHPコードより各フィールドの値を加工します
  • 任意のフィールド(例:body)で他のフィールドの値(例:title)の取得することができます

注意点:PHPコード実行のセキュリティ問題とパフォーマンスへの影響

  • PHPコードを実行するには、eval()関数で行うため、任意のPHPコードの実行が可能となります
  • 特にインポートが公開の場合、PHPコード実行のセキュリティ問題を注意深く対応すべきです
  • また、データ取得したり、多くループをしたりして、パフォーマンスへの影響が考えるべきです
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

問題点:モジュール(Feeds)でデータインポート時に間違って設定があった場合インポートエラーなどが発生

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Import Previews7.x-1.x
  • 複雑なデータマッピング設定(例:Feeds Tamperなどで)時に、間違いやすくなります。その場合実際のデータをインポートで確認する必要があります
  • 間違った設定より、データインポートエラーなどが発生します

解決:モジュール(Feeds Import Preview)でインポート設定を確認します

  • モジュール(Feeds Import Preview)でデータインポート直前のステップまでに進んで、実際のインポート設定の確認ができます
    Drupalのモジュール(Feeds Import Preview)でデータインポート設定の確認ができます
  • 実際にソースから各フィールドの値が表示されています。
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
feeds
module usage

やりたいこと:コンテンツ(例:記事)のbodyフィールドの多言語データのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Entity Translation7.x-1.0
  • コンテンツのbody以外のフィールドがEntity Translation有効であれば、Feedsのデータマッピングで複数の言語のターゲットが現れます
    • drupalのfeedsで多言語コンテンツデータのインポート
  • BodyにEntity Translation有効の場合にマッピングでのターゲットが一つしかありません
  • 複数回でそれぞれの言語データをインポートします
    DrupalのFeedsで多言語bodyデータのインポート

FeedsのNode Processor設定画面でコンテンツ(例:記事)の初期言語を設定

  • コンテンツの元言語を設定する必要があります(もし、設定しなければ多言語の表示に影響しないが、コンテンツの翻訳タグが表示されない)
  • Node Processor設定画面でノートの言語を選択して、データインポート時に設定してくれます(ビデオを参考)

Feedsのマッピング設定画面でbodyのインポート言語設定を行います

  • データマッピング管理画面でbodyフィールドに言語設定があります
    データマッピング管理画面でbodyフィールドの言語設定
  • 複数の言語に対して複数のインポーターを用意するか、複数回で言語設定を行います

各言語に応じて複数回を分けてデータインポートする必要があります

  • 言語ごとにデータインポートする必要があります
    • 一括して同一フィールドに複数の言語インポートができません
  • 具体的なステップはビデオを参考してください
Embedded thumbnail for 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
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
system_management

モジュール(Localization Update)でサイトの多言語ユーザーインターフェースを導入します

  • 背景:Drupal7.54、Localization Update7.x-2.1
  • モジュール(Localization Update)をインストール/有効化します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)で「言語を追加」リンクをクリックすると、必要なユーザーインターフェース言語の導入ができます

管理者がサイト単位でユーザーインターフェース言語の一括設定(ほかの言語を使用しない)

  • Druaplを初期インストール(英語バージョンの場合)後に、別の言語(例:日本語)を導入し、その言語のみを使用します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)でのデフォルト値を選択すればよいです
    サイト単位の言語設定
  • サイト管理者が選択してから、一般ユーザーの選択はできません。

複数の言語をユーザーインターフェースとして利用する場合に、URL/ブラウザ/セッション/ユーザーの言語設定などよりサイトの言語自動判別ができます

  • 複数のユーザーインターフェース言語がある場合、どれを使用するかは決める必要があります
  • 言語判別設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語 » 判別と選択)言語利用の判別条件を設定します
    言語の判別設定と判別順序設定
    • URL: URLから言語を判定する(パス接頭語かドメイン)
    • セッション: 言語をrequest/sessionパラメーターから判定する。
    • ブラウザ: ブラウザーの言語設定から言語を判定する。
    • ユーザー: ユーザープロフィールで設定した言語に従う。
    • デフォルト: サイトのデフォルト言語を使う
  • 上記判別方法のい任意、または全部の選択はできます
  • 判別の優先順のソートができます
  • URLで言語判断設定した場合、URLのドメイン/パス接頭語の設定が必要となります
    言語判別のURLドメイン/パス接頭語設定
    • 「言語のドメイン」と「言語コードのパス接頭語」のどちらかの設定(両方の設定はできない)
    • 設定された方式で言語を判別となります
    • 説明の言葉通りに、一度設定したら、変更時にすでに存在しているパスが使用できなくなりますので、ご注意ください(変更後にすべてのパスを再構築などの作業が必要)
      言語判定URLの設定
Embedded thumbnail for Drupalの多言語ユーザーインターフェースの導入と設定
drupal
video
feeds

やりたいこと:Feedsで多言語コンテンツデータのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Feeds:Enity Translation7.x-1.0
  • モジュール:Entity Translationで多言語サイトを構築しています
  • 複数の言語コンテンツをデータ移行したいです
  • いろいろ調べてみてた、同一フィールドに多言語インポート方法が少なく、難しそうです

解決方法:モジュール(Feeds:Entity Translation)で多言語コンテンツデータの移行

  • 多言語コンテンツデータ移行をサポートするモジュールがあまり多くないようで、一つモジュール(Feeds: Entity Translation)を見つけました
  • モジュール(Feeds: Entity Translation)をインストール/有効化したら、Feedsのデータマッピング管理画面に、多言語有効なフィールドの各言語対応ターゲットが現れます
    多言語コンテンツデータ移行にサポートするFeeds: Entity Translation
  • 同一フィールドの各言語対応ターゲットを選択して多言語コンテンツインポートができました
Embedded thumbnail for DrupalのFeedsで多言語コンテンツデータのインポート
drupal
feeds
module usage

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

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

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

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

やりたいこと:モジュール(Feeds)でのデータマッピング時にPHPコードでフィールド値を加工する

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Tamper7.x-1.1、Feeds Tamper PHP7.x1.2
  • Feedsデータインポートの基本は「 Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考してください
  • データマッピングに、各インポートフィールドの値を加工するため、Feeds Tamperモジュールが良く利用します
  • この中に、特殊なフィールド値加工(例:既存のデータを取得するなど)のためFeeds Tamper PHPを利用して、PHPスクリプトの実行ができます
  • Feeds Tamper PHPでインポートデータの扱い、以下のパラメーターで、任意のフィールドの値の利用ができます
    • $field: 渡されたフィールドの値
    • $item['フィールド名']: インポート元で定義していたフィールド名でその値を取得する
      Drupalのモジュール(Feeds)のデータマッピング時にFeedsTamperでのPHPコードより各フィールドの値を加工します
  • 任意のフィールド(例:body)で他のフィールドの値(例:title)の取得することができます

注意点:PHPコード実行のセキュリティ問題とパフォーマンスへの影響

  • PHPコードを実行するには、eval()関数で行うため、任意のPHPコードの実行が可能となります
  • 特にインポートが公開の場合、PHPコード実行のセキュリティ問題を注意深く対応すべきです
  • また、データ取得したり、多くループをしたりして、パフォーマンスへの影響が考えるべきです
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

問題点:モジュール(Feeds)でデータインポート時に間違って設定があった場合インポートエラーなどが発生

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Import Previews7.x-1.x
  • 複雑なデータマッピング設定(例:Feeds Tamperなどで)時に、間違いやすくなります。その場合実際のデータをインポートで確認する必要があります
  • 間違った設定より、データインポートエラーなどが発生します

解決:モジュール(Feeds Import Preview)でインポート設定を確認します

  • モジュール(Feeds Import Preview)でデータインポート直前のステップまでに進んで、実際のインポート設定の確認ができます
    Drupalのモジュール(Feeds Import Preview)でデータインポート設定の確認ができます
  • 実際にソースから各フィールドの値が表示されています。
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
feeds
module usage

やりたいこと:コンテンツ(例:記事)のbodyフィールドの多言語データのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Entity Translation7.x-1.0
  • コンテンツのbody以外のフィールドがEntity Translation有効であれば、Feedsのデータマッピングで複数の言語のターゲットが現れます
    • drupalのfeedsで多言語コンテンツデータのインポート
  • BodyにEntity Translation有効の場合にマッピングでのターゲットが一つしかありません
  • 複数回でそれぞれの言語データをインポートします
    DrupalのFeedsで多言語bodyデータのインポート

FeedsのNode Processor設定画面でコンテンツ(例:記事)の初期言語を設定

  • コンテンツの元言語を設定する必要があります(もし、設定しなければ多言語の表示に影響しないが、コンテンツの翻訳タグが表示されない)
  • Node Processor設定画面でノートの言語を選択して、データインポート時に設定してくれます(ビデオを参考)

Feedsのマッピング設定画面でbodyのインポート言語設定を行います

  • データマッピング管理画面でbodyフィールドに言語設定があります
    データマッピング管理画面でbodyフィールドの言語設定
  • 複数の言語に対して複数のインポーターを用意するか、複数回で言語設定を行います

各言語に応じて複数回を分けてデータインポートする必要があります

  • 言語ごとにデータインポートする必要があります
    • 一括して同一フィールドに複数の言語インポートができません
  • 具体的なステップはビデオを参考してください
Embedded thumbnail for 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
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
system_management

モジュール(Localization Update)でサイトの多言語ユーザーインターフェースを導入します

  • 背景:Drupal7.54、Localization Update7.x-2.1
  • モジュール(Localization Update)をインストール/有効化します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)で「言語を追加」リンクをクリックすると、必要なユーザーインターフェース言語の導入ができます

管理者がサイト単位でユーザーインターフェース言語の一括設定(ほかの言語を使用しない)

  • Druaplを初期インストール(英語バージョンの場合)後に、別の言語(例:日本語)を導入し、その言語のみを使用します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)でのデフォルト値を選択すればよいです
    サイト単位の言語設定
  • サイト管理者が選択してから、一般ユーザーの選択はできません。

複数の言語をユーザーインターフェースとして利用する場合に、URL/ブラウザ/セッション/ユーザーの言語設定などよりサイトの言語自動判別ができます

  • 複数のユーザーインターフェース言語がある場合、どれを使用するかは決める必要があります
  • 言語判別設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語 » 判別と選択)言語利用の判別条件を設定します
    言語の判別設定と判別順序設定
    • URL: URLから言語を判定する(パス接頭語かドメイン)
    • セッション: 言語をrequest/sessionパラメーターから判定する。
    • ブラウザ: ブラウザーの言語設定から言語を判定する。
    • ユーザー: ユーザープロフィールで設定した言語に従う。
    • デフォルト: サイトのデフォルト言語を使う
  • 上記判別方法のい任意、または全部の選択はできます
  • 判別の優先順のソートができます
  • URLで言語判断設定した場合、URLのドメイン/パス接頭語の設定が必要となります
    言語判別のURLドメイン/パス接頭語設定
    • 「言語のドメイン」と「言語コードのパス接頭語」のどちらかの設定(両方の設定はできない)
    • 設定された方式で言語を判別となります
    • 説明の言葉通りに、一度設定したら、変更時にすでに存在しているパスが使用できなくなりますので、ご注意ください(変更後にすべてのパスを再構築などの作業が必要)
      言語判定URLの設定
Embedded thumbnail for Drupalの多言語ユーザーインターフェースの導入と設定
drupal
video
feeds

やりたいこと:Feedsで多言語コンテンツデータのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Feeds:Enity Translation7.x-1.0
  • モジュール:Entity Translationで多言語サイトを構築しています
  • 複数の言語コンテンツをデータ移行したいです
  • いろいろ調べてみてた、同一フィールドに多言語インポート方法が少なく、難しそうです

解決方法:モジュール(Feeds:Entity Translation)で多言語コンテンツデータの移行

  • 多言語コンテンツデータ移行をサポートするモジュールがあまり多くないようで、一つモジュール(Feeds: Entity Translation)を見つけました
  • モジュール(Feeds: Entity Translation)をインストール/有効化したら、Feedsのデータマッピング管理画面に、多言語有効なフィールドの各言語対応ターゲットが現れます
    多言語コンテンツデータ移行にサポートするFeeds: Entity Translation
  • 同一フィールドの各言語対応ターゲットを選択して多言語コンテンツインポートができました
Embedded thumbnail for DrupalのFeedsで多言語コンテンツデータのインポート
drupal
feeds
module usage

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

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

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

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

やりたいこと:モジュール(Feeds)でのデータマッピング時にPHPコードでフィールド値を加工する

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Tamper7.x-1.1、Feeds Tamper PHP7.x1.2
  • Feedsデータインポートの基本は「 Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考してください
  • データマッピングに、各インポートフィールドの値を加工するため、Feeds Tamperモジュールが良く利用します
  • この中に、特殊なフィールド値加工(例:既存のデータを取得するなど)のためFeeds Tamper PHPを利用して、PHPスクリプトの実行ができます
  • Feeds Tamper PHPでインポートデータの扱い、以下のパラメーターで、任意のフィールドの値の利用ができます
    • $field: 渡されたフィールドの値
    • $item['フィールド名']: インポート元で定義していたフィールド名でその値を取得する
      Drupalのモジュール(Feeds)のデータマッピング時にFeedsTamperでのPHPコードより各フィールドの値を加工します
  • 任意のフィールド(例:body)で他のフィールドの値(例:title)の取得することができます

注意点:PHPコード実行のセキュリティ問題とパフォーマンスへの影響

  • PHPコードを実行するには、eval()関数で行うため、任意のPHPコードの実行が可能となります
  • 特にインポートが公開の場合、PHPコード実行のセキュリティ問題を注意深く対応すべきです
  • また、データ取得したり、多くループをしたりして、パフォーマンスへの影響が考えるべきです
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

問題点:モジュール(Feeds)でデータインポート時に間違って設定があった場合インポートエラーなどが発生

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Import Previews7.x-1.x
  • 複雑なデータマッピング設定(例:Feeds Tamperなどで)時に、間違いやすくなります。その場合実際のデータをインポートで確認する必要があります
  • 間違った設定より、データインポートエラーなどが発生します

解決:モジュール(Feeds Import Preview)でインポート設定を確認します

  • モジュール(Feeds Import Preview)でデータインポート直前のステップまでに進んで、実際のインポート設定の確認ができます
    Drupalのモジュール(Feeds Import Preview)でデータインポート設定の確認ができます
  • 実際にソースから各フィールドの値が表示されています。
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
feeds
module usage

やりたいこと:コンテンツ(例:記事)のbodyフィールドの多言語データのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Entity Translation7.x-1.0
  • コンテンツのbody以外のフィールドがEntity Translation有効であれば、Feedsのデータマッピングで複数の言語のターゲットが現れます
    • drupalのfeedsで多言語コンテンツデータのインポート
  • BodyにEntity Translation有効の場合にマッピングでのターゲットが一つしかありません
  • 複数回でそれぞれの言語データをインポートします
    DrupalのFeedsで多言語bodyデータのインポート

FeedsのNode Processor設定画面でコンテンツ(例:記事)の初期言語を設定

  • コンテンツの元言語を設定する必要があります(もし、設定しなければ多言語の表示に影響しないが、コンテンツの翻訳タグが表示されない)
  • Node Processor設定画面でノートの言語を選択して、データインポート時に設定してくれます(ビデオを参考)

Feedsのマッピング設定画面でbodyのインポート言語設定を行います

  • データマッピング管理画面でbodyフィールドに言語設定があります
    データマッピング管理画面でbodyフィールドの言語設定
  • 複数の言語に対して複数のインポーターを用意するか、複数回で言語設定を行います

各言語に応じて複数回を分けてデータインポートする必要があります

  • 言語ごとにデータインポートする必要があります
    • 一括して同一フィールドに複数の言語インポートができません
  • 具体的なステップはビデオを参考してください
Embedded thumbnail for 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
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
system_management

モジュール(Localization Update)でサイトの多言語ユーザーインターフェースを導入します

  • 背景:Drupal7.54、Localization Update7.x-2.1
  • モジュール(Localization Update)をインストール/有効化します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)で「言語を追加」リンクをクリックすると、必要なユーザーインターフェース言語の導入ができます

管理者がサイト単位でユーザーインターフェース言語の一括設定(ほかの言語を使用しない)

  • Druaplを初期インストール(英語バージョンの場合)後に、別の言語(例:日本語)を導入し、その言語のみを使用します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)でのデフォルト値を選択すればよいです
    サイト単位の言語設定
  • サイト管理者が選択してから、一般ユーザーの選択はできません。

複数の言語をユーザーインターフェースとして利用する場合に、URL/ブラウザ/セッション/ユーザーの言語設定などよりサイトの言語自動判別ができます

  • 複数のユーザーインターフェース言語がある場合、どれを使用するかは決める必要があります
  • 言語判別設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語 » 判別と選択)言語利用の判別条件を設定します
    言語の判別設定と判別順序設定
    • URL: URLから言語を判定する(パス接頭語かドメイン)
    • セッション: 言語をrequest/sessionパラメーターから判定する。
    • ブラウザ: ブラウザーの言語設定から言語を判定する。
    • ユーザー: ユーザープロフィールで設定した言語に従う。
    • デフォルト: サイトのデフォルト言語を使う
  • 上記判別方法のい任意、または全部の選択はできます
  • 判別の優先順のソートができます
  • URLで言語判断設定した場合、URLのドメイン/パス接頭語の設定が必要となります
    言語判別のURLドメイン/パス接頭語設定
    • 「言語のドメイン」と「言語コードのパス接頭語」のどちらかの設定(両方の設定はできない)
    • 設定された方式で言語を判別となります
    • 説明の言葉通りに、一度設定したら、変更時にすでに存在しているパスが使用できなくなりますので、ご注意ください(変更後にすべてのパスを再構築などの作業が必要)
      言語判定URLの設定
Embedded thumbnail for Drupalの多言語ユーザーインターフェースの導入と設定
drupal
video
feeds

やりたいこと:Feedsで多言語コンテンツデータのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Feeds:Enity Translation7.x-1.0
  • モジュール:Entity Translationで多言語サイトを構築しています
  • 複数の言語コンテンツをデータ移行したいです
  • いろいろ調べてみてた、同一フィールドに多言語インポート方法が少なく、難しそうです

解決方法:モジュール(Feeds:Entity Translation)で多言語コンテンツデータの移行

  • 多言語コンテンツデータ移行をサポートするモジュールがあまり多くないようで、一つモジュール(Feeds: Entity Translation)を見つけました
  • モジュール(Feeds: Entity Translation)をインストール/有効化したら、Feedsのデータマッピング管理画面に、多言語有効なフィールドの各言語対応ターゲットが現れます
    多言語コンテンツデータ移行にサポートするFeeds: Entity Translation
  • 同一フィールドの各言語対応ターゲットを選択して多言語コンテンツインポートができました
Embedded thumbnail for DrupalのFeedsで多言語コンテンツデータのインポート
drupal
feeds
module usage

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

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

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

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

やりたいこと:モジュール(Feeds)でのデータマッピング時にPHPコードでフィールド値を加工する

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Tamper7.x-1.1、Feeds Tamper PHP7.x1.2
  • Feedsデータインポートの基本は「 Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考してください
  • データマッピングに、各インポートフィールドの値を加工するため、Feeds Tamperモジュールが良く利用します
  • この中に、特殊なフィールド値加工(例:既存のデータを取得するなど)のためFeeds Tamper PHPを利用して、PHPスクリプトの実行ができます
  • Feeds Tamper PHPでインポートデータの扱い、以下のパラメーターで、任意のフィールドの値の利用ができます
    • $field: 渡されたフィールドの値
    • $item['フィールド名']: インポート元で定義していたフィールド名でその値を取得する
      Drupalのモジュール(Feeds)のデータマッピング時にFeedsTamperでのPHPコードより各フィールドの値を加工します
  • 任意のフィールド(例:body)で他のフィールドの値(例:title)の取得することができます

注意点:PHPコード実行のセキュリティ問題とパフォーマンスへの影響

  • PHPコードを実行するには、eval()関数で行うため、任意のPHPコードの実行が可能となります
  • 特にインポートが公開の場合、PHPコード実行のセキュリティ問題を注意深く対応すべきです
  • また、データ取得したり、多くループをしたりして、パフォーマンスへの影響が考えるべきです
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

問題点:モジュール(Feeds)でデータインポート時に間違って設定があった場合インポートエラーなどが発生

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Import Previews7.x-1.x
  • 複雑なデータマッピング設定(例:Feeds Tamperなどで)時に、間違いやすくなります。その場合実際のデータをインポートで確認する必要があります
  • 間違った設定より、データインポートエラーなどが発生します

解決:モジュール(Feeds Import Preview)でインポート設定を確認します

  • モジュール(Feeds Import Preview)でデータインポート直前のステップまでに進んで、実際のインポート設定の確認ができます
    Drupalのモジュール(Feeds Import Preview)でデータインポート設定の確認ができます
  • 実際にソースから各フィールドの値が表示されています。
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
feeds
module usage

やりたいこと:コンテンツ(例:記事)のbodyフィールドの多言語データのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Entity Translation7.x-1.0
  • コンテンツのbody以外のフィールドがEntity Translation有効であれば、Feedsのデータマッピングで複数の言語のターゲットが現れます
    • drupalのfeedsで多言語コンテンツデータのインポート
  • BodyにEntity Translation有効の場合にマッピングでのターゲットが一つしかありません
  • 複数回でそれぞれの言語データをインポートします
    DrupalのFeedsで多言語bodyデータのインポート

FeedsのNode Processor設定画面でコンテンツ(例:記事)の初期言語を設定

  • コンテンツの元言語を設定する必要があります(もし、設定しなければ多言語の表示に影響しないが、コンテンツの翻訳タグが表示されない)
  • Node Processor設定画面でノートの言語を選択して、データインポート時に設定してくれます(ビデオを参考)

Feedsのマッピング設定画面でbodyのインポート言語設定を行います

  • データマッピング管理画面でbodyフィールドに言語設定があります
    データマッピング管理画面でbodyフィールドの言語設定
  • 複数の言語に対して複数のインポーターを用意するか、複数回で言語設定を行います

各言語に応じて複数回を分けてデータインポートする必要があります

  • 言語ごとにデータインポートする必要があります
    • 一括して同一フィールドに複数の言語インポートができません
  • 具体的なステップはビデオを参考してください
Embedded thumbnail for 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
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
system_management

モジュール(Localization Update)でサイトの多言語ユーザーインターフェースを導入します

  • 背景:Drupal7.54、Localization Update7.x-2.1
  • モジュール(Localization Update)をインストール/有効化します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)で「言語を追加」リンクをクリックすると、必要なユーザーインターフェース言語の導入ができます

管理者がサイト単位でユーザーインターフェース言語の一括設定(ほかの言語を使用しない)

  • Druaplを初期インストール(英語バージョンの場合)後に、別の言語(例:日本語)を導入し、その言語のみを使用します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)でのデフォルト値を選択すればよいです
    サイト単位の言語設定
  • サイト管理者が選択してから、一般ユーザーの選択はできません。

複数の言語をユーザーインターフェースとして利用する場合に、URL/ブラウザ/セッション/ユーザーの言語設定などよりサイトの言語自動判別ができます

  • 複数のユーザーインターフェース言語がある場合、どれを使用するかは決める必要があります
  • 言語判別設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語 » 判別と選択)言語利用の判別条件を設定します
    言語の判別設定と判別順序設定
    • URL: URLから言語を判定する(パス接頭語かドメイン)
    • セッション: 言語をrequest/sessionパラメーターから判定する。
    • ブラウザ: ブラウザーの言語設定から言語を判定する。
    • ユーザー: ユーザープロフィールで設定した言語に従う。
    • デフォルト: サイトのデフォルト言語を使う
  • 上記判別方法のい任意、または全部の選択はできます
  • 判別の優先順のソートができます
  • URLで言語判断設定した場合、URLのドメイン/パス接頭語の設定が必要となります
    言語判別のURLドメイン/パス接頭語設定
    • 「言語のドメイン」と「言語コードのパス接頭語」のどちらかの設定(両方の設定はできない)
    • 設定された方式で言語を判別となります
    • 説明の言葉通りに、一度設定したら、変更時にすでに存在しているパスが使用できなくなりますので、ご注意ください(変更後にすべてのパスを再構築などの作業が必要)
      言語判定URLの設定
Embedded thumbnail for Drupalの多言語ユーザーインターフェースの導入と設定
drupal
video
feeds

やりたいこと:Feedsで多言語コンテンツデータのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Feeds:Enity Translation7.x-1.0
  • モジュール:Entity Translationで多言語サイトを構築しています
  • 複数の言語コンテンツをデータ移行したいです
  • いろいろ調べてみてた、同一フィールドに多言語インポート方法が少なく、難しそうです

解決方法:モジュール(Feeds:Entity Translation)で多言語コンテンツデータの移行

  • 多言語コンテンツデータ移行をサポートするモジュールがあまり多くないようで、一つモジュール(Feeds: Entity Translation)を見つけました
  • モジュール(Feeds: Entity Translation)をインストール/有効化したら、Feedsのデータマッピング管理画面に、多言語有効なフィールドの各言語対応ターゲットが現れます
    多言語コンテンツデータ移行にサポートするFeeds: Entity Translation
  • 同一フィールドの各言語対応ターゲットを選択して多言語コンテンツインポートができました
Embedded thumbnail for DrupalのFeedsで多言語コンテンツデータのインポート
drupal
feeds
module usage

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

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

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

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

やりたいこと:モジュール(Feeds)でのデータマッピング時にPHPコードでフィールド値を加工する

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Tamper7.x-1.1、Feeds Tamper PHP7.x1.2
  • Feedsデータインポートの基本は「 Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考してください
  • データマッピングに、各インポートフィールドの値を加工するため、Feeds Tamperモジュールが良く利用します
  • この中に、特殊なフィールド値加工(例:既存のデータを取得するなど)のためFeeds Tamper PHPを利用して、PHPスクリプトの実行ができます
  • Feeds Tamper PHPでインポートデータの扱い、以下のパラメーターで、任意のフィールドの値の利用ができます
    • $field: 渡されたフィールドの値
    • $item['フィールド名']: インポート元で定義していたフィールド名でその値を取得する
      Drupalのモジュール(Feeds)のデータマッピング時にFeedsTamperでのPHPコードより各フィールドの値を加工します
  • 任意のフィールド(例:body)で他のフィールドの値(例:title)の取得することができます

注意点:PHPコード実行のセキュリティ問題とパフォーマンスへの影響

  • PHPコードを実行するには、eval()関数で行うため、任意のPHPコードの実行が可能となります
  • 特にインポートが公開の場合、PHPコード実行のセキュリティ問題を注意深く対応すべきです
  • また、データ取得したり、多くループをしたりして、パフォーマンスへの影響が考えるべきです
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

問題点:モジュール(Feeds)でデータインポート時に間違って設定があった場合インポートエラーなどが発生

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Import Previews7.x-1.x
  • 複雑なデータマッピング設定(例:Feeds Tamperなどで)時に、間違いやすくなります。その場合実際のデータをインポートで確認する必要があります
  • 間違った設定より、データインポートエラーなどが発生します

解決:モジュール(Feeds Import Preview)でインポート設定を確認します

  • モジュール(Feeds Import Preview)でデータインポート直前のステップまでに進んで、実際のインポート設定の確認ができます
    Drupalのモジュール(Feeds Import Preview)でデータインポート設定の確認ができます
  • 実際にソースから各フィールドの値が表示されています。
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
feeds
module usage

やりたいこと:コンテンツ(例:記事)のbodyフィールドの多言語データのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Entity Translation7.x-1.0
  • コンテンツのbody以外のフィールドがEntity Translation有効であれば、Feedsのデータマッピングで複数の言語のターゲットが現れます
    • drupalのfeedsで多言語コンテンツデータのインポート
  • BodyにEntity Translation有効の場合にマッピングでのターゲットが一つしかありません
  • 複数回でそれぞれの言語データをインポートします
    DrupalのFeedsで多言語bodyデータのインポート

FeedsのNode Processor設定画面でコンテンツ(例:記事)の初期言語を設定

  • コンテンツの元言語を設定する必要があります(もし、設定しなければ多言語の表示に影響しないが、コンテンツの翻訳タグが表示されない)
  • Node Processor設定画面でノートの言語を選択して、データインポート時に設定してくれます(ビデオを参考)

Feedsのマッピング設定画面でbodyのインポート言語設定を行います

  • データマッピング管理画面でbodyフィールドに言語設定があります
    データマッピング管理画面でbodyフィールドの言語設定
  • 複数の言語に対して複数のインポーターを用意するか、複数回で言語設定を行います

各言語に応じて複数回を分けてデータインポートする必要があります

  • 言語ごとにデータインポートする必要があります
    • 一括して同一フィールドに複数の言語インポートができません
  • 具体的なステップはビデオを参考してください
Embedded thumbnail for 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
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
system_management

モジュール(Localization Update)でサイトの多言語ユーザーインターフェースを導入します

  • 背景:Drupal7.54、Localization Update7.x-2.1
  • モジュール(Localization Update)をインストール/有効化します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)で「言語を追加」リンクをクリックすると、必要なユーザーインターフェース言語の導入ができます

管理者がサイト単位でユーザーインターフェース言語の一括設定(ほかの言語を使用しない)

  • Druaplを初期インストール(英語バージョンの場合)後に、別の言語(例:日本語)を導入し、その言語のみを使用します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)でのデフォルト値を選択すればよいです
    サイト単位の言語設定
  • サイト管理者が選択してから、一般ユーザーの選択はできません。

複数の言語をユーザーインターフェースとして利用する場合に、URL/ブラウザ/セッション/ユーザーの言語設定などよりサイトの言語自動判別ができます

  • 複数のユーザーインターフェース言語がある場合、どれを使用するかは決める必要があります
  • 言語判別設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語 » 判別と選択)言語利用の判別条件を設定します
    言語の判別設定と判別順序設定
    • URL: URLから言語を判定する(パス接頭語かドメイン)
    • セッション: 言語をrequest/sessionパラメーターから判定する。
    • ブラウザ: ブラウザーの言語設定から言語を判定する。
    • ユーザー: ユーザープロフィールで設定した言語に従う。
    • デフォルト: サイトのデフォルト言語を使う
  • 上記判別方法のい任意、または全部の選択はできます
  • 判別の優先順のソートができます
  • URLで言語判断設定した場合、URLのドメイン/パス接頭語の設定が必要となります
    言語判別のURLドメイン/パス接頭語設定
    • 「言語のドメイン」と「言語コードのパス接頭語」のどちらかの設定(両方の設定はできない)
    • 設定された方式で言語を判別となります
    • 説明の言葉通りに、一度設定したら、変更時にすでに存在しているパスが使用できなくなりますので、ご注意ください(変更後にすべてのパスを再構築などの作業が必要)
      言語判定URLの設定
Embedded thumbnail for Drupalの多言語ユーザーインターフェースの導入と設定
drupal
video
feeds

やりたいこと:Feedsで多言語コンテンツデータのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Feeds:Enity Translation7.x-1.0
  • モジュール:Entity Translationで多言語サイトを構築しています
  • 複数の言語コンテンツをデータ移行したいです
  • いろいろ調べてみてた、同一フィールドに多言語インポート方法が少なく、難しそうです

解決方法:モジュール(Feeds:Entity Translation)で多言語コンテンツデータの移行

  • 多言語コンテンツデータ移行をサポートするモジュールがあまり多くないようで、一つモジュール(Feeds: Entity Translation)を見つけました
  • モジュール(Feeds: Entity Translation)をインストール/有効化したら、Feedsのデータマッピング管理画面に、多言語有効なフィールドの各言語対応ターゲットが現れます
    多言語コンテンツデータ移行にサポートするFeeds: Entity Translation
  • 同一フィールドの各言語対応ターゲットを選択して多言語コンテンツインポートができました
Embedded thumbnail for DrupalのFeedsで多言語コンテンツデータのインポート
drupal
feeds
module usage

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

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

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

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

やりたいこと:モジュール(Feeds)でのデータマッピング時にPHPコードでフィールド値を加工する

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Tamper7.x-1.1、Feeds Tamper PHP7.x1.2
  • Feedsデータインポートの基本は「 Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考してください
  • データマッピングに、各インポートフィールドの値を加工するため、Feeds Tamperモジュールが良く利用します
  • この中に、特殊なフィールド値加工(例:既存のデータを取得するなど)のためFeeds Tamper PHPを利用して、PHPスクリプトの実行ができます
  • Feeds Tamper PHPでインポートデータの扱い、以下のパラメーターで、任意のフィールドの値の利用ができます
    • $field: 渡されたフィールドの値
    • $item['フィールド名']: インポート元で定義していたフィールド名でその値を取得する
      Drupalのモジュール(Feeds)のデータマッピング時にFeedsTamperでのPHPコードより各フィールドの値を加工します
  • 任意のフィールド(例:body)で他のフィールドの値(例:title)の取得することができます

注意点:PHPコード実行のセキュリティ問題とパフォーマンスへの影響

  • PHPコードを実行するには、eval()関数で行うため、任意のPHPコードの実行が可能となります
  • 特にインポートが公開の場合、PHPコード実行のセキュリティ問題を注意深く対応すべきです
  • また、データ取得したり、多くループをしたりして、パフォーマンスへの影響が考えるべきです
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

問題点:モジュール(Feeds)でデータインポート時に間違って設定があった場合インポートエラーなどが発生

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Import Previews7.x-1.x
  • 複雑なデータマッピング設定(例:Feeds Tamperなどで)時に、間違いやすくなります。その場合実際のデータをインポートで確認する必要があります
  • 間違った設定より、データインポートエラーなどが発生します

解決:モジュール(Feeds Import Preview)でインポート設定を確認します

  • モジュール(Feeds Import Preview)でデータインポート直前のステップまでに進んで、実際のインポート設定の確認ができます
    Drupalのモジュール(Feeds Import Preview)でデータインポート設定の確認ができます
  • 実際にソースから各フィールドの値が表示されています。
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
feeds
module usage

やりたいこと:コンテンツ(例:記事)のbodyフィールドの多言語データのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Entity Translation7.x-1.0
  • コンテンツのbody以外のフィールドがEntity Translation有効であれば、Feedsのデータマッピングで複数の言語のターゲットが現れます
    • drupalのfeedsで多言語コンテンツデータのインポート
  • BodyにEntity Translation有効の場合にマッピングでのターゲットが一つしかありません
  • 複数回でそれぞれの言語データをインポートします
    DrupalのFeedsで多言語bodyデータのインポート

FeedsのNode Processor設定画面でコンテンツ(例:記事)の初期言語を設定

  • コンテンツの元言語を設定する必要があります(もし、設定しなければ多言語の表示に影響しないが、コンテンツの翻訳タグが表示されない)
  • Node Processor設定画面でノートの言語を選択して、データインポート時に設定してくれます(ビデオを参考)

Feedsのマッピング設定画面でbodyのインポート言語設定を行います

  • データマッピング管理画面でbodyフィールドに言語設定があります
    データマッピング管理画面でbodyフィールドの言語設定
  • 複数の言語に対して複数のインポーターを用意するか、複数回で言語設定を行います

各言語に応じて複数回を分けてデータインポートする必要があります

  • 言語ごとにデータインポートする必要があります
    • 一括して同一フィールドに複数の言語インポートができません
  • 具体的なステップはビデオを参考してください
Embedded thumbnail for 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
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
system_management

モジュール(Localization Update)でサイトの多言語ユーザーインターフェースを導入します

  • 背景:Drupal7.54、Localization Update7.x-2.1
  • モジュール(Localization Update)をインストール/有効化します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)で「言語を追加」リンクをクリックすると、必要なユーザーインターフェース言語の導入ができます

管理者がサイト単位でユーザーインターフェース言語の一括設定(ほかの言語を使用しない)

  • Druaplを初期インストール(英語バージョンの場合)後に、別の言語(例:日本語)を導入し、その言語のみを使用します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)でのデフォルト値を選択すればよいです
    サイト単位の言語設定
  • サイト管理者が選択してから、一般ユーザーの選択はできません。

複数の言語をユーザーインターフェースとして利用する場合に、URL/ブラウザ/セッション/ユーザーの言語設定などよりサイトの言語自動判別ができます

  • 複数のユーザーインターフェース言語がある場合、どれを使用するかは決める必要があります
  • 言語判別設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語 » 判別と選択)言語利用の判別条件を設定します
    言語の判別設定と判別順序設定
    • URL: URLから言語を判定する(パス接頭語かドメイン)
    • セッション: 言語をrequest/sessionパラメーターから判定する。
    • ブラウザ: ブラウザーの言語設定から言語を判定する。
    • ユーザー: ユーザープロフィールで設定した言語に従う。
    • デフォルト: サイトのデフォルト言語を使う
  • 上記判別方法のい任意、または全部の選択はできます
  • 判別の優先順のソートができます
  • URLで言語判断設定した場合、URLのドメイン/パス接頭語の設定が必要となります
    言語判別のURLドメイン/パス接頭語設定
    • 「言語のドメイン」と「言語コードのパス接頭語」のどちらかの設定(両方の設定はできない)
    • 設定された方式で言語を判別となります
    • 説明の言葉通りに、一度設定したら、変更時にすでに存在しているパスが使用できなくなりますので、ご注意ください(変更後にすべてのパスを再構築などの作業が必要)
      言語判定URLの設定
Embedded thumbnail for Drupalの多言語ユーザーインターフェースの導入と設定
drupal
video
feeds

やりたいこと:Feedsで多言語コンテンツデータのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Feeds:Enity Translation7.x-1.0
  • モジュール:Entity Translationで多言語サイトを構築しています
  • 複数の言語コンテンツをデータ移行したいです
  • いろいろ調べてみてた、同一フィールドに多言語インポート方法が少なく、難しそうです

解決方法:モジュール(Feeds:Entity Translation)で多言語コンテンツデータの移行

  • 多言語コンテンツデータ移行をサポートするモジュールがあまり多くないようで、一つモジュール(Feeds: Entity Translation)を見つけました
  • モジュール(Feeds: Entity Translation)をインストール/有効化したら、Feedsのデータマッピング管理画面に、多言語有効なフィールドの各言語対応ターゲットが現れます
    多言語コンテンツデータ移行にサポートするFeeds: Entity Translation
  • 同一フィールドの各言語対応ターゲットを選択して多言語コンテンツインポートができました
Embedded thumbnail for DrupalのFeedsで多言語コンテンツデータのインポート
drupal
feeds
module usage

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

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

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

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

やりたいこと:モジュール(Feeds)でのデータマッピング時にPHPコードでフィールド値を加工する

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Tamper7.x-1.1、Feeds Tamper PHP7.x1.2
  • Feedsデータインポートの基本は「 Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考してください
  • データマッピングに、各インポートフィールドの値を加工するため、Feeds Tamperモジュールが良く利用します
  • この中に、特殊なフィールド値加工(例:既存のデータを取得するなど)のためFeeds Tamper PHPを利用して、PHPスクリプトの実行ができます
  • Feeds Tamper PHPでインポートデータの扱い、以下のパラメーターで、任意のフィールドの値の利用ができます
    • $field: 渡されたフィールドの値
    • $item['フィールド名']: インポート元で定義していたフィールド名でその値を取得する
      Drupalのモジュール(Feeds)のデータマッピング時にFeedsTamperでのPHPコードより各フィールドの値を加工します
  • 任意のフィールド(例:body)で他のフィールドの値(例:title)の取得することができます

注意点:PHPコード実行のセキュリティ問題とパフォーマンスへの影響

  • PHPコードを実行するには、eval()関数で行うため、任意のPHPコードの実行が可能となります
  • 特にインポートが公開の場合、PHPコード実行のセキュリティ問題を注意深く対応すべきです
  • また、データ取得したり、多くループをしたりして、パフォーマンスへの影響が考えるべきです
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

問題点:モジュール(Feeds)でデータインポート時に間違って設定があった場合インポートエラーなどが発生

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Import Previews7.x-1.x
  • 複雑なデータマッピング設定(例:Feeds Tamperなどで)時に、間違いやすくなります。その場合実際のデータをインポートで確認する必要があります
  • 間違った設定より、データインポートエラーなどが発生します

解決:モジュール(Feeds Import Preview)でインポート設定を確認します

  • モジュール(Feeds Import Preview)でデータインポート直前のステップまでに進んで、実際のインポート設定の確認ができます
    Drupalのモジュール(Feeds Import Preview)でデータインポート設定の確認ができます
  • 実際にソースから各フィールドの値が表示されています。
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
feeds
module usage

やりたいこと:コンテンツ(例:記事)のbodyフィールドの多言語データのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Entity Translation7.x-1.0
  • コンテンツのbody以外のフィールドがEntity Translation有効であれば、Feedsのデータマッピングで複数の言語のターゲットが現れます
    • drupalのfeedsで多言語コンテンツデータのインポート
  • BodyにEntity Translation有効の場合にマッピングでのターゲットが一つしかありません
  • 複数回でそれぞれの言語データをインポートします
    DrupalのFeedsで多言語bodyデータのインポート

FeedsのNode Processor設定画面でコンテンツ(例:記事)の初期言語を設定

  • コンテンツの元言語を設定する必要があります(もし、設定しなければ多言語の表示に影響しないが、コンテンツの翻訳タグが表示されない)
  • Node Processor設定画面でノートの言語を選択して、データインポート時に設定してくれます(ビデオを参考)

Feedsのマッピング設定画面でbodyのインポート言語設定を行います

  • データマッピング管理画面でbodyフィールドに言語設定があります
    データマッピング管理画面でbodyフィールドの言語設定
  • 複数の言語に対して複数のインポーターを用意するか、複数回で言語設定を行います

各言語に応じて複数回を分けてデータインポートする必要があります

  • 言語ごとにデータインポートする必要があります
    • 一括して同一フィールドに複数の言語インポートができません
  • 具体的なステップはビデオを参考してください
Embedded thumbnail for 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
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
system_management

モジュール(Localization Update)でサイトの多言語ユーザーインターフェースを導入します

  • 背景:Drupal7.54、Localization Update7.x-2.1
  • モジュール(Localization Update)をインストール/有効化します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)で「言語を追加」リンクをクリックすると、必要なユーザーインターフェース言語の導入ができます

管理者がサイト単位でユーザーインターフェース言語の一括設定(ほかの言語を使用しない)

  • Druaplを初期インストール(英語バージョンの場合)後に、別の言語(例:日本語)を導入し、その言語のみを使用します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)でのデフォルト値を選択すればよいです
    サイト単位の言語設定
  • サイト管理者が選択してから、一般ユーザーの選択はできません。

複数の言語をユーザーインターフェースとして利用する場合に、URL/ブラウザ/セッション/ユーザーの言語設定などよりサイトの言語自動判別ができます

  • 複数のユーザーインターフェース言語がある場合、どれを使用するかは決める必要があります
  • 言語判別設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語 » 判別と選択)言語利用の判別条件を設定します
    言語の判別設定と判別順序設定
    • URL: URLから言語を判定する(パス接頭語かドメイン)
    • セッション: 言語をrequest/sessionパラメーターから判定する。
    • ブラウザ: ブラウザーの言語設定から言語を判定する。
    • ユーザー: ユーザープロフィールで設定した言語に従う。
    • デフォルト: サイトのデフォルト言語を使う
  • 上記判別方法のい任意、または全部の選択はできます
  • 判別の優先順のソートができます
  • URLで言語判断設定した場合、URLのドメイン/パス接頭語の設定が必要となります
    言語判別のURLドメイン/パス接頭語設定
    • 「言語のドメイン」と「言語コードのパス接頭語」のどちらかの設定(両方の設定はできない)
    • 設定された方式で言語を判別となります
    • 説明の言葉通りに、一度設定したら、変更時にすでに存在しているパスが使用できなくなりますので、ご注意ください(変更後にすべてのパスを再構築などの作業が必要)
      言語判定URLの設定
Embedded thumbnail for Drupalの多言語ユーザーインターフェースの導入と設定
drupal
video
feeds

やりたいこと:Feedsで多言語コンテンツデータのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Feeds:Enity Translation7.x-1.0
  • モジュール:Entity Translationで多言語サイトを構築しています
  • 複数の言語コンテンツをデータ移行したいです
  • いろいろ調べてみてた、同一フィールドに多言語インポート方法が少なく、難しそうです

解決方法:モジュール(Feeds:Entity Translation)で多言語コンテンツデータの移行

  • 多言語コンテンツデータ移行をサポートするモジュールがあまり多くないようで、一つモジュール(Feeds: Entity Translation)を見つけました
  • モジュール(Feeds: Entity Translation)をインストール/有効化したら、Feedsのデータマッピング管理画面に、多言語有効なフィールドの各言語対応ターゲットが現れます
    多言語コンテンツデータ移行にサポートするFeeds: Entity Translation
  • 同一フィールドの各言語対応ターゲットを選択して多言語コンテンツインポートができました
Embedded thumbnail for DrupalのFeedsで多言語コンテンツデータのインポート
drupal
feeds
module usage

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

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

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

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

やりたいこと:モジュール(Feeds)でのデータマッピング時にPHPコードでフィールド値を加工する

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Tamper7.x-1.1、Feeds Tamper PHP7.x1.2
  • Feedsデータインポートの基本は「 Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考してください
  • データマッピングに、各インポートフィールドの値を加工するため、Feeds Tamperモジュールが良く利用します
  • この中に、特殊なフィールド値加工(例:既存のデータを取得するなど)のためFeeds Tamper PHPを利用して、PHPスクリプトの実行ができます
  • Feeds Tamper PHPでインポートデータの扱い、以下のパラメーターで、任意のフィールドの値の利用ができます
    • $field: 渡されたフィールドの値
    • $item['フィールド名']: インポート元で定義していたフィールド名でその値を取得する
      Drupalのモジュール(Feeds)のデータマッピング時にFeedsTamperでのPHPコードより各フィールドの値を加工します
  • 任意のフィールド(例:body)で他のフィールドの値(例:title)の取得することができます

注意点:PHPコード実行のセキュリティ問題とパフォーマンスへの影響

  • PHPコードを実行するには、eval()関数で行うため、任意のPHPコードの実行が可能となります
  • 特にインポートが公開の場合、PHPコード実行のセキュリティ問題を注意深く対応すべきです
  • また、データ取得したり、多くループをしたりして、パフォーマンスへの影響が考えるべきです
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

問題点:モジュール(Feeds)でデータインポート時に間違って設定があった場合インポートエラーなどが発生

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Import Previews7.x-1.x
  • 複雑なデータマッピング設定(例:Feeds Tamperなどで)時に、間違いやすくなります。その場合実際のデータをインポートで確認する必要があります
  • 間違った設定より、データインポートエラーなどが発生します

解決:モジュール(Feeds Import Preview)でインポート設定を確認します

  • モジュール(Feeds Import Preview)でデータインポート直前のステップまでに進んで、実際のインポート設定の確認ができます
    Drupalのモジュール(Feeds Import Preview)でデータインポート設定の確認ができます
  • 実際にソースから各フィールドの値が表示されています。
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
feeds
module usage

やりたいこと:コンテンツ(例:記事)のbodyフィールドの多言語データのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Entity Translation7.x-1.0
  • コンテンツのbody以外のフィールドがEntity Translation有効であれば、Feedsのデータマッピングで複数の言語のターゲットが現れます
    • drupalのfeedsで多言語コンテンツデータのインポート
  • BodyにEntity Translation有効の場合にマッピングでのターゲットが一つしかありません
  • 複数回でそれぞれの言語データをインポートします
    DrupalのFeedsで多言語bodyデータのインポート

FeedsのNode Processor設定画面でコンテンツ(例:記事)の初期言語を設定

  • コンテンツの元言語を設定する必要があります(もし、設定しなければ多言語の表示に影響しないが、コンテンツの翻訳タグが表示されない)
  • Node Processor設定画面でノートの言語を選択して、データインポート時に設定してくれます(ビデオを参考)

Feedsのマッピング設定画面でbodyのインポート言語設定を行います

  • データマッピング管理画面でbodyフィールドに言語設定があります
    データマッピング管理画面でbodyフィールドの言語設定
  • 複数の言語に対して複数のインポーターを用意するか、複数回で言語設定を行います

各言語に応じて複数回を分けてデータインポートする必要があります

  • 言語ごとにデータインポートする必要があります
    • 一括して同一フィールドに複数の言語インポートができません
  • 具体的なステップはビデオを参考してください
Embedded thumbnail for 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
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
system_management

モジュール(Localization Update)でサイトの多言語ユーザーインターフェースを導入します

  • 背景:Drupal7.54、Localization Update7.x-2.1
  • モジュール(Localization Update)をインストール/有効化します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)で「言語を追加」リンクをクリックすると、必要なユーザーインターフェース言語の導入ができます

管理者がサイト単位でユーザーインターフェース言語の一括設定(ほかの言語を使用しない)

  • Druaplを初期インストール(英語バージョンの場合)後に、別の言語(例:日本語)を導入し、その言語のみを使用します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)でのデフォルト値を選択すればよいです
    サイト単位の言語設定
  • サイト管理者が選択してから、一般ユーザーの選択はできません。

複数の言語をユーザーインターフェースとして利用する場合に、URL/ブラウザ/セッション/ユーザーの言語設定などよりサイトの言語自動判別ができます

  • 複数のユーザーインターフェース言語がある場合、どれを使用するかは決める必要があります
  • 言語判別設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語 » 判別と選択)言語利用の判別条件を設定します
    言語の判別設定と判別順序設定
    • URL: URLから言語を判定する(パス接頭語かドメイン)
    • セッション: 言語をrequest/sessionパラメーターから判定する。
    • ブラウザ: ブラウザーの言語設定から言語を判定する。
    • ユーザー: ユーザープロフィールで設定した言語に従う。
    • デフォルト: サイトのデフォルト言語を使う
  • 上記判別方法のい任意、または全部の選択はできます
  • 判別の優先順のソートができます
  • URLで言語判断設定した場合、URLのドメイン/パス接頭語の設定が必要となります
    言語判別のURLドメイン/パス接頭語設定
    • 「言語のドメイン」と「言語コードのパス接頭語」のどちらかの設定(両方の設定はできない)
    • 設定された方式で言語を判別となります
    • 説明の言葉通りに、一度設定したら、変更時にすでに存在しているパスが使用できなくなりますので、ご注意ください(変更後にすべてのパスを再構築などの作業が必要)
      言語判定URLの設定
Embedded thumbnail for Drupalの多言語ユーザーインターフェースの導入と設定
drupal
video
feeds

やりたいこと:Feedsで多言語コンテンツデータのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Feeds:Enity Translation7.x-1.0
  • モジュール:Entity Translationで多言語サイトを構築しています
  • 複数の言語コンテンツをデータ移行したいです
  • いろいろ調べてみてた、同一フィールドに多言語インポート方法が少なく、難しそうです

解決方法:モジュール(Feeds:Entity Translation)で多言語コンテンツデータの移行

  • 多言語コンテンツデータ移行をサポートするモジュールがあまり多くないようで、一つモジュール(Feeds: Entity Translation)を見つけました
  • モジュール(Feeds: Entity Translation)をインストール/有効化したら、Feedsのデータマッピング管理画面に、多言語有効なフィールドの各言語対応ターゲットが現れます
    多言語コンテンツデータ移行にサポートするFeeds: Entity Translation
  • 同一フィールドの各言語対応ターゲットを選択して多言語コンテンツインポートができました
Embedded thumbnail for DrupalのFeedsで多言語コンテンツデータのインポート
drupal
feeds
module usage

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

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

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

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

やりたいこと:モジュール(Feeds)でのデータマッピング時にPHPコードでフィールド値を加工する

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Tamper7.x-1.1、Feeds Tamper PHP7.x1.2
  • Feedsデータインポートの基本は「 Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考してください
  • データマッピングに、各インポートフィールドの値を加工するため、Feeds Tamperモジュールが良く利用します
  • この中に、特殊なフィールド値加工(例:既存のデータを取得するなど)のためFeeds Tamper PHPを利用して、PHPスクリプトの実行ができます
  • Feeds Tamper PHPでインポートデータの扱い、以下のパラメーターで、任意のフィールドの値の利用ができます
    • $field: 渡されたフィールドの値
    • $item['フィールド名']: インポート元で定義していたフィールド名でその値を取得する
      Drupalのモジュール(Feeds)のデータマッピング時にFeedsTamperでのPHPコードより各フィールドの値を加工します
  • 任意のフィールド(例:body)で他のフィールドの値(例:title)の取得することができます

注意点:PHPコード実行のセキュリティ問題とパフォーマンスへの影響

  • PHPコードを実行するには、eval()関数で行うため、任意のPHPコードの実行が可能となります
  • 特にインポートが公開の場合、PHPコード実行のセキュリティ問題を注意深く対応すべきです
  • また、データ取得したり、多くループをしたりして、パフォーマンスへの影響が考えるべきです
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

問題点:モジュール(Feeds)でデータインポート時に間違って設定があった場合インポートエラーなどが発生

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Import Previews7.x-1.x
  • 複雑なデータマッピング設定(例:Feeds Tamperなどで)時に、間違いやすくなります。その場合実際のデータをインポートで確認する必要があります
  • 間違った設定より、データインポートエラーなどが発生します

解決:モジュール(Feeds Import Preview)でインポート設定を確認します

  • モジュール(Feeds Import Preview)でデータインポート直前のステップまでに進んで、実際のインポート設定の確認ができます
    Drupalのモジュール(Feeds Import Preview)でデータインポート設定の確認ができます
  • 実際にソースから各フィールドの値が表示されています。
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
feeds
module usage

やりたいこと:コンテンツ(例:記事)のbodyフィールドの多言語データのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Entity Translation7.x-1.0
  • コンテンツのbody以外のフィールドがEntity Translation有効であれば、Feedsのデータマッピングで複数の言語のターゲットが現れます
    • drupalのfeedsで多言語コンテンツデータのインポート
  • BodyにEntity Translation有効の場合にマッピングでのターゲットが一つしかありません
  • 複数回でそれぞれの言語データをインポートします
    DrupalのFeedsで多言語bodyデータのインポート

FeedsのNode Processor設定画面でコンテンツ(例:記事)の初期言語を設定

  • コンテンツの元言語を設定する必要があります(もし、設定しなければ多言語の表示に影響しないが、コンテンツの翻訳タグが表示されない)
  • Node Processor設定画面でノートの言語を選択して、データインポート時に設定してくれます(ビデオを参考)

Feedsのマッピング設定画面でbodyのインポート言語設定を行います

  • データマッピング管理画面でbodyフィールドに言語設定があります
    データマッピング管理画面でbodyフィールドの言語設定
  • 複数の言語に対して複数のインポーターを用意するか、複数回で言語設定を行います

各言語に応じて複数回を分けてデータインポートする必要があります

  • 言語ごとにデータインポートする必要があります
    • 一括して同一フィールドに複数の言語インポートができません
  • 具体的なステップはビデオを参考してください
Embedded thumbnail for 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
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
system_management

モジュール(Localization Update)でサイトの多言語ユーザーインターフェースを導入します

  • 背景:Drupal7.54、Localization Update7.x-2.1
  • モジュール(Localization Update)をインストール/有効化します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)で「言語を追加」リンクをクリックすると、必要なユーザーインターフェース言語の導入ができます

管理者がサイト単位でユーザーインターフェース言語の一括設定(ほかの言語を使用しない)

  • Druaplを初期インストール(英語バージョンの場合)後に、別の言語(例:日本語)を導入し、その言語のみを使用します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)でのデフォルト値を選択すればよいです
    サイト単位の言語設定
  • サイト管理者が選択してから、一般ユーザーの選択はできません。

複数の言語をユーザーインターフェースとして利用する場合に、URL/ブラウザ/セッション/ユーザーの言語設定などよりサイトの言語自動判別ができます

  • 複数のユーザーインターフェース言語がある場合、どれを使用するかは決める必要があります
  • 言語判別設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語 » 判別と選択)言語利用の判別条件を設定します
    言語の判別設定と判別順序設定
    • URL: URLから言語を判定する(パス接頭語かドメイン)
    • セッション: 言語をrequest/sessionパラメーターから判定する。
    • ブラウザ: ブラウザーの言語設定から言語を判定する。
    • ユーザー: ユーザープロフィールで設定した言語に従う。
    • デフォルト: サイトのデフォルト言語を使う
  • 上記判別方法のい任意、または全部の選択はできます
  • 判別の優先順のソートができます
  • URLで言語判断設定した場合、URLのドメイン/パス接頭語の設定が必要となります
    言語判別のURLドメイン/パス接頭語設定
    • 「言語のドメイン」と「言語コードのパス接頭語」のどちらかの設定(両方の設定はできない)
    • 設定された方式で言語を判別となります
    • 説明の言葉通りに、一度設定したら、変更時にすでに存在しているパスが使用できなくなりますので、ご注意ください(変更後にすべてのパスを再構築などの作業が必要)
      言語判定URLの設定
Embedded thumbnail for Drupalの多言語ユーザーインターフェースの導入と設定
drupal
video
feeds

やりたいこと:Feedsで多言語コンテンツデータのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Feeds:Enity Translation7.x-1.0
  • モジュール:Entity Translationで多言語サイトを構築しています
  • 複数の言語コンテンツをデータ移行したいです
  • いろいろ調べてみてた、同一フィールドに多言語インポート方法が少なく、難しそうです

解決方法:モジュール(Feeds:Entity Translation)で多言語コンテンツデータの移行

  • 多言語コンテンツデータ移行をサポートするモジュールがあまり多くないようで、一つモジュール(Feeds: Entity Translation)を見つけました
  • モジュール(Feeds: Entity Translation)をインストール/有効化したら、Feedsのデータマッピング管理画面に、多言語有効なフィールドの各言語対応ターゲットが現れます
    多言語コンテンツデータ移行にサポートするFeeds: Entity Translation
  • 同一フィールドの各言語対応ターゲットを選択して多言語コンテンツインポートができました
Embedded thumbnail for DrupalのFeedsで多言語コンテンツデータのインポート
drupal
feeds
module usage

モジュール(Feeds)が非階層化されているタクソノミータームのインポートが可能

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのcsvファイルインポートについて、「Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考にしてください。
  • 非階層化のタクソノミータームcsvデータは以下のよう
    DrupalのFeedsで非階層化のタクソノミータームのインポート
  • タクソノミータームのインポート操作はビデオを参考にしてください
  • プロセッサーのマッピング設定ポイント:
    • 記事のタイトルをキーにして、タイトルでインポートデータを記事との照合(タイトルは重複しない前提)
    • タクソノミータームが存在しない場合、新規作成を行います
    • タクソノミーターム名を照合してインポートします
  • csvデータをインポートしたら新規作成したタクソノミータームの確認

モジュール(Feeds tamper term hierarchy)で階層化されたcsvタクソノミータームデータのインポート

  • 必要なモジュール:Feeds tamper term hierarchy(サンドボックスプロジェクト、ダウンロードはここ)
  • 以下のような階層化されたcsvタクソノミータームデータをインポートします
    Drupalのモジュール(Feeds tamper term hierarchy)で階層化されたタクソノミータームのインポート
  • 具体的なインポート方法はビデオを確認してください。
  • 既存のタクソノミータームのデータマッピング時に以下の注意点:
    • 既存のタクソノミータームの新規作成チェックを外します(Feeds tamper term hierarchyが同じ機能があったため)
    • タクソノミーターム検索は「名前」ではなく、タームIDで検索するとの設定
  • TamperのFeeds tamper term hierarchyで設定は、「Term hierarchy separator」(csvデータのターム親子区切り)がインポートデータにある区切り記号と一致していることの確認
Embedded thumbnail for Drupalのモジュール(Feeds)で階層化されたタクソノミータームのインポート
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

モジュール(Feeds)が非階層化されているタクソノミータームのインポートが可能

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのcsvファイルインポートについて、「Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考にしてください。
  • 非階層化のタクソノミータームcsvデータは以下のよう
    DrupalのFeedsで非階層化のタクソノミータームのインポート
  • タクソノミータームのインポート操作はビデオを参考にしてください
  • プロセッサーのマッピング設定ポイント:
    • 記事のタイトルをキーにして、タイトルでインポートデータを記事との照合(タイトルは重複しない前提)
    • タクソノミータームが存在しない場合、新規作成を行います
    • タクソノミーターム名を照合してインポートします
  • csvデータをインポートしたら新規作成したタクソノミータームの確認

モジュール(Feeds tamper term hierarchy)で階層化されたcsvタクソノミータームデータのインポート

  • 必要なモジュール:Feeds tamper term hierarchy(サンドボックスプロジェクト、ダウンロードはここ)
  • 以下のような階層化されたcsvタクソノミータームデータをインポートします
    Drupalのモジュール(Feeds tamper term hierarchy)で階層化されたタクソノミータームのインポート
  • 具体的なインポート方法はビデオを確認してください。
  • 既存のタクソノミータームのデータマッピング時に以下の注意点:
    • 既存のタクソノミータームの新規作成チェックを外します(Feeds tamper term hierarchyが同じ機能があったため)
    • タクソノミーターム検索は「名前」ではなく、タームIDで検索するとの設定
  • TamperのFeeds tamper term hierarchyで設定は、「Term hierarchy separator」(csvデータのターム親子区切り)がインポートデータにある区切り記号と一致していることの確認
Embedded thumbnail for Drupalのモジュール(Feeds)で階層化されたタクソノミータームのインポート
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

モジュール(Feeds)が非階層化されているタクソノミータームのインポートが可能

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのcsvファイルインポートについて、「Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考にしてください。
  • 非階層化のタクソノミータームcsvデータは以下のよう
    DrupalのFeedsで非階層化のタクソノミータームのインポート
  • タクソノミータームのインポート操作はビデオを参考にしてください
  • プロセッサーのマッピング設定ポイント:
    • 記事のタイトルをキーにして、タイトルでインポートデータを記事との照合(タイトルは重複しない前提)
    • タクソノミータームが存在しない場合、新規作成を行います
    • タクソノミーターム名を照合してインポートします
  • csvデータをインポートしたら新規作成したタクソノミータームの確認

モジュール(Feeds tamper term hierarchy)で階層化されたcsvタクソノミータームデータのインポート

  • 必要なモジュール:Feeds tamper term hierarchy(サンドボックスプロジェクト、ダウンロードはここ)
  • 以下のような階層化されたcsvタクソノミータームデータをインポートします
    Drupalのモジュール(Feeds tamper term hierarchy)で階層化されたタクソノミータームのインポート
  • 具体的なインポート方法はビデオを確認してください。
  • 既存のタクソノミータームのデータマッピング時に以下の注意点:
    • 既存のタクソノミータームの新規作成チェックを外します(Feeds tamper term hierarchyが同じ機能があったため)
    • タクソノミーターム検索は「名前」ではなく、タームIDで検索するとの設定
  • TamperのFeeds tamper term hierarchyで設定は、「Term hierarchy separator」(csvデータのターム親子区切り)がインポートデータにある区切り記号と一致していることの確認
Embedded thumbnail for Drupalのモジュール(Feeds)で階層化されたタクソノミータームのインポート
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

モジュール(Feeds)が非階層化されているタクソノミータームのインポートが可能

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのcsvファイルインポートについて、「Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考にしてください。
  • 非階層化のタクソノミータームcsvデータは以下のよう
    DrupalのFeedsで非階層化のタクソノミータームのインポート
  • タクソノミータームのインポート操作はビデオを参考にしてください
  • プロセッサーのマッピング設定ポイント:
    • 記事のタイトルをキーにして、タイトルでインポートデータを記事との照合(タイトルは重複しない前提)
    • タクソノミータームが存在しない場合、新規作成を行います
    • タクソノミーターム名を照合してインポートします
  • csvデータをインポートしたら新規作成したタクソノミータームの確認

モジュール(Feeds tamper term hierarchy)で階層化されたcsvタクソノミータームデータのインポート

  • 必要なモジュール:Feeds tamper term hierarchy(サンドボックスプロジェクト、ダウンロードはここ)
  • 以下のような階層化されたcsvタクソノミータームデータをインポートします
    Drupalのモジュール(Feeds tamper term hierarchy)で階層化されたタクソノミータームのインポート
  • 具体的なインポート方法はビデオを確認してください。
  • 既存のタクソノミータームのデータマッピング時に以下の注意点:
    • 既存のタクソノミータームの新規作成チェックを外します(Feeds tamper term hierarchyが同じ機能があったため)
    • タクソノミーターム検索は「名前」ではなく、タームIDで検索するとの設定
  • TamperのFeeds tamper term hierarchyで設定は、「Term hierarchy separator」(csvデータのターム親子区切り)がインポートデータにある区切り記号と一致していることの確認
Embedded thumbnail for Drupalのモジュール(Feeds)で階層化されたタクソノミータームのインポート
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

モジュール(Feeds)が非階層化されているタクソノミータームのインポートが可能

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのcsvファイルインポートについて、「Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考にしてください。
  • 非階層化のタクソノミータームcsvデータは以下のよう
    DrupalのFeedsで非階層化のタクソノミータームのインポート
  • タクソノミータームのインポート操作はビデオを参考にしてください
  • プロセッサーのマッピング設定ポイント:
    • 記事のタイトルをキーにして、タイトルでインポートデータを記事との照合(タイトルは重複しない前提)
    • タクソノミータームが存在しない場合、新規作成を行います
    • タクソノミーターム名を照合してインポートします
  • csvデータをインポートしたら新規作成したタクソノミータームの確認

モジュール(Feeds tamper term hierarchy)で階層化されたcsvタクソノミータームデータのインポート

  • 必要なモジュール:Feeds tamper term hierarchy(サンドボックスプロジェクト、ダウンロードはここ)
  • 以下のような階層化されたcsvタクソノミータームデータをインポートします
    Drupalのモジュール(Feeds tamper term hierarchy)で階層化されたタクソノミータームのインポート
  • 具体的なインポート方法はビデオを確認してください。
  • 既存のタクソノミータームのデータマッピング時に以下の注意点:
    • 既存のタクソノミータームの新規作成チェックを外します(Feeds tamper term hierarchyが同じ機能があったため)
    • タクソノミーターム検索は「名前」ではなく、タームIDで検索するとの設定
  • TamperのFeeds tamper term hierarchyで設定は、「Term hierarchy separator」(csvデータのターム親子区切り)がインポートデータにある区切り記号と一致していることの確認
Embedded thumbnail for Drupalのモジュール(Feeds)で階層化されたタクソノミータームのインポート
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

モジュール(Feeds)が非階層化されているタクソノミータームのインポートが可能

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのcsvファイルインポートについて、「Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考にしてください。
  • 非階層化のタクソノミータームcsvデータは以下のよう
    DrupalのFeedsで非階層化のタクソノミータームのインポート
  • タクソノミータームのインポート操作はビデオを参考にしてください
  • プロセッサーのマッピング設定ポイント:
    • 記事のタイトルをキーにして、タイトルでインポートデータを記事との照合(タイトルは重複しない前提)
    • タクソノミータームが存在しない場合、新規作成を行います
    • タクソノミーターム名を照合してインポートします
  • csvデータをインポートしたら新規作成したタクソノミータームの確認

モジュール(Feeds tamper term hierarchy)で階層化されたcsvタクソノミータームデータのインポート

  • 必要なモジュール:Feeds tamper term hierarchy(サンドボックスプロジェクト、ダウンロードはここ)
  • 以下のような階層化されたcsvタクソノミータームデータをインポートします
    Drupalのモジュール(Feeds tamper term hierarchy)で階層化されたタクソノミータームのインポート
  • 具体的なインポート方法はビデオを確認してください。
  • 既存のタクソノミータームのデータマッピング時に以下の注意点:
    • 既存のタクソノミータームの新規作成チェックを外します(Feeds tamper term hierarchyが同じ機能があったため)
    • タクソノミーターム検索は「名前」ではなく、タームIDで検索するとの設定
  • TamperのFeeds tamper term hierarchyで設定は、「Term hierarchy separator」(csvデータのターム親子区切り)がインポートデータにある区切り記号と一致していることの確認
Embedded thumbnail for Drupalのモジュール(Feeds)で階層化されたタクソノミータームのインポート
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

モジュール(Feeds)が非階層化されているタクソノミータームのインポートが可能

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのcsvファイルインポートについて、「Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考にしてください。
  • 非階層化のタクソノミータームcsvデータは以下のよう
    DrupalのFeedsで非階層化のタクソノミータームのインポート
  • タクソノミータームのインポート操作はビデオを参考にしてください
  • プロセッサーのマッピング設定ポイント:
    • 記事のタイトルをキーにして、タイトルでインポートデータを記事との照合(タイトルは重複しない前提)
    • タクソノミータームが存在しない場合、新規作成を行います
    • タクソノミーターム名を照合してインポートします
  • csvデータをインポートしたら新規作成したタクソノミータームの確認

モジュール(Feeds tamper term hierarchy)で階層化されたcsvタクソノミータームデータのインポート

  • 必要なモジュール:Feeds tamper term hierarchy(サンドボックスプロジェクト、ダウンロードはここ)
  • 以下のような階層化されたcsvタクソノミータームデータをインポートします
    Drupalのモジュール(Feeds tamper term hierarchy)で階層化されたタクソノミータームのインポート
  • 具体的なインポート方法はビデオを確認してください。
  • 既存のタクソノミータームのデータマッピング時に以下の注意点:
    • 既存のタクソノミータームの新規作成チェックを外します(Feeds tamper term hierarchyが同じ機能があったため)
    • タクソノミーターム検索は「名前」ではなく、タームIDで検索するとの設定
  • TamperのFeeds tamper term hierarchyで設定は、「Term hierarchy separator」(csvデータのターム親子区切り)がインポートデータにある区切り記号と一致していることの確認
Embedded thumbnail for Drupalのモジュール(Feeds)で階層化されたタクソノミータームのインポート
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

モジュール(Feeds)が非階層化されているタクソノミータームのインポートが可能

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのcsvファイルインポートについて、「Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考にしてください。
  • 非階層化のタクソノミータームcsvデータは以下のよう
    DrupalのFeedsで非階層化のタクソノミータームのインポート
  • タクソノミータームのインポート操作はビデオを参考にしてください
  • プロセッサーのマッピング設定ポイント:
    • 記事のタイトルをキーにして、タイトルでインポートデータを記事との照合(タイトルは重複しない前提)
    • タクソノミータームが存在しない場合、新規作成を行います
    • タクソノミーターム名を照合してインポートします
  • csvデータをインポートしたら新規作成したタクソノミータームの確認

モジュール(Feeds tamper term hierarchy)で階層化されたcsvタクソノミータームデータのインポート

  • 必要なモジュール:Feeds tamper term hierarchy(サンドボックスプロジェクト、ダウンロードはここ)
  • 以下のような階層化されたcsvタクソノミータームデータをインポートします
    Drupalのモジュール(Feeds tamper term hierarchy)で階層化されたタクソノミータームのインポート
  • 具体的なインポート方法はビデオを確認してください。
  • 既存のタクソノミータームのデータマッピング時に以下の注意点:
    • 既存のタクソノミータームの新規作成チェックを外します(Feeds tamper term hierarchyが同じ機能があったため)
    • タクソノミーターム検索は「名前」ではなく、タームIDで検索するとの設定
  • TamperのFeeds tamper term hierarchyで設定は、「Term hierarchy separator」(csvデータのターム親子区切り)がインポートデータにある区切り記号と一致していることの確認
Embedded thumbnail for Drupalのモジュール(Feeds)で階層化されたタクソノミータームのインポート
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

モジュール(Feeds)が非階層化されているタクソノミータームのインポートが可能

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのcsvファイルインポートについて、「Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考にしてください。
  • 非階層化のタクソノミータームcsvデータは以下のよう
    DrupalのFeedsで非階層化のタクソノミータームのインポート
  • タクソノミータームのインポート操作はビデオを参考にしてください
  • プロセッサーのマッピング設定ポイント:
    • 記事のタイトルをキーにして、タイトルでインポートデータを記事との照合(タイトルは重複しない前提)
    • タクソノミータームが存在しない場合、新規作成を行います
    • タクソノミーターム名を照合してインポートします
  • csvデータをインポートしたら新規作成したタクソノミータームの確認

モジュール(Feeds tamper term hierarchy)で階層化されたcsvタクソノミータームデータのインポート

  • 必要なモジュール:Feeds tamper term hierarchy(サンドボックスプロジェクト、ダウンロードはここ)
  • 以下のような階層化されたcsvタクソノミータームデータをインポートします
    Drupalのモジュール(Feeds tamper term hierarchy)で階層化されたタクソノミータームのインポート
  • 具体的なインポート方法はビデオを確認してください。
  • 既存のタクソノミータームのデータマッピング時に以下の注意点:
    • 既存のタクソノミータームの新規作成チェックを外します(Feeds tamper term hierarchyが同じ機能があったため)
    • タクソノミーターム検索は「名前」ではなく、タームIDで検索するとの設定
  • TamperのFeeds tamper term hierarchyで設定は、「Term hierarchy separator」(csvデータのターム親子区切り)がインポートデータにある区切り記号と一致していることの確認
Embedded thumbnail for Drupalのモジュール(Feeds)で階層化されたタクソノミータームのインポート
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

モジュール(Feeds)が非階層化されているタクソノミータームのインポートが可能

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのcsvファイルインポートについて、「Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考にしてください。
  • 非階層化のタクソノミータームcsvデータは以下のよう
    DrupalのFeedsで非階層化のタクソノミータームのインポート
  • タクソノミータームのインポート操作はビデオを参考にしてください
  • プロセッサーのマッピング設定ポイント:
    • 記事のタイトルをキーにして、タイトルでインポートデータを記事との照合(タイトルは重複しない前提)
    • タクソノミータームが存在しない場合、新規作成を行います
    • タクソノミーターム名を照合してインポートします
  • csvデータをインポートしたら新規作成したタクソノミータームの確認

モジュール(Feeds tamper term hierarchy)で階層化されたcsvタクソノミータームデータのインポート

  • 必要なモジュール:Feeds tamper term hierarchy(サンドボックスプロジェクト、ダウンロードはここ)
  • 以下のような階層化されたcsvタクソノミータームデータをインポートします
    Drupalのモジュール(Feeds tamper term hierarchy)で階層化されたタクソノミータームのインポート
  • 具体的なインポート方法はビデオを確認してください。
  • 既存のタクソノミータームのデータマッピング時に以下の注意点:
    • 既存のタクソノミータームの新規作成チェックを外します(Feeds tamper term hierarchyが同じ機能があったため)
    • タクソノミーターム検索は「名前」ではなく、タームIDで検索するとの設定
  • TamperのFeeds tamper term hierarchyで設定は、「Term hierarchy separator」(csvデータのターム親子区切り)がインポートデータにある区切り記号と一致していることの確認
Embedded thumbnail for Drupalのモジュール(Feeds)で階層化されたタクソノミータームのインポート
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

モジュール(Feeds)が非階層化されているタクソノミータームのインポートが可能

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのcsvファイルインポートについて、「Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考にしてください。
  • 非階層化のタクソノミータームcsvデータは以下のよう
    DrupalのFeedsで非階層化のタクソノミータームのインポート
  • タクソノミータームのインポート操作はビデオを参考にしてください
  • プロセッサーのマッピング設定ポイント:
    • 記事のタイトルをキーにして、タイトルでインポートデータを記事との照合(タイトルは重複しない前提)
    • タクソノミータームが存在しない場合、新規作成を行います
    • タクソノミーターム名を照合してインポートします
  • csvデータをインポートしたら新規作成したタクソノミータームの確認

モジュール(Feeds tamper term hierarchy)で階層化されたcsvタクソノミータームデータのインポート

  • 必要なモジュール:Feeds tamper term hierarchy(サンドボックスプロジェクト、ダウンロードはここ)
  • 以下のような階層化されたcsvタクソノミータームデータをインポートします
    Drupalのモジュール(Feeds tamper term hierarchy)で階層化されたタクソノミータームのインポート
  • 具体的なインポート方法はビデオを確認してください。
  • 既存のタクソノミータームのデータマッピング時に以下の注意点:
    • 既存のタクソノミータームの新規作成チェックを外します(Feeds tamper term hierarchyが同じ機能があったため)
    • タクソノミーターム検索は「名前」ではなく、タームIDで検索するとの設定
  • TamperのFeeds tamper term hierarchyで設定は、「Term hierarchy separator」(csvデータのターム親子区切り)がインポートデータにある区切り記号と一致していることの確認
Embedded thumbnail for Drupalのモジュール(Feeds)で階層化されたタクソノミータームのインポート
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

モジュール(Feeds)が非階層化されているタクソノミータームのインポートが可能

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのcsvファイルインポートについて、「Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考にしてください。
  • 非階層化のタクソノミータームcsvデータは以下のよう
    DrupalのFeedsで非階層化のタクソノミータームのインポート
  • タクソノミータームのインポート操作はビデオを参考にしてください
  • プロセッサーのマッピング設定ポイント:
    • 記事のタイトルをキーにして、タイトルでインポートデータを記事との照合(タイトルは重複しない前提)
    • タクソノミータームが存在しない場合、新規作成を行います
    • タクソノミーターム名を照合してインポートします
  • csvデータをインポートしたら新規作成したタクソノミータームの確認

モジュール(Feeds tamper term hierarchy)で階層化されたcsvタクソノミータームデータのインポート

  • 必要なモジュール:Feeds tamper term hierarchy(サンドボックスプロジェクト、ダウンロードはここ)
  • 以下のような階層化されたcsvタクソノミータームデータをインポートします
    Drupalのモジュール(Feeds tamper term hierarchy)で階層化されたタクソノミータームのインポート
  • 具体的なインポート方法はビデオを確認してください。
  • 既存のタクソノミータームのデータマッピング時に以下の注意点:
    • 既存のタクソノミータームの新規作成チェックを外します(Feeds tamper term hierarchyが同じ機能があったため)
    • タクソノミーターム検索は「名前」ではなく、タームIDで検索するとの設定
  • TamperのFeeds tamper term hierarchyで設定は、「Term hierarchy separator」(csvデータのターム親子区切り)がインポートデータにある区切り記号と一致していることの確認
Embedded thumbnail for Drupalのモジュール(Feeds)で階層化されたタクソノミータームのインポート
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

モジュール(Feeds)が非階層化されているタクソノミータームのインポートが可能

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのcsvファイルインポートについて、「Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考にしてください。
  • 非階層化のタクソノミータームcsvデータは以下のよう
    DrupalのFeedsで非階層化のタクソノミータームのインポート
  • タクソノミータームのインポート操作はビデオを参考にしてください
  • プロセッサーのマッピング設定ポイント:
    • 記事のタイトルをキーにして、タイトルでインポートデータを記事との照合(タイトルは重複しない前提)
    • タクソノミータームが存在しない場合、新規作成を行います
    • タクソノミーターム名を照合してインポートします
  • csvデータをインポートしたら新規作成したタクソノミータームの確認

モジュール(Feeds tamper term hierarchy)で階層化されたcsvタクソノミータームデータのインポート

  • 必要なモジュール:Feeds tamper term hierarchy(サンドボックスプロジェクト、ダウンロードはここ)
  • 以下のような階層化されたcsvタクソノミータームデータをインポートします
    Drupalのモジュール(Feeds tamper term hierarchy)で階層化されたタクソノミータームのインポート
  • 具体的なインポート方法はビデオを確認してください。
  • 既存のタクソノミータームのデータマッピング時に以下の注意点:
    • 既存のタクソノミータームの新規作成チェックを外します(Feeds tamper term hierarchyが同じ機能があったため)
    • タクソノミーターム検索は「名前」ではなく、タームIDで検索するとの設定
  • TamperのFeeds tamper term hierarchyで設定は、「Term hierarchy separator」(csvデータのターム親子区切り)がインポートデータにある区切り記号と一致していることの確認
Embedded thumbnail for Drupalのモジュール(Feeds)で階層化されたタクソノミータームのインポート
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

モジュール(Feeds)が非階層化されているタクソノミータームのインポートが可能

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのcsvファイルインポートについて、「Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考にしてください。
  • 非階層化のタクソノミータームcsvデータは以下のよう
    DrupalのFeedsで非階層化のタクソノミータームのインポート
  • タクソノミータームのインポート操作はビデオを参考にしてください
  • プロセッサーのマッピング設定ポイント:
    • 記事のタイトルをキーにして、タイトルでインポートデータを記事との照合(タイトルは重複しない前提)
    • タクソノミータームが存在しない場合、新規作成を行います
    • タクソノミーターム名を照合してインポートします
  • csvデータをインポートしたら新規作成したタクソノミータームの確認

モジュール(Feeds tamper term hierarchy)で階層化されたcsvタクソノミータームデータのインポート

  • 必要なモジュール:Feeds tamper term hierarchy(サンドボックスプロジェクト、ダウンロードはここ)
  • 以下のような階層化されたcsvタクソノミータームデータをインポートします
    Drupalのモジュール(Feeds tamper term hierarchy)で階層化されたタクソノミータームのインポート
  • 具体的なインポート方法はビデオを確認してください。
  • 既存のタクソノミータームのデータマッピング時に以下の注意点:
    • 既存のタクソノミータームの新規作成チェックを外します(Feeds tamper term hierarchyが同じ機能があったため)
    • タクソノミーターム検索は「名前」ではなく、タームIDで検索するとの設定
  • TamperのFeeds tamper term hierarchyで設定は、「Term hierarchy separator」(csvデータのターム親子区切り)がインポートデータにある区切り記号と一致していることの確認
Embedded thumbnail for Drupalのモジュール(Feeds)で階層化されたタクソノミータームのインポート
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

モジュール(Feeds)が非階層化されているタクソノミータームのインポートが可能

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのcsvファイルインポートについて、「Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考にしてください。
  • 非階層化のタクソノミータームcsvデータは以下のよう
    DrupalのFeedsで非階層化のタクソノミータームのインポート
  • タクソノミータームのインポート操作はビデオを参考にしてください
  • プロセッサーのマッピング設定ポイント:
    • 記事のタイトルをキーにして、タイトルでインポートデータを記事との照合(タイトルは重複しない前提)
    • タクソノミータームが存在しない場合、新規作成を行います
    • タクソノミーターム名を照合してインポートします
  • csvデータをインポートしたら新規作成したタクソノミータームの確認

モジュール(Feeds tamper term hierarchy)で階層化されたcsvタクソノミータームデータのインポート

  • 必要なモジュール:Feeds tamper term hierarchy(サンドボックスプロジェクト、ダウンロードはここ)
  • 以下のような階層化されたcsvタクソノミータームデータをインポートします
    Drupalのモジュール(Feeds tamper term hierarchy)で階層化されたタクソノミータームのインポート
  • 具体的なインポート方法はビデオを確認してください。
  • 既存のタクソノミータームのデータマッピング時に以下の注意点:
    • 既存のタクソノミータームの新規作成チェックを外します(Feeds tamper term hierarchyが同じ機能があったため)
    • タクソノミーターム検索は「名前」ではなく、タームIDで検索するとの設定
  • TamperのFeeds tamper term hierarchyで設定は、「Term hierarchy separator」(csvデータのターム親子区切り)がインポートデータにある区切り記号と一致していることの確認
Embedded thumbnail for Drupalのモジュール(Feeds)で階層化されたタクソノミータームのインポート
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

モジュール(Feeds)が非階層化されているタクソノミータームのインポートが可能

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのcsvファイルインポートについて、「Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考にしてください。
  • 非階層化のタクソノミータームcsvデータは以下のよう
    DrupalのFeedsで非階層化のタクソノミータームのインポート
  • タクソノミータームのインポート操作はビデオを参考にしてください
  • プロセッサーのマッピング設定ポイント:
    • 記事のタイトルをキーにして、タイトルでインポートデータを記事との照合(タイトルは重複しない前提)
    • タクソノミータームが存在しない場合、新規作成を行います
    • タクソノミーターム名を照合してインポートします
  • csvデータをインポートしたら新規作成したタクソノミータームの確認

モジュール(Feeds tamper term hierarchy)で階層化されたcsvタクソノミータームデータのインポート

  • 必要なモジュール:Feeds tamper term hierarchy(サンドボックスプロジェクト、ダウンロードはここ)
  • 以下のような階層化されたcsvタクソノミータームデータをインポートします
    Drupalのモジュール(Feeds tamper term hierarchy)で階層化されたタクソノミータームのインポート
  • 具体的なインポート方法はビデオを確認してください。
  • 既存のタクソノミータームのデータマッピング時に以下の注意点:
    • 既存のタクソノミータームの新規作成チェックを外します(Feeds tamper term hierarchyが同じ機能があったため)
    • タクソノミーターム検索は「名前」ではなく、タームIDで検索するとの設定
  • TamperのFeeds tamper term hierarchyで設定は、「Term hierarchy separator」(csvデータのターム親子区切り)がインポートデータにある区切り記号と一致していることの確認
Embedded thumbnail for Drupalのモジュール(Feeds)で階層化されたタクソノミータームのインポート
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

モジュール(Feeds)が非階層化されているタクソノミータームのインポートが可能

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのcsvファイルインポートについて、「Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考にしてください。
  • 非階層化のタクソノミータームcsvデータは以下のよう
    DrupalのFeedsで非階層化のタクソノミータームのインポート
  • タクソノミータームのインポート操作はビデオを参考にしてください
  • プロセッサーのマッピング設定ポイント:
    • 記事のタイトルをキーにして、タイトルでインポートデータを記事との照合(タイトルは重複しない前提)
    • タクソノミータームが存在しない場合、新規作成を行います
    • タクソノミーターム名を照合してインポートします
  • csvデータをインポートしたら新規作成したタクソノミータームの確認

モジュール(Feeds tamper term hierarchy)で階層化されたcsvタクソノミータームデータのインポート

  • 必要なモジュール:Feeds tamper term hierarchy(サンドボックスプロジェクト、ダウンロードはここ)
  • 以下のような階層化されたcsvタクソノミータームデータをインポートします
    Drupalのモジュール(Feeds tamper term hierarchy)で階層化されたタクソノミータームのインポート
  • 具体的なインポート方法はビデオを確認してください。
  • 既存のタクソノミータームのデータマッピング時に以下の注意点:
    • 既存のタクソノミータームの新規作成チェックを外します(Feeds tamper term hierarchyが同じ機能があったため)
    • タクソノミーターム検索は「名前」ではなく、タームIDで検索するとの設定
  • TamperのFeeds tamper term hierarchyで設定は、「Term hierarchy separator」(csvデータのターム親子区切り)がインポートデータにある区切り記号と一致していることの確認
Embedded thumbnail for Drupalのモジュール(Feeds)で階層化されたタクソノミータームのインポート
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

モジュール(Feeds)が非階層化されているタクソノミータームのインポートが可能

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのcsvファイルインポートについて、「Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考にしてください。
  • 非階層化のタクソノミータームcsvデータは以下のよう
    DrupalのFeedsで非階層化のタクソノミータームのインポート
  • タクソノミータームのインポート操作はビデオを参考にしてください
  • プロセッサーのマッピング設定ポイント:
    • 記事のタイトルをキーにして、タイトルでインポートデータを記事との照合(タイトルは重複しない前提)
    • タクソノミータームが存在しない場合、新規作成を行います
    • タクソノミーターム名を照合してインポートします
  • csvデータをインポートしたら新規作成したタクソノミータームの確認

モジュール(Feeds tamper term hierarchy)で階層化されたcsvタクソノミータームデータのインポート

  • 必要なモジュール:Feeds tamper term hierarchy(サンドボックスプロジェクト、ダウンロードはここ)
  • 以下のような階層化されたcsvタクソノミータームデータをインポートします
    Drupalのモジュール(Feeds tamper term hierarchy)で階層化されたタクソノミータームのインポート
  • 具体的なインポート方法はビデオを確認してください。
  • 既存のタクソノミータームのデータマッピング時に以下の注意点:
    • 既存のタクソノミータームの新規作成チェックを外します(Feeds tamper term hierarchyが同じ機能があったため)
    • タクソノミーターム検索は「名前」ではなく、タームIDで検索するとの設定
  • TamperのFeeds tamper term hierarchyで設定は、「Term hierarchy separator」(csvデータのターム親子区切り)がインポートデータにある区切り記号と一致していることの確認
Embedded thumbnail for Drupalのモジュール(Feeds)で階層化されたタクソノミータームのインポート
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

モジュール(Feeds)が非階層化されているタクソノミータームのインポートが可能

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのcsvファイルインポートについて、「Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考にしてください。
  • 非階層化のタクソノミータームcsvデータは以下のよう
    DrupalのFeedsで非階層化のタクソノミータームのインポート
  • タクソノミータームのインポート操作はビデオを参考にしてください
  • プロセッサーのマッピング設定ポイント:
    • 記事のタイトルをキーにして、タイトルでインポートデータを記事との照合(タイトルは重複しない前提)
    • タクソノミータームが存在しない場合、新規作成を行います
    • タクソノミーターム名を照合してインポートします
  • csvデータをインポートしたら新規作成したタクソノミータームの確認

モジュール(Feeds tamper term hierarchy)で階層化されたcsvタクソノミータームデータのインポート

  • 必要なモジュール:Feeds tamper term hierarchy(サンドボックスプロジェクト、ダウンロードはここ)
  • 以下のような階層化されたcsvタクソノミータームデータをインポートします
    Drupalのモジュール(Feeds tamper term hierarchy)で階層化されたタクソノミータームのインポート
  • 具体的なインポート方法はビデオを確認してください。
  • 既存のタクソノミータームのデータマッピング時に以下の注意点:
    • 既存のタクソノミータームの新規作成チェックを外します(Feeds tamper term hierarchyが同じ機能があったため)
    • タクソノミーターム検索は「名前」ではなく、タームIDで検索するとの設定
  • TamperのFeeds tamper term hierarchyで設定は、「Term hierarchy separator」(csvデータのターム親子区切り)がインポートデータにある区切り記号と一致していることの確認
Embedded thumbnail for Drupalのモジュール(Feeds)で階層化されたタクソノミータームのインポート
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

モジュール(Feeds)が非階層化されているタクソノミータームのインポートが可能

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのcsvファイルインポートについて、「Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考にしてください。
  • 非階層化のタクソノミータームcsvデータは以下のよう
    DrupalのFeedsで非階層化のタクソノミータームのインポート
  • タクソノミータームのインポート操作はビデオを参考にしてください
  • プロセッサーのマッピング設定ポイント:
    • 記事のタイトルをキーにして、タイトルでインポートデータを記事との照合(タイトルは重複しない前提)
    • タクソノミータームが存在しない場合、新規作成を行います
    • タクソノミーターム名を照合してインポートします
  • csvデータをインポートしたら新規作成したタクソノミータームの確認

モジュール(Feeds tamper term hierarchy)で階層化されたcsvタクソノミータームデータのインポート

  • 必要なモジュール:Feeds tamper term hierarchy(サンドボックスプロジェクト、ダウンロードはここ)
  • 以下のような階層化されたcsvタクソノミータームデータをインポートします
    Drupalのモジュール(Feeds tamper term hierarchy)で階層化されたタクソノミータームのインポート
  • 具体的なインポート方法はビデオを確認してください。
  • 既存のタクソノミータームのデータマッピング時に以下の注意点:
    • 既存のタクソノミータームの新規作成チェックを外します(Feeds tamper term hierarchyが同じ機能があったため)
    • タクソノミーターム検索は「名前」ではなく、タームIDで検索するとの設定
  • TamperのFeeds tamper term hierarchyで設定は、「Term hierarchy separator」(csvデータのターム親子区切り)がインポートデータにある区切り記号と一致していることの確認
Embedded thumbnail for Drupalのモジュール(Feeds)で階層化されたタクソノミータームのインポート
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

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

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

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

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

やりたいこと:モジュール(Feeds)でのデータマッピング時にPHPコードでフィールド値を加工する

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Tamper7.x-1.1、Feeds Tamper PHP7.x1.2
  • Feedsデータインポートの基本は「 Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考してください
  • データマッピングに、各インポートフィールドの値を加工するため、Feeds Tamperモジュールが良く利用します
  • この中に、特殊なフィールド値加工(例:既存のデータを取得するなど)のためFeeds Tamper PHPを利用して、PHPスクリプトの実行ができます
  • Feeds Tamper PHPでインポートデータの扱い、以下のパラメーターで、任意のフィールドの値の利用ができます
    • $field: 渡されたフィールドの値
    • $item['フィールド名']: インポート元で定義していたフィールド名でその値を取得する
      Drupalのモジュール(Feeds)のデータマッピング時にFeedsTamperでのPHPコードより各フィールドの値を加工します
  • 任意のフィールド(例:body)で他のフィールドの値(例:title)の取得することができます

注意点:PHPコード実行のセキュリティ問題とパフォーマンスへの影響

  • PHPコードを実行するには、eval()関数で行うため、任意のPHPコードの実行が可能となります
  • 特にインポートが公開の場合、PHPコード実行のセキュリティ問題を注意深く対応すべきです
  • また、データ取得したり、多くループをしたりして、パフォーマンスへの影響が考えるべきです
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

問題点:モジュール(Feeds)でデータインポート時に間違って設定があった場合インポートエラーなどが発生

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Import Previews7.x-1.x
  • 複雑なデータマッピング設定(例:Feeds Tamperなどで)時に、間違いやすくなります。その場合実際のデータをインポートで確認する必要があります
  • 間違った設定より、データインポートエラーなどが発生します

解決:モジュール(Feeds Import Preview)でインポート設定を確認します

  • モジュール(Feeds Import Preview)でデータインポート直前のステップまでに進んで、実際のインポート設定の確認ができます
    Drupalのモジュール(Feeds Import Preview)でデータインポート設定の確認ができます
  • 実際にソースから各フィールドの値が表示されています。
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
feeds
module usage

やりたいこと:コンテンツ(例:記事)のbodyフィールドの多言語データのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Entity Translation7.x-1.0
  • コンテンツのbody以外のフィールドがEntity Translation有効であれば、Feedsのデータマッピングで複数の言語のターゲットが現れます
    • drupalのfeedsで多言語コンテンツデータのインポート
  • BodyにEntity Translation有効の場合にマッピングでのターゲットが一つしかありません
  • 複数回でそれぞれの言語データをインポートします
    DrupalのFeedsで多言語bodyデータのインポート

FeedsのNode Processor設定画面でコンテンツ(例:記事)の初期言語を設定

  • コンテンツの元言語を設定する必要があります(もし、設定しなければ多言語の表示に影響しないが、コンテンツの翻訳タグが表示されない)
  • Node Processor設定画面でノートの言語を選択して、データインポート時に設定してくれます(ビデオを参考)

Feedsのマッピング設定画面でbodyのインポート言語設定を行います

  • データマッピング管理画面でbodyフィールドに言語設定があります
    データマッピング管理画面でbodyフィールドの言語設定
  • 複数の言語に対して複数のインポーターを用意するか、複数回で言語設定を行います

各言語に応じて複数回を分けてデータインポートする必要があります

  • 言語ごとにデータインポートする必要があります
    • 一括して同一フィールドに複数の言語インポートができません
  • 具体的なステップはビデオを参考してください
Embedded thumbnail for 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
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
system_management

モジュール(Localization Update)でサイトの多言語ユーザーインターフェースを導入します

  • 背景:Drupal7.54、Localization Update7.x-2.1
  • モジュール(Localization Update)をインストール/有効化します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)で「言語を追加」リンクをクリックすると、必要なユーザーインターフェース言語の導入ができます

管理者がサイト単位でユーザーインターフェース言語の一括設定(ほかの言語を使用しない)

  • Druaplを初期インストール(英語バージョンの場合)後に、別の言語(例:日本語)を導入し、その言語のみを使用します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)でのデフォルト値を選択すればよいです
    サイト単位の言語設定
  • サイト管理者が選択してから、一般ユーザーの選択はできません。

複数の言語をユーザーインターフェースとして利用する場合に、URL/ブラウザ/セッション/ユーザーの言語設定などよりサイトの言語自動判別ができます

  • 複数のユーザーインターフェース言語がある場合、どれを使用するかは決める必要があります
  • 言語判別設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語 » 判別と選択)言語利用の判別条件を設定します
    言語の判別設定と判別順序設定
    • URL: URLから言語を判定する(パス接頭語かドメイン)
    • セッション: 言語をrequest/sessionパラメーターから判定する。
    • ブラウザ: ブラウザーの言語設定から言語を判定する。
    • ユーザー: ユーザープロフィールで設定した言語に従う。
    • デフォルト: サイトのデフォルト言語を使う
  • 上記判別方法のい任意、または全部の選択はできます
  • 判別の優先順のソートができます
  • URLで言語判断設定した場合、URLのドメイン/パス接頭語の設定が必要となります
    言語判別のURLドメイン/パス接頭語設定
    • 「言語のドメイン」と「言語コードのパス接頭語」のどちらかの設定(両方の設定はできない)
    • 設定された方式で言語を判別となります
    • 説明の言葉通りに、一度設定したら、変更時にすでに存在しているパスが使用できなくなりますので、ご注意ください(変更後にすべてのパスを再構築などの作業が必要)
      言語判定URLの設定
Embedded thumbnail for Drupalの多言語ユーザーインターフェースの導入と設定
drupal
video
feeds

やりたいこと:Feedsで多言語コンテンツデータのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Feeds:Enity Translation7.x-1.0
  • モジュール:Entity Translationで多言語サイトを構築しています
  • 複数の言語コンテンツをデータ移行したいです
  • いろいろ調べてみてた、同一フィールドに多言語インポート方法が少なく、難しそうです

解決方法:モジュール(Feeds:Entity Translation)で多言語コンテンツデータの移行

  • 多言語コンテンツデータ移行をサポートするモジュールがあまり多くないようで、一つモジュール(Feeds: Entity Translation)を見つけました
  • モジュール(Feeds: Entity Translation)をインストール/有効化したら、Feedsのデータマッピング管理画面に、多言語有効なフィールドの各言語対応ターゲットが現れます
    多言語コンテンツデータ移行にサポートするFeeds: Entity Translation
  • 同一フィールドの各言語対応ターゲットを選択して多言語コンテンツインポートができました
Embedded thumbnail for DrupalのFeedsで多言語コンテンツデータのインポート
drupal
feeds
module usage

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

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

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

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

やりたいこと:モジュール(Feeds)でのデータマッピング時にPHPコードでフィールド値を加工する

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Tamper7.x-1.1、Feeds Tamper PHP7.x1.2
  • Feedsデータインポートの基本は「 Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考してください
  • データマッピングに、各インポートフィールドの値を加工するため、Feeds Tamperモジュールが良く利用します
  • この中に、特殊なフィールド値加工(例:既存のデータを取得するなど)のためFeeds Tamper PHPを利用して、PHPスクリプトの実行ができます
  • Feeds Tamper PHPでインポートデータの扱い、以下のパラメーターで、任意のフィールドの値の利用ができます
    • $field: 渡されたフィールドの値
    • $item['フィールド名']: インポート元で定義していたフィールド名でその値を取得する
      Drupalのモジュール(Feeds)のデータマッピング時にFeedsTamperでのPHPコードより各フィールドの値を加工します
  • 任意のフィールド(例:body)で他のフィールドの値(例:title)の取得することができます

注意点:PHPコード実行のセキュリティ問題とパフォーマンスへの影響

  • PHPコードを実行するには、eval()関数で行うため、任意のPHPコードの実行が可能となります
  • 特にインポートが公開の場合、PHPコード実行のセキュリティ問題を注意深く対応すべきです
  • また、データ取得したり、多くループをしたりして、パフォーマンスへの影響が考えるべきです
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

問題点:モジュール(Feeds)でデータインポート時に間違って設定があった場合インポートエラーなどが発生

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Import Previews7.x-1.x
  • 複雑なデータマッピング設定(例:Feeds Tamperなどで)時に、間違いやすくなります。その場合実際のデータをインポートで確認する必要があります
  • 間違った設定より、データインポートエラーなどが発生します

解決:モジュール(Feeds Import Preview)でインポート設定を確認します

  • モジュール(Feeds Import Preview)でデータインポート直前のステップまでに進んで、実際のインポート設定の確認ができます
    Drupalのモジュール(Feeds Import Preview)でデータインポート設定の確認ができます
  • 実際にソースから各フィールドの値が表示されています。
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
feeds
module usage

やりたいこと:コンテンツ(例:記事)のbodyフィールドの多言語データのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Entity Translation7.x-1.0
  • コンテンツのbody以外のフィールドがEntity Translation有効であれば、Feedsのデータマッピングで複数の言語のターゲットが現れます
    • drupalのfeedsで多言語コンテンツデータのインポート
  • BodyにEntity Translation有効の場合にマッピングでのターゲットが一つしかありません
  • 複数回でそれぞれの言語データをインポートします
    DrupalのFeedsで多言語bodyデータのインポート

FeedsのNode Processor設定画面でコンテンツ(例:記事)の初期言語を設定

  • コンテンツの元言語を設定する必要があります(もし、設定しなければ多言語の表示に影響しないが、コンテンツの翻訳タグが表示されない)
  • Node Processor設定画面でノートの言語を選択して、データインポート時に設定してくれます(ビデオを参考)

Feedsのマッピング設定画面でbodyのインポート言語設定を行います

  • データマッピング管理画面でbodyフィールドに言語設定があります
    データマッピング管理画面でbodyフィールドの言語設定
  • 複数の言語に対して複数のインポーターを用意するか、複数回で言語設定を行います

各言語に応じて複数回を分けてデータインポートする必要があります

  • 言語ごとにデータインポートする必要があります
    • 一括して同一フィールドに複数の言語インポートができません
  • 具体的なステップはビデオを参考してください
Embedded thumbnail for 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
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
system_management

モジュール(Localization Update)でサイトの多言語ユーザーインターフェースを導入します

  • 背景:Drupal7.54、Localization Update7.x-2.1
  • モジュール(Localization Update)をインストール/有効化します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)で「言語を追加」リンクをクリックすると、必要なユーザーインターフェース言語の導入ができます

管理者がサイト単位でユーザーインターフェース言語の一括設定(ほかの言語を使用しない)

  • Druaplを初期インストール(英語バージョンの場合)後に、別の言語(例:日本語)を導入し、その言語のみを使用します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)でのデフォルト値を選択すればよいです
    サイト単位の言語設定
  • サイト管理者が選択してから、一般ユーザーの選択はできません。

複数の言語をユーザーインターフェースとして利用する場合に、URL/ブラウザ/セッション/ユーザーの言語設定などよりサイトの言語自動判別ができます

  • 複数のユーザーインターフェース言語がある場合、どれを使用するかは決める必要があります
  • 言語判別設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語 » 判別と選択)言語利用の判別条件を設定します
    言語の判別設定と判別順序設定
    • URL: URLから言語を判定する(パス接頭語かドメイン)
    • セッション: 言語をrequest/sessionパラメーターから判定する。
    • ブラウザ: ブラウザーの言語設定から言語を判定する。
    • ユーザー: ユーザープロフィールで設定した言語に従う。
    • デフォルト: サイトのデフォルト言語を使う
  • 上記判別方法のい任意、または全部の選択はできます
  • 判別の優先順のソートができます
  • URLで言語判断設定した場合、URLのドメイン/パス接頭語の設定が必要となります
    言語判別のURLドメイン/パス接頭語設定
    • 「言語のドメイン」と「言語コードのパス接頭語」のどちらかの設定(両方の設定はできない)
    • 設定された方式で言語を判別となります
    • 説明の言葉通りに、一度設定したら、変更時にすでに存在しているパスが使用できなくなりますので、ご注意ください(変更後にすべてのパスを再構築などの作業が必要)
      言語判定URLの設定
Embedded thumbnail for Drupalの多言語ユーザーインターフェースの導入と設定
drupal
video
feeds

やりたいこと:Feedsで多言語コンテンツデータのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Feeds:Enity Translation7.x-1.0
  • モジュール:Entity Translationで多言語サイトを構築しています
  • 複数の言語コンテンツをデータ移行したいです
  • いろいろ調べてみてた、同一フィールドに多言語インポート方法が少なく、難しそうです

解決方法:モジュール(Feeds:Entity Translation)で多言語コンテンツデータの移行

  • 多言語コンテンツデータ移行をサポートするモジュールがあまり多くないようで、一つモジュール(Feeds: Entity Translation)を見つけました
  • モジュール(Feeds: Entity Translation)をインストール/有効化したら、Feedsのデータマッピング管理画面に、多言語有効なフィールドの各言語対応ターゲットが現れます
    多言語コンテンツデータ移行にサポートするFeeds: Entity Translation
  • 同一フィールドの各言語対応ターゲットを選択して多言語コンテンツインポートができました
Embedded thumbnail for DrupalのFeedsで多言語コンテンツデータのインポート
drupal
feeds
module usage

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

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

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

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

やりたいこと:モジュール(Feeds)でのデータマッピング時にPHPコードでフィールド値を加工する

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Tamper7.x-1.1、Feeds Tamper PHP7.x1.2
  • Feedsデータインポートの基本は「 Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考してください
  • データマッピングに、各インポートフィールドの値を加工するため、Feeds Tamperモジュールが良く利用します
  • この中に、特殊なフィールド値加工(例:既存のデータを取得するなど)のためFeeds Tamper PHPを利用して、PHPスクリプトの実行ができます
  • Feeds Tamper PHPでインポートデータの扱い、以下のパラメーターで、任意のフィールドの値の利用ができます
    • $field: 渡されたフィールドの値
    • $item['フィールド名']: インポート元で定義していたフィールド名でその値を取得する
      Drupalのモジュール(Feeds)のデータマッピング時にFeedsTamperでのPHPコードより各フィールドの値を加工します
  • 任意のフィールド(例:body)で他のフィールドの値(例:title)の取得することができます

注意点:PHPコード実行のセキュリティ問題とパフォーマンスへの影響

  • PHPコードを実行するには、eval()関数で行うため、任意のPHPコードの実行が可能となります
  • 特にインポートが公開の場合、PHPコード実行のセキュリティ問題を注意深く対応すべきです
  • また、データ取得したり、多くループをしたりして、パフォーマンスへの影響が考えるべきです
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

問題点:モジュール(Feeds)でデータインポート時に間違って設定があった場合インポートエラーなどが発生

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Import Previews7.x-1.x
  • 複雑なデータマッピング設定(例:Feeds Tamperなどで)時に、間違いやすくなります。その場合実際のデータをインポートで確認する必要があります
  • 間違った設定より、データインポートエラーなどが発生します

解決:モジュール(Feeds Import Preview)でインポート設定を確認します

  • モジュール(Feeds Import Preview)でデータインポート直前のステップまでに進んで、実際のインポート設定の確認ができます
    Drupalのモジュール(Feeds Import Preview)でデータインポート設定の確認ができます
  • 実際にソースから各フィールドの値が表示されています。
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
feeds
module usage

やりたいこと:コンテンツ(例:記事)のbodyフィールドの多言語データのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Entity Translation7.x-1.0
  • コンテンツのbody以外のフィールドがEntity Translation有効であれば、Feedsのデータマッピングで複数の言語のターゲットが現れます
    • drupalのfeedsで多言語コンテンツデータのインポート
  • BodyにEntity Translation有効の場合にマッピングでのターゲットが一つしかありません
  • 複数回でそれぞれの言語データをインポートします
    DrupalのFeedsで多言語bodyデータのインポート

FeedsのNode Processor設定画面でコンテンツ(例:記事)の初期言語を設定

  • コンテンツの元言語を設定する必要があります(もし、設定しなければ多言語の表示に影響しないが、コンテンツの翻訳タグが表示されない)
  • Node Processor設定画面でノートの言語を選択して、データインポート時に設定してくれます(ビデオを参考)

Feedsのマッピング設定画面でbodyのインポート言語設定を行います

  • データマッピング管理画面でbodyフィールドに言語設定があります
    データマッピング管理画面でbodyフィールドの言語設定
  • 複数の言語に対して複数のインポーターを用意するか、複数回で言語設定を行います

各言語に応じて複数回を分けてデータインポートする必要があります

  • 言語ごとにデータインポートする必要があります
    • 一括して同一フィールドに複数の言語インポートができません
  • 具体的なステップはビデオを参考してください
Embedded thumbnail for 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
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
system_management

モジュール(Localization Update)でサイトの多言語ユーザーインターフェースを導入します

  • 背景:Drupal7.54、Localization Update7.x-2.1
  • モジュール(Localization Update)をインストール/有効化します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)で「言語を追加」リンクをクリックすると、必要なユーザーインターフェース言語の導入ができます

管理者がサイト単位でユーザーインターフェース言語の一括設定(ほかの言語を使用しない)

  • Druaplを初期インストール(英語バージョンの場合)後に、別の言語(例:日本語)を導入し、その言語のみを使用します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)でのデフォルト値を選択すればよいです
    サイト単位の言語設定
  • サイト管理者が選択してから、一般ユーザーの選択はできません。

複数の言語をユーザーインターフェースとして利用する場合に、URL/ブラウザ/セッション/ユーザーの言語設定などよりサイトの言語自動判別ができます

  • 複数のユーザーインターフェース言語がある場合、どれを使用するかは決める必要があります
  • 言語判別設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語 » 判別と選択)言語利用の判別条件を設定します
    言語の判別設定と判別順序設定
    • URL: URLから言語を判定する(パス接頭語かドメイン)
    • セッション: 言語をrequest/sessionパラメーターから判定する。
    • ブラウザ: ブラウザーの言語設定から言語を判定する。
    • ユーザー: ユーザープロフィールで設定した言語に従う。
    • デフォルト: サイトのデフォルト言語を使う
  • 上記判別方法のい任意、または全部の選択はできます
  • 判別の優先順のソートができます
  • URLで言語判断設定した場合、URLのドメイン/パス接頭語の設定が必要となります
    言語判別のURLドメイン/パス接頭語設定
    • 「言語のドメイン」と「言語コードのパス接頭語」のどちらかの設定(両方の設定はできない)
    • 設定された方式で言語を判別となります
    • 説明の言葉通りに、一度設定したら、変更時にすでに存在しているパスが使用できなくなりますので、ご注意ください(変更後にすべてのパスを再構築などの作業が必要)
      言語判定URLの設定
Embedded thumbnail for Drupalの多言語ユーザーインターフェースの導入と設定
drupal
video
feeds

やりたいこと:Feedsで多言語コンテンツデータのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Feeds:Enity Translation7.x-1.0
  • モジュール:Entity Translationで多言語サイトを構築しています
  • 複数の言語コンテンツをデータ移行したいです
  • いろいろ調べてみてた、同一フィールドに多言語インポート方法が少なく、難しそうです

解決方法:モジュール(Feeds:Entity Translation)で多言語コンテンツデータの移行

  • 多言語コンテンツデータ移行をサポートするモジュールがあまり多くないようで、一つモジュール(Feeds: Entity Translation)を見つけました
  • モジュール(Feeds: Entity Translation)をインストール/有効化したら、Feedsのデータマッピング管理画面に、多言語有効なフィールドの各言語対応ターゲットが現れます
    多言語コンテンツデータ移行にサポートするFeeds: Entity Translation
  • 同一フィールドの各言語対応ターゲットを選択して多言語コンテンツインポートができました
Embedded thumbnail for DrupalのFeedsで多言語コンテンツデータのインポート
drupal
feeds
module usage

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

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

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

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

やりたいこと:モジュール(Feeds)でのデータマッピング時にPHPコードでフィールド値を加工する

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Tamper7.x-1.1、Feeds Tamper PHP7.x1.2
  • Feedsデータインポートの基本は「 Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考してください
  • データマッピングに、各インポートフィールドの値を加工するため、Feeds Tamperモジュールが良く利用します
  • この中に、特殊なフィールド値加工(例:既存のデータを取得するなど)のためFeeds Tamper PHPを利用して、PHPスクリプトの実行ができます
  • Feeds Tamper PHPでインポートデータの扱い、以下のパラメーターで、任意のフィールドの値の利用ができます
    • $field: 渡されたフィールドの値
    • $item['フィールド名']: インポート元で定義していたフィールド名でその値を取得する
      Drupalのモジュール(Feeds)のデータマッピング時にFeedsTamperでのPHPコードより各フィールドの値を加工します
  • 任意のフィールド(例:body)で他のフィールドの値(例:title)の取得することができます

注意点:PHPコード実行のセキュリティ問題とパフォーマンスへの影響

  • PHPコードを実行するには、eval()関数で行うため、任意のPHPコードの実行が可能となります
  • 特にインポートが公開の場合、PHPコード実行のセキュリティ問題を注意深く対応すべきです
  • また、データ取得したり、多くループをしたりして、パフォーマンスへの影響が考えるべきです
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

問題点:モジュール(Feeds)でデータインポート時に間違って設定があった場合インポートエラーなどが発生

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Import Previews7.x-1.x
  • 複雑なデータマッピング設定(例:Feeds Tamperなどで)時に、間違いやすくなります。その場合実際のデータをインポートで確認する必要があります
  • 間違った設定より、データインポートエラーなどが発生します

解決:モジュール(Feeds Import Preview)でインポート設定を確認します

  • モジュール(Feeds Import Preview)でデータインポート直前のステップまでに進んで、実際のインポート設定の確認ができます
    Drupalのモジュール(Feeds Import Preview)でデータインポート設定の確認ができます
  • 実際にソースから各フィールドの値が表示されています。
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
feeds
module usage

やりたいこと:コンテンツ(例:記事)のbodyフィールドの多言語データのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Entity Translation7.x-1.0
  • コンテンツのbody以外のフィールドがEntity Translation有効であれば、Feedsのデータマッピングで複数の言語のターゲットが現れます
    • drupalのfeedsで多言語コンテンツデータのインポート
  • BodyにEntity Translation有効の場合にマッピングでのターゲットが一つしかありません
  • 複数回でそれぞれの言語データをインポートします
    DrupalのFeedsで多言語bodyデータのインポート

FeedsのNode Processor設定画面でコンテンツ(例:記事)の初期言語を設定

  • コンテンツの元言語を設定する必要があります(もし、設定しなければ多言語の表示に影響しないが、コンテンツの翻訳タグが表示されない)
  • Node Processor設定画面でノートの言語を選択して、データインポート時に設定してくれます(ビデオを参考)

Feedsのマッピング設定画面でbodyのインポート言語設定を行います

  • データマッピング管理画面でbodyフィールドに言語設定があります
    データマッピング管理画面でbodyフィールドの言語設定
  • 複数の言語に対して複数のインポーターを用意するか、複数回で言語設定を行います

各言語に応じて複数回を分けてデータインポートする必要があります

  • 言語ごとにデータインポートする必要があります
    • 一括して同一フィールドに複数の言語インポートができません
  • 具体的なステップはビデオを参考してください
Embedded thumbnail for 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
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
system_management

モジュール(Localization Update)でサイトの多言語ユーザーインターフェースを導入します

  • 背景:Drupal7.54、Localization Update7.x-2.1
  • モジュール(Localization Update)をインストール/有効化します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)で「言語を追加」リンクをクリックすると、必要なユーザーインターフェース言語の導入ができます

管理者がサイト単位でユーザーインターフェース言語の一括設定(ほかの言語を使用しない)

  • Druaplを初期インストール(英語バージョンの場合)後に、別の言語(例:日本語)を導入し、その言語のみを使用します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)でのデフォルト値を選択すればよいです
    サイト単位の言語設定
  • サイト管理者が選択してから、一般ユーザーの選択はできません。

複数の言語をユーザーインターフェースとして利用する場合に、URL/ブラウザ/セッション/ユーザーの言語設定などよりサイトの言語自動判別ができます

  • 複数のユーザーインターフェース言語がある場合、どれを使用するかは決める必要があります
  • 言語判別設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語 » 判別と選択)言語利用の判別条件を設定します
    言語の判別設定と判別順序設定
    • URL: URLから言語を判定する(パス接頭語かドメイン)
    • セッション: 言語をrequest/sessionパラメーターから判定する。
    • ブラウザ: ブラウザーの言語設定から言語を判定する。
    • ユーザー: ユーザープロフィールで設定した言語に従う。
    • デフォルト: サイトのデフォルト言語を使う
  • 上記判別方法のい任意、または全部の選択はできます
  • 判別の優先順のソートができます
  • URLで言語判断設定した場合、URLのドメイン/パス接頭語の設定が必要となります
    言語判別のURLドメイン/パス接頭語設定
    • 「言語のドメイン」と「言語コードのパス接頭語」のどちらかの設定(両方の設定はできない)
    • 設定された方式で言語を判別となります
    • 説明の言葉通りに、一度設定したら、変更時にすでに存在しているパスが使用できなくなりますので、ご注意ください(変更後にすべてのパスを再構築などの作業が必要)
      言語判定URLの設定
Embedded thumbnail for Drupalの多言語ユーザーインターフェースの導入と設定
drupal
video
feeds

やりたいこと:Feedsで多言語コンテンツデータのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Feeds:Enity Translation7.x-1.0
  • モジュール:Entity Translationで多言語サイトを構築しています
  • 複数の言語コンテンツをデータ移行したいです
  • いろいろ調べてみてた、同一フィールドに多言語インポート方法が少なく、難しそうです

解決方法:モジュール(Feeds:Entity Translation)で多言語コンテンツデータの移行

  • 多言語コンテンツデータ移行をサポートするモジュールがあまり多くないようで、一つモジュール(Feeds: Entity Translation)を見つけました
  • モジュール(Feeds: Entity Translation)をインストール/有効化したら、Feedsのデータマッピング管理画面に、多言語有効なフィールドの各言語対応ターゲットが現れます
    多言語コンテンツデータ移行にサポートするFeeds: Entity Translation
  • 同一フィールドの各言語対応ターゲットを選択して多言語コンテンツインポートができました
Embedded thumbnail for DrupalのFeedsで多言語コンテンツデータのインポート
drupal
feeds
module usage

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

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

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

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

やりたいこと:モジュール(Feeds)でのデータマッピング時にPHPコードでフィールド値を加工する

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Tamper7.x-1.1、Feeds Tamper PHP7.x1.2
  • Feedsデータインポートの基本は「 Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考してください
  • データマッピングに、各インポートフィールドの値を加工するため、Feeds Tamperモジュールが良く利用します
  • この中に、特殊なフィールド値加工(例:既存のデータを取得するなど)のためFeeds Tamper PHPを利用して、PHPスクリプトの実行ができます
  • Feeds Tamper PHPでインポートデータの扱い、以下のパラメーターで、任意のフィールドの値の利用ができます
    • $field: 渡されたフィールドの値
    • $item['フィールド名']: インポート元で定義していたフィールド名でその値を取得する
      Drupalのモジュール(Feeds)のデータマッピング時にFeedsTamperでのPHPコードより各フィールドの値を加工します
  • 任意のフィールド(例:body)で他のフィールドの値(例:title)の取得することができます

注意点:PHPコード実行のセキュリティ問題とパフォーマンスへの影響

  • PHPコードを実行するには、eval()関数で行うため、任意のPHPコードの実行が可能となります
  • 特にインポートが公開の場合、PHPコード実行のセキュリティ問題を注意深く対応すべきです
  • また、データ取得したり、多くループをしたりして、パフォーマンスへの影響が考えるべきです
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

問題点:モジュール(Feeds)でデータインポート時に間違って設定があった場合インポートエラーなどが発生

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Import Previews7.x-1.x
  • 複雑なデータマッピング設定(例:Feeds Tamperなどで)時に、間違いやすくなります。その場合実際のデータをインポートで確認する必要があります
  • 間違った設定より、データインポートエラーなどが発生します

解決:モジュール(Feeds Import Preview)でインポート設定を確認します

  • モジュール(Feeds Import Preview)でデータインポート直前のステップまでに進んで、実際のインポート設定の確認ができます
    Drupalのモジュール(Feeds Import Preview)でデータインポート設定の確認ができます
  • 実際にソースから各フィールドの値が表示されています。
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
feeds
module usage

やりたいこと:コンテンツ(例:記事)のbodyフィールドの多言語データのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Entity Translation7.x-1.0
  • コンテンツのbody以外のフィールドがEntity Translation有効であれば、Feedsのデータマッピングで複数の言語のターゲットが現れます
    • drupalのfeedsで多言語コンテンツデータのインポート
  • BodyにEntity Translation有効の場合にマッピングでのターゲットが一つしかありません
  • 複数回でそれぞれの言語データをインポートします
    DrupalのFeedsで多言語bodyデータのインポート

FeedsのNode Processor設定画面でコンテンツ(例:記事)の初期言語を設定

  • コンテンツの元言語を設定する必要があります(もし、設定しなければ多言語の表示に影響しないが、コンテンツの翻訳タグが表示されない)
  • Node Processor設定画面でノートの言語を選択して、データインポート時に設定してくれます(ビデオを参考)

Feedsのマッピング設定画面でbodyのインポート言語設定を行います

  • データマッピング管理画面でbodyフィールドに言語設定があります
    データマッピング管理画面でbodyフィールドの言語設定
  • 複数の言語に対して複数のインポーターを用意するか、複数回で言語設定を行います

各言語に応じて複数回を分けてデータインポートする必要があります

  • 言語ごとにデータインポートする必要があります
    • 一括して同一フィールドに複数の言語インポートができません
  • 具体的なステップはビデオを参考してください
Embedded thumbnail for 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
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
system_management

モジュール(Localization Update)でサイトの多言語ユーザーインターフェースを導入します

  • 背景:Drupal7.54、Localization Update7.x-2.1
  • モジュール(Localization Update)をインストール/有効化します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)で「言語を追加」リンクをクリックすると、必要なユーザーインターフェース言語の導入ができます

管理者がサイト単位でユーザーインターフェース言語の一括設定(ほかの言語を使用しない)

  • Druaplを初期インストール(英語バージョンの場合)後に、別の言語(例:日本語)を導入し、その言語のみを使用します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)でのデフォルト値を選択すればよいです
    サイト単位の言語設定
  • サイト管理者が選択してから、一般ユーザーの選択はできません。

複数の言語をユーザーインターフェースとして利用する場合に、URL/ブラウザ/セッション/ユーザーの言語設定などよりサイトの言語自動判別ができます

  • 複数のユーザーインターフェース言語がある場合、どれを使用するかは決める必要があります
  • 言語判別設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語 » 判別と選択)言語利用の判別条件を設定します
    言語の判別設定と判別順序設定
    • URL: URLから言語を判定する(パス接頭語かドメイン)
    • セッション: 言語をrequest/sessionパラメーターから判定する。
    • ブラウザ: ブラウザーの言語設定から言語を判定する。
    • ユーザー: ユーザープロフィールで設定した言語に従う。
    • デフォルト: サイトのデフォルト言語を使う
  • 上記判別方法のい任意、または全部の選択はできます
  • 判別の優先順のソートができます
  • URLで言語判断設定した場合、URLのドメイン/パス接頭語の設定が必要となります
    言語判別のURLドメイン/パス接頭語設定
    • 「言語のドメイン」と「言語コードのパス接頭語」のどちらかの設定(両方の設定はできない)
    • 設定された方式で言語を判別となります
    • 説明の言葉通りに、一度設定したら、変更時にすでに存在しているパスが使用できなくなりますので、ご注意ください(変更後にすべてのパスを再構築などの作業が必要)
      言語判定URLの設定
Embedded thumbnail for Drupalの多言語ユーザーインターフェースの導入と設定
drupal
video
feeds

やりたいこと:Feedsで多言語コンテンツデータのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Feeds:Enity Translation7.x-1.0
  • モジュール:Entity Translationで多言語サイトを構築しています
  • 複数の言語コンテンツをデータ移行したいです
  • いろいろ調べてみてた、同一フィールドに多言語インポート方法が少なく、難しそうです

解決方法:モジュール(Feeds:Entity Translation)で多言語コンテンツデータの移行

  • 多言語コンテンツデータ移行をサポートするモジュールがあまり多くないようで、一つモジュール(Feeds: Entity Translation)を見つけました
  • モジュール(Feeds: Entity Translation)をインストール/有効化したら、Feedsのデータマッピング管理画面に、多言語有効なフィールドの各言語対応ターゲットが現れます
    多言語コンテンツデータ移行にサポートするFeeds: Entity Translation
  • 同一フィールドの各言語対応ターゲットを選択して多言語コンテンツインポートができました
Embedded thumbnail for DrupalのFeedsで多言語コンテンツデータのインポート
drupal
feeds
module usage

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

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

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

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

やりたいこと:モジュール(Feeds)でのデータマッピング時にPHPコードでフィールド値を加工する

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Tamper7.x-1.1、Feeds Tamper PHP7.x1.2
  • Feedsデータインポートの基本は「 Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考してください
  • データマッピングに、各インポートフィールドの値を加工するため、Feeds Tamperモジュールが良く利用します
  • この中に、特殊なフィールド値加工(例:既存のデータを取得するなど)のためFeeds Tamper PHPを利用して、PHPスクリプトの実行ができます
  • Feeds Tamper PHPでインポートデータの扱い、以下のパラメーターで、任意のフィールドの値の利用ができます
    • $field: 渡されたフィールドの値
    • $item['フィールド名']: インポート元で定義していたフィールド名でその値を取得する
      Drupalのモジュール(Feeds)のデータマッピング時にFeedsTamperでのPHPコードより各フィールドの値を加工します
  • 任意のフィールド(例:body)で他のフィールドの値(例:title)の取得することができます

注意点:PHPコード実行のセキュリティ問題とパフォーマンスへの影響

  • PHPコードを実行するには、eval()関数で行うため、任意のPHPコードの実行が可能となります
  • 特にインポートが公開の場合、PHPコード実行のセキュリティ問題を注意深く対応すべきです
  • また、データ取得したり、多くループをしたりして、パフォーマンスへの影響が考えるべきです
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

問題点:モジュール(Feeds)でデータインポート時に間違って設定があった場合インポートエラーなどが発生

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Import Previews7.x-1.x
  • 複雑なデータマッピング設定(例:Feeds Tamperなどで)時に、間違いやすくなります。その場合実際のデータをインポートで確認する必要があります
  • 間違った設定より、データインポートエラーなどが発生します

解決:モジュール(Feeds Import Preview)でインポート設定を確認します

  • モジュール(Feeds Import Preview)でデータインポート直前のステップまでに進んで、実際のインポート設定の確認ができます
    Drupalのモジュール(Feeds Import Preview)でデータインポート設定の確認ができます
  • 実際にソースから各フィールドの値が表示されています。
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
feeds
module usage

やりたいこと:コンテンツ(例:記事)のbodyフィールドの多言語データのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Entity Translation7.x-1.0
  • コンテンツのbody以外のフィールドがEntity Translation有効であれば、Feedsのデータマッピングで複数の言語のターゲットが現れます
    • drupalのfeedsで多言語コンテンツデータのインポート
  • BodyにEntity Translation有効の場合にマッピングでのターゲットが一つしかありません
  • 複数回でそれぞれの言語データをインポートします
    DrupalのFeedsで多言語bodyデータのインポート

FeedsのNode Processor設定画面でコンテンツ(例:記事)の初期言語を設定

  • コンテンツの元言語を設定する必要があります(もし、設定しなければ多言語の表示に影響しないが、コンテンツの翻訳タグが表示されない)
  • Node Processor設定画面でノートの言語を選択して、データインポート時に設定してくれます(ビデオを参考)

Feedsのマッピング設定画面でbodyのインポート言語設定を行います

  • データマッピング管理画面でbodyフィールドに言語設定があります
    データマッピング管理画面でbodyフィールドの言語設定
  • 複数の言語に対して複数のインポーターを用意するか、複数回で言語設定を行います

各言語に応じて複数回を分けてデータインポートする必要があります

  • 言語ごとにデータインポートする必要があります
    • 一括して同一フィールドに複数の言語インポートができません
  • 具体的なステップはビデオを参考してください
Embedded thumbnail for 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
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
system_management

モジュール(Localization Update)でサイトの多言語ユーザーインターフェースを導入します

  • 背景:Drupal7.54、Localization Update7.x-2.1
  • モジュール(Localization Update)をインストール/有効化します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)で「言語を追加」リンクをクリックすると、必要なユーザーインターフェース言語の導入ができます

管理者がサイト単位でユーザーインターフェース言語の一括設定(ほかの言語を使用しない)

  • Druaplを初期インストール(英語バージョンの場合)後に、別の言語(例:日本語)を導入し、その言語のみを使用します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)でのデフォルト値を選択すればよいです
    サイト単位の言語設定
  • サイト管理者が選択してから、一般ユーザーの選択はできません。

複数の言語をユーザーインターフェースとして利用する場合に、URL/ブラウザ/セッション/ユーザーの言語設定などよりサイトの言語自動判別ができます

  • 複数のユーザーインターフェース言語がある場合、どれを使用するかは決める必要があります
  • 言語判別設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語 » 判別と選択)言語利用の判別条件を設定します
    言語の判別設定と判別順序設定
    • URL: URLから言語を判定する(パス接頭語かドメイン)
    • セッション: 言語をrequest/sessionパラメーターから判定する。
    • ブラウザ: ブラウザーの言語設定から言語を判定する。
    • ユーザー: ユーザープロフィールで設定した言語に従う。
    • デフォルト: サイトのデフォルト言語を使う
  • 上記判別方法のい任意、または全部の選択はできます
  • 判別の優先順のソートができます
  • URLで言語判断設定した場合、URLのドメイン/パス接頭語の設定が必要となります
    言語判別のURLドメイン/パス接頭語設定
    • 「言語のドメイン」と「言語コードのパス接頭語」のどちらかの設定(両方の設定はできない)
    • 設定された方式で言語を判別となります
    • 説明の言葉通りに、一度設定したら、変更時にすでに存在しているパスが使用できなくなりますので、ご注意ください(変更後にすべてのパスを再構築などの作業が必要)
      言語判定URLの設定
Embedded thumbnail for Drupalの多言語ユーザーインターフェースの導入と設定
drupal
video
feeds

やりたいこと:Feedsで多言語コンテンツデータのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Feeds:Enity Translation7.x-1.0
  • モジュール:Entity Translationで多言語サイトを構築しています
  • 複数の言語コンテンツをデータ移行したいです
  • いろいろ調べてみてた、同一フィールドに多言語インポート方法が少なく、難しそうです

解決方法:モジュール(Feeds:Entity Translation)で多言語コンテンツデータの移行

  • 多言語コンテンツデータ移行をサポートするモジュールがあまり多くないようで、一つモジュール(Feeds: Entity Translation)を見つけました
  • モジュール(Feeds: Entity Translation)をインストール/有効化したら、Feedsのデータマッピング管理画面に、多言語有効なフィールドの各言語対応ターゲットが現れます
    多言語コンテンツデータ移行にサポートするFeeds: Entity Translation
  • 同一フィールドの各言語対応ターゲットを選択して多言語コンテンツインポートができました
Embedded thumbnail for DrupalのFeedsで多言語コンテンツデータのインポート
drupal
feeds
module usage

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

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

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

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

やりたいこと:モジュール(Feeds)でのデータマッピング時にPHPコードでフィールド値を加工する

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Tamper7.x-1.1、Feeds Tamper PHP7.x1.2
  • Feedsデータインポートの基本は「 Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考してください
  • データマッピングに、各インポートフィールドの値を加工するため、Feeds Tamperモジュールが良く利用します
  • この中に、特殊なフィールド値加工(例:既存のデータを取得するなど)のためFeeds Tamper PHPを利用して、PHPスクリプトの実行ができます
  • Feeds Tamper PHPでインポートデータの扱い、以下のパラメーターで、任意のフィールドの値の利用ができます
    • $field: 渡されたフィールドの値
    • $item['フィールド名']: インポート元で定義していたフィールド名でその値を取得する
      Drupalのモジュール(Feeds)のデータマッピング時にFeedsTamperでのPHPコードより各フィールドの値を加工します
  • 任意のフィールド(例:body)で他のフィールドの値(例:title)の取得することができます

注意点:PHPコード実行のセキュリティ問題とパフォーマンスへの影響

  • PHPコードを実行するには、eval()関数で行うため、任意のPHPコードの実行が可能となります
  • 特にインポートが公開の場合、PHPコード実行のセキュリティ問題を注意深く対応すべきです
  • また、データ取得したり、多くループをしたりして、パフォーマンスへの影響が考えるべきです
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

問題点:モジュール(Feeds)でデータインポート時に間違って設定があった場合インポートエラーなどが発生

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Import Previews7.x-1.x
  • 複雑なデータマッピング設定(例:Feeds Tamperなどで)時に、間違いやすくなります。その場合実際のデータをインポートで確認する必要があります
  • 間違った設定より、データインポートエラーなどが発生します

解決:モジュール(Feeds Import Preview)でインポート設定を確認します

  • モジュール(Feeds Import Preview)でデータインポート直前のステップまでに進んで、実際のインポート設定の確認ができます
    Drupalのモジュール(Feeds Import Preview)でデータインポート設定の確認ができます
  • 実際にソースから各フィールドの値が表示されています。
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
feeds
module usage

やりたいこと:コンテンツ(例:記事)のbodyフィールドの多言語データのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Entity Translation7.x-1.0
  • コンテンツのbody以外のフィールドがEntity Translation有効であれば、Feedsのデータマッピングで複数の言語のターゲットが現れます
    • drupalのfeedsで多言語コンテンツデータのインポート
  • BodyにEntity Translation有効の場合にマッピングでのターゲットが一つしかありません
  • 複数回でそれぞれの言語データをインポートします
    DrupalのFeedsで多言語bodyデータのインポート

FeedsのNode Processor設定画面でコンテンツ(例:記事)の初期言語を設定

  • コンテンツの元言語を設定する必要があります(もし、設定しなければ多言語の表示に影響しないが、コンテンツの翻訳タグが表示されない)
  • Node Processor設定画面でノートの言語を選択して、データインポート時に設定してくれます(ビデオを参考)

Feedsのマッピング設定画面でbodyのインポート言語設定を行います

  • データマッピング管理画面でbodyフィールドに言語設定があります
    データマッピング管理画面でbodyフィールドの言語設定
  • 複数の言語に対して複数のインポーターを用意するか、複数回で言語設定を行います

各言語に応じて複数回を分けてデータインポートする必要があります

  • 言語ごとにデータインポートする必要があります
    • 一括して同一フィールドに複数の言語インポートができません
  • 具体的なステップはビデオを参考してください
Embedded thumbnail for 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
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
system_management

モジュール(Localization Update)でサイトの多言語ユーザーインターフェースを導入します

  • 背景:Drupal7.54、Localization Update7.x-2.1
  • モジュール(Localization Update)をインストール/有効化します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)で「言語を追加」リンクをクリックすると、必要なユーザーインターフェース言語の導入ができます

管理者がサイト単位でユーザーインターフェース言語の一括設定(ほかの言語を使用しない)

  • Druaplを初期インストール(英語バージョンの場合)後に、別の言語(例:日本語)を導入し、その言語のみを使用します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)でのデフォルト値を選択すればよいです
    サイト単位の言語設定
  • サイト管理者が選択してから、一般ユーザーの選択はできません。

複数の言語をユーザーインターフェースとして利用する場合に、URL/ブラウザ/セッション/ユーザーの言語設定などよりサイトの言語自動判別ができます

  • 複数のユーザーインターフェース言語がある場合、どれを使用するかは決める必要があります
  • 言語判別設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語 » 判別と選択)言語利用の判別条件を設定します
    言語の判別設定と判別順序設定
    • URL: URLから言語を判定する(パス接頭語かドメイン)
    • セッション: 言語をrequest/sessionパラメーターから判定する。
    • ブラウザ: ブラウザーの言語設定から言語を判定する。
    • ユーザー: ユーザープロフィールで設定した言語に従う。
    • デフォルト: サイトのデフォルト言語を使う
  • 上記判別方法のい任意、または全部の選択はできます
  • 判別の優先順のソートができます
  • URLで言語判断設定した場合、URLのドメイン/パス接頭語の設定が必要となります
    言語判別のURLドメイン/パス接頭語設定
    • 「言語のドメイン」と「言語コードのパス接頭語」のどちらかの設定(両方の設定はできない)
    • 設定された方式で言語を判別となります
    • 説明の言葉通りに、一度設定したら、変更時にすでに存在しているパスが使用できなくなりますので、ご注意ください(変更後にすべてのパスを再構築などの作業が必要)
      言語判定URLの設定
Embedded thumbnail for Drupalの多言語ユーザーインターフェースの導入と設定
drupal
video
feeds

やりたいこと:Feedsで多言語コンテンツデータのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Feeds:Enity Translation7.x-1.0
  • モジュール:Entity Translationで多言語サイトを構築しています
  • 複数の言語コンテンツをデータ移行したいです
  • いろいろ調べてみてた、同一フィールドに多言語インポート方法が少なく、難しそうです

解決方法:モジュール(Feeds:Entity Translation)で多言語コンテンツデータの移行

  • 多言語コンテンツデータ移行をサポートするモジュールがあまり多くないようで、一つモジュール(Feeds: Entity Translation)を見つけました
  • モジュール(Feeds: Entity Translation)をインストール/有効化したら、Feedsのデータマッピング管理画面に、多言語有効なフィールドの各言語対応ターゲットが現れます
    多言語コンテンツデータ移行にサポートするFeeds: Entity Translation
  • 同一フィールドの各言語対応ターゲットを選択して多言語コンテンツインポートができました
Embedded thumbnail for DrupalのFeedsで多言語コンテンツデータのインポート
drupal
feeds
module usage

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

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

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

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

やりたいこと:モジュール(Feeds)でのデータマッピング時にPHPコードでフィールド値を加工する

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Tamper7.x-1.1、Feeds Tamper PHP7.x1.2
  • Feedsデータインポートの基本は「 Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考してください
  • データマッピングに、各インポートフィールドの値を加工するため、Feeds Tamperモジュールが良く利用します
  • この中に、特殊なフィールド値加工(例:既存のデータを取得するなど)のためFeeds Tamper PHPを利用して、PHPスクリプトの実行ができます
  • Feeds Tamper PHPでインポートデータの扱い、以下のパラメーターで、任意のフィールドの値の利用ができます
    • $field: 渡されたフィールドの値
    • $item['フィールド名']: インポート元で定義していたフィールド名でその値を取得する
      Drupalのモジュール(Feeds)のデータマッピング時にFeedsTamperでのPHPコードより各フィールドの値を加工します
  • 任意のフィールド(例:body)で他のフィールドの値(例:title)の取得することができます

注意点:PHPコード実行のセキュリティ問題とパフォーマンスへの影響

  • PHPコードを実行するには、eval()関数で行うため、任意のPHPコードの実行が可能となります
  • 特にインポートが公開の場合、PHPコード実行のセキュリティ問題を注意深く対応すべきです
  • また、データ取得したり、多くループをしたりして、パフォーマンスへの影響が考えるべきです
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

問題点:モジュール(Feeds)でデータインポート時に間違って設定があった場合インポートエラーなどが発生

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Import Previews7.x-1.x
  • 複雑なデータマッピング設定(例:Feeds Tamperなどで)時に、間違いやすくなります。その場合実際のデータをインポートで確認する必要があります
  • 間違った設定より、データインポートエラーなどが発生します

解決:モジュール(Feeds Import Preview)でインポート設定を確認します

  • モジュール(Feeds Import Preview)でデータインポート直前のステップまでに進んで、実際のインポート設定の確認ができます
    Drupalのモジュール(Feeds Import Preview)でデータインポート設定の確認ができます
  • 実際にソースから各フィールドの値が表示されています。
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
feeds
module usage

やりたいこと:コンテンツ(例:記事)のbodyフィールドの多言語データのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Entity Translation7.x-1.0
  • コンテンツのbody以外のフィールドがEntity Translation有効であれば、Feedsのデータマッピングで複数の言語のターゲットが現れます
    • drupalのfeedsで多言語コンテンツデータのインポート
  • BodyにEntity Translation有効の場合にマッピングでのターゲットが一つしかありません
  • 複数回でそれぞれの言語データをインポートします
    DrupalのFeedsで多言語bodyデータのインポート

FeedsのNode Processor設定画面でコンテンツ(例:記事)の初期言語を設定

  • コンテンツの元言語を設定する必要があります(もし、設定しなければ多言語の表示に影響しないが、コンテンツの翻訳タグが表示されない)
  • Node Processor設定画面でノートの言語を選択して、データインポート時に設定してくれます(ビデオを参考)

Feedsのマッピング設定画面でbodyのインポート言語設定を行います

  • データマッピング管理画面でbodyフィールドに言語設定があります
    データマッピング管理画面でbodyフィールドの言語設定
  • 複数の言語に対して複数のインポーターを用意するか、複数回で言語設定を行います

各言語に応じて複数回を分けてデータインポートする必要があります

  • 言語ごとにデータインポートする必要があります
    • 一括して同一フィールドに複数の言語インポートができません
  • 具体的なステップはビデオを参考してください
Embedded thumbnail for 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
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
system_management

モジュール(Localization Update)でサイトの多言語ユーザーインターフェースを導入します

  • 背景:Drupal7.54、Localization Update7.x-2.1
  • モジュール(Localization Update)をインストール/有効化します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)で「言語を追加」リンクをクリックすると、必要なユーザーインターフェース言語の導入ができます

管理者がサイト単位でユーザーインターフェース言語の一括設定(ほかの言語を使用しない)

  • Druaplを初期インストール(英語バージョンの場合)後に、別の言語(例:日本語)を導入し、その言語のみを使用します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)でのデフォルト値を選択すればよいです
    サイト単位の言語設定
  • サイト管理者が選択してから、一般ユーザーの選択はできません。

複数の言語をユーザーインターフェースとして利用する場合に、URL/ブラウザ/セッション/ユーザーの言語設定などよりサイトの言語自動判別ができます

  • 複数のユーザーインターフェース言語がある場合、どれを使用するかは決める必要があります
  • 言語判別設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語 » 判別と選択)言語利用の判別条件を設定します
    言語の判別設定と判別順序設定
    • URL: URLから言語を判定する(パス接頭語かドメイン)
    • セッション: 言語をrequest/sessionパラメーターから判定する。
    • ブラウザ: ブラウザーの言語設定から言語を判定する。
    • ユーザー: ユーザープロフィールで設定した言語に従う。
    • デフォルト: サイトのデフォルト言語を使う
  • 上記判別方法のい任意、または全部の選択はできます
  • 判別の優先順のソートができます
  • URLで言語判断設定した場合、URLのドメイン/パス接頭語の設定が必要となります
    言語判別のURLドメイン/パス接頭語設定
    • 「言語のドメイン」と「言語コードのパス接頭語」のどちらかの設定(両方の設定はできない)
    • 設定された方式で言語を判別となります
    • 説明の言葉通りに、一度設定したら、変更時にすでに存在しているパスが使用できなくなりますので、ご注意ください(変更後にすべてのパスを再構築などの作業が必要)
      言語判定URLの設定
Embedded thumbnail for Drupalの多言語ユーザーインターフェースの導入と設定
drupal
video
feeds

やりたいこと:Feedsで多言語コンテンツデータのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Feeds:Enity Translation7.x-1.0
  • モジュール:Entity Translationで多言語サイトを構築しています
  • 複数の言語コンテンツをデータ移行したいです
  • いろいろ調べてみてた、同一フィールドに多言語インポート方法が少なく、難しそうです

解決方法:モジュール(Feeds:Entity Translation)で多言語コンテンツデータの移行

  • 多言語コンテンツデータ移行をサポートするモジュールがあまり多くないようで、一つモジュール(Feeds: Entity Translation)を見つけました
  • モジュール(Feeds: Entity Translation)をインストール/有効化したら、Feedsのデータマッピング管理画面に、多言語有効なフィールドの各言語対応ターゲットが現れます
    多言語コンテンツデータ移行にサポートするFeeds: Entity Translation
  • 同一フィールドの各言語対応ターゲットを選択して多言語コンテンツインポートができました
Embedded thumbnail for DrupalのFeedsで多言語コンテンツデータのインポート
drupal
feeds
module usage

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

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

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

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

やりたいこと:モジュール(Feeds)でのデータマッピング時にPHPコードでフィールド値を加工する

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Tamper7.x-1.1、Feeds Tamper PHP7.x1.2
  • Feedsデータインポートの基本は「 Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考してください
  • データマッピングに、各インポートフィールドの値を加工するため、Feeds Tamperモジュールが良く利用します
  • この中に、特殊なフィールド値加工(例:既存のデータを取得するなど)のためFeeds Tamper PHPを利用して、PHPスクリプトの実行ができます
  • Feeds Tamper PHPでインポートデータの扱い、以下のパラメーターで、任意のフィールドの値の利用ができます
    • $field: 渡されたフィールドの値
    • $item['フィールド名']: インポート元で定義していたフィールド名でその値を取得する
      Drupalのモジュール(Feeds)のデータマッピング時にFeedsTamperでのPHPコードより各フィールドの値を加工します
  • 任意のフィールド(例:body)で他のフィールドの値(例:title)の取得することができます

注意点:PHPコード実行のセキュリティ問題とパフォーマンスへの影響

  • PHPコードを実行するには、eval()関数で行うため、任意のPHPコードの実行が可能となります
  • 特にインポートが公開の場合、PHPコード実行のセキュリティ問題を注意深く対応すべきです
  • また、データ取得したり、多くループをしたりして、パフォーマンスへの影響が考えるべきです
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

問題点:モジュール(Feeds)でデータインポート時に間違って設定があった場合インポートエラーなどが発生

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Import Previews7.x-1.x
  • 複雑なデータマッピング設定(例:Feeds Tamperなどで)時に、間違いやすくなります。その場合実際のデータをインポートで確認する必要があります
  • 間違った設定より、データインポートエラーなどが発生します

解決:モジュール(Feeds Import Preview)でインポート設定を確認します

  • モジュール(Feeds Import Preview)でデータインポート直前のステップまでに進んで、実際のインポート設定の確認ができます
    Drupalのモジュール(Feeds Import Preview)でデータインポート設定の確認ができます
  • 実際にソースから各フィールドの値が表示されています。
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
feeds
module usage

やりたいこと:コンテンツ(例:記事)のbodyフィールドの多言語データのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Entity Translation7.x-1.0
  • コンテンツのbody以外のフィールドがEntity Translation有効であれば、Feedsのデータマッピングで複数の言語のターゲットが現れます
    • drupalのfeedsで多言語コンテンツデータのインポート
  • BodyにEntity Translation有効の場合にマッピングでのターゲットが一つしかありません
  • 複数回でそれぞれの言語データをインポートします
    DrupalのFeedsで多言語bodyデータのインポート

FeedsのNode Processor設定画面でコンテンツ(例:記事)の初期言語を設定

  • コンテンツの元言語を設定する必要があります(もし、設定しなければ多言語の表示に影響しないが、コンテンツの翻訳タグが表示されない)
  • Node Processor設定画面でノートの言語を選択して、データインポート時に設定してくれます(ビデオを参考)

Feedsのマッピング設定画面でbodyのインポート言語設定を行います

  • データマッピング管理画面でbodyフィールドに言語設定があります
    データマッピング管理画面でbodyフィールドの言語設定
  • 複数の言語に対して複数のインポーターを用意するか、複数回で言語設定を行います

各言語に応じて複数回を分けてデータインポートする必要があります

  • 言語ごとにデータインポートする必要があります
    • 一括して同一フィールドに複数の言語インポートができません
  • 具体的なステップはビデオを参考してください
Embedded thumbnail for 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
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
system_management

モジュール(Localization Update)でサイトの多言語ユーザーインターフェースを導入します

  • 背景:Drupal7.54、Localization Update7.x-2.1
  • モジュール(Localization Update)をインストール/有効化します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)で「言語を追加」リンクをクリックすると、必要なユーザーインターフェース言語の導入ができます

管理者がサイト単位でユーザーインターフェース言語の一括設定(ほかの言語を使用しない)

  • Druaplを初期インストール(英語バージョンの場合)後に、別の言語(例:日本語)を導入し、その言語のみを使用します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)でのデフォルト値を選択すればよいです
    サイト単位の言語設定
  • サイト管理者が選択してから、一般ユーザーの選択はできません。

複数の言語をユーザーインターフェースとして利用する場合に、URL/ブラウザ/セッション/ユーザーの言語設定などよりサイトの言語自動判別ができます

  • 複数のユーザーインターフェース言語がある場合、どれを使用するかは決める必要があります
  • 言語判別設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語 » 判別と選択)言語利用の判別条件を設定します
    言語の判別設定と判別順序設定
    • URL: URLから言語を判定する(パス接頭語かドメイン)
    • セッション: 言語をrequest/sessionパラメーターから判定する。
    • ブラウザ: ブラウザーの言語設定から言語を判定する。
    • ユーザー: ユーザープロフィールで設定した言語に従う。
    • デフォルト: サイトのデフォルト言語を使う
  • 上記判別方法のい任意、または全部の選択はできます
  • 判別の優先順のソートができます
  • URLで言語判断設定した場合、URLのドメイン/パス接頭語の設定が必要となります
    言語判別のURLドメイン/パス接頭語設定
    • 「言語のドメイン」と「言語コードのパス接頭語」のどちらかの設定(両方の設定はできない)
    • 設定された方式で言語を判別となります
    • 説明の言葉通りに、一度設定したら、変更時にすでに存在しているパスが使用できなくなりますので、ご注意ください(変更後にすべてのパスを再構築などの作業が必要)
      言語判定URLの設定
Embedded thumbnail for Drupalの多言語ユーザーインターフェースの導入と設定
drupal
video
feeds

やりたいこと:Feedsで多言語コンテンツデータのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Feeds:Enity Translation7.x-1.0
  • モジュール:Entity Translationで多言語サイトを構築しています
  • 複数の言語コンテンツをデータ移行したいです
  • いろいろ調べてみてた、同一フィールドに多言語インポート方法が少なく、難しそうです

解決方法:モジュール(Feeds:Entity Translation)で多言語コンテンツデータの移行

  • 多言語コンテンツデータ移行をサポートするモジュールがあまり多くないようで、一つモジュール(Feeds: Entity Translation)を見つけました
  • モジュール(Feeds: Entity Translation)をインストール/有効化したら、Feedsのデータマッピング管理画面に、多言語有効なフィールドの各言語対応ターゲットが現れます
    多言語コンテンツデータ移行にサポートするFeeds: Entity Translation
  • 同一フィールドの各言語対応ターゲットを選択して多言語コンテンツインポートができました
Embedded thumbnail for DrupalのFeedsで多言語コンテンツデータのインポート
drupal
feeds
module usage

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

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

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

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

やりたいこと:モジュール(Feeds)でのデータマッピング時にPHPコードでフィールド値を加工する

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Tamper7.x-1.1、Feeds Tamper PHP7.x1.2
  • Feedsデータインポートの基本は「 Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考してください
  • データマッピングに、各インポートフィールドの値を加工するため、Feeds Tamperモジュールが良く利用します
  • この中に、特殊なフィールド値加工(例:既存のデータを取得するなど)のためFeeds Tamper PHPを利用して、PHPスクリプトの実行ができます
  • Feeds Tamper PHPでインポートデータの扱い、以下のパラメーターで、任意のフィールドの値の利用ができます
    • $field: 渡されたフィールドの値
    • $item['フィールド名']: インポート元で定義していたフィールド名でその値を取得する
      Drupalのモジュール(Feeds)のデータマッピング時にFeedsTamperでのPHPコードより各フィールドの値を加工します
  • 任意のフィールド(例:body)で他のフィールドの値(例:title)の取得することができます

注意点:PHPコード実行のセキュリティ問題とパフォーマンスへの影響

  • PHPコードを実行するには、eval()関数で行うため、任意のPHPコードの実行が可能となります
  • 特にインポートが公開の場合、PHPコード実行のセキュリティ問題を注意深く対応すべきです
  • また、データ取得したり、多くループをしたりして、パフォーマンスへの影響が考えるべきです
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

問題点:モジュール(Feeds)でデータインポート時に間違って設定があった場合インポートエラーなどが発生

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Import Previews7.x-1.x
  • 複雑なデータマッピング設定(例:Feeds Tamperなどで)時に、間違いやすくなります。その場合実際のデータをインポートで確認する必要があります
  • 間違った設定より、データインポートエラーなどが発生します

解決:モジュール(Feeds Import Preview)でインポート設定を確認します

  • モジュール(Feeds Import Preview)でデータインポート直前のステップまでに進んで、実際のインポート設定の確認ができます
    Drupalのモジュール(Feeds Import Preview)でデータインポート設定の確認ができます
  • 実際にソースから各フィールドの値が表示されています。
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
feeds
module usage

やりたいこと:コンテンツ(例:記事)のbodyフィールドの多言語データのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Entity Translation7.x-1.0
  • コンテンツのbody以外のフィールドがEntity Translation有効であれば、Feedsのデータマッピングで複数の言語のターゲットが現れます
    • drupalのfeedsで多言語コンテンツデータのインポート
  • BodyにEntity Translation有効の場合にマッピングでのターゲットが一つしかありません
  • 複数回でそれぞれの言語データをインポートします
    DrupalのFeedsで多言語bodyデータのインポート

FeedsのNode Processor設定画面でコンテンツ(例:記事)の初期言語を設定

  • コンテンツの元言語を設定する必要があります(もし、設定しなければ多言語の表示に影響しないが、コンテンツの翻訳タグが表示されない)
  • Node Processor設定画面でノートの言語を選択して、データインポート時に設定してくれます(ビデオを参考)

Feedsのマッピング設定画面でbodyのインポート言語設定を行います

  • データマッピング管理画面でbodyフィールドに言語設定があります
    データマッピング管理画面でbodyフィールドの言語設定
  • 複数の言語に対して複数のインポーターを用意するか、複数回で言語設定を行います

各言語に応じて複数回を分けてデータインポートする必要があります

  • 言語ごとにデータインポートする必要があります
    • 一括して同一フィールドに複数の言語インポートができません
  • 具体的なステップはビデオを参考してください
Embedded thumbnail for 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
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
system_management

モジュール(Localization Update)でサイトの多言語ユーザーインターフェースを導入します

  • 背景:Drupal7.54、Localization Update7.x-2.1
  • モジュール(Localization Update)をインストール/有効化します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)で「言語を追加」リンクをクリックすると、必要なユーザーインターフェース言語の導入ができます

管理者がサイト単位でユーザーインターフェース言語の一括設定(ほかの言語を使用しない)

  • Druaplを初期インストール(英語バージョンの場合)後に、別の言語(例:日本語)を導入し、その言語のみを使用します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)でのデフォルト値を選択すればよいです
    サイト単位の言語設定
  • サイト管理者が選択してから、一般ユーザーの選択はできません。

複数の言語をユーザーインターフェースとして利用する場合に、URL/ブラウザ/セッション/ユーザーの言語設定などよりサイトの言語自動判別ができます

  • 複数のユーザーインターフェース言語がある場合、どれを使用するかは決める必要があります
  • 言語判別設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語 » 判別と選択)言語利用の判別条件を設定します
    言語の判別設定と判別順序設定
    • URL: URLから言語を判定する(パス接頭語かドメイン)
    • セッション: 言語をrequest/sessionパラメーターから判定する。
    • ブラウザ: ブラウザーの言語設定から言語を判定する。
    • ユーザー: ユーザープロフィールで設定した言語に従う。
    • デフォルト: サイトのデフォルト言語を使う
  • 上記判別方法のい任意、または全部の選択はできます
  • 判別の優先順のソートができます
  • URLで言語判断設定した場合、URLのドメイン/パス接頭語の設定が必要となります
    言語判別のURLドメイン/パス接頭語設定
    • 「言語のドメイン」と「言語コードのパス接頭語」のどちらかの設定(両方の設定はできない)
    • 設定された方式で言語を判別となります
    • 説明の言葉通りに、一度設定したら、変更時にすでに存在しているパスが使用できなくなりますので、ご注意ください(変更後にすべてのパスを再構築などの作業が必要)
      言語判定URLの設定
Embedded thumbnail for Drupalの多言語ユーザーインターフェースの導入と設定
drupal
video
feeds

やりたいこと:Feedsで多言語コンテンツデータのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Feeds:Enity Translation7.x-1.0
  • モジュール:Entity Translationで多言語サイトを構築しています
  • 複数の言語コンテンツをデータ移行したいです
  • いろいろ調べてみてた、同一フィールドに多言語インポート方法が少なく、難しそうです

解決方法:モジュール(Feeds:Entity Translation)で多言語コンテンツデータの移行

  • 多言語コンテンツデータ移行をサポートするモジュールがあまり多くないようで、一つモジュール(Feeds: Entity Translation)を見つけました
  • モジュール(Feeds: Entity Translation)をインストール/有効化したら、Feedsのデータマッピング管理画面に、多言語有効なフィールドの各言語対応ターゲットが現れます
    多言語コンテンツデータ移行にサポートするFeeds: Entity Translation
  • 同一フィールドの各言語対応ターゲットを選択して多言語コンテンツインポートができました
Embedded thumbnail for DrupalのFeedsで多言語コンテンツデータのインポート
drupal
feeds
module usage

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

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

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

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

やりたいこと:モジュール(Feeds)でのデータマッピング時にPHPコードでフィールド値を加工する

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Tamper7.x-1.1、Feeds Tamper PHP7.x1.2
  • Feedsデータインポートの基本は「 Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考してください
  • データマッピングに、各インポートフィールドの値を加工するため、Feeds Tamperモジュールが良く利用します
  • この中に、特殊なフィールド値加工(例:既存のデータを取得するなど)のためFeeds Tamper PHPを利用して、PHPスクリプトの実行ができます
  • Feeds Tamper PHPでインポートデータの扱い、以下のパラメーターで、任意のフィールドの値の利用ができます
    • $field: 渡されたフィールドの値
    • $item['フィールド名']: インポート元で定義していたフィールド名でその値を取得する
      Drupalのモジュール(Feeds)のデータマッピング時にFeedsTamperでのPHPコードより各フィールドの値を加工します
  • 任意のフィールド(例:body)で他のフィールドの値(例:title)の取得することができます

注意点:PHPコード実行のセキュリティ問題とパフォーマンスへの影響

  • PHPコードを実行するには、eval()関数で行うため、任意のPHPコードの実行が可能となります
  • 特にインポートが公開の場合、PHPコード実行のセキュリティ問題を注意深く対応すべきです
  • また、データ取得したり、多くループをしたりして、パフォーマンスへの影響が考えるべきです
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

問題点:モジュール(Feeds)でデータインポート時に間違って設定があった場合インポートエラーなどが発生

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Import Previews7.x-1.x
  • 複雑なデータマッピング設定(例:Feeds Tamperなどで)時に、間違いやすくなります。その場合実際のデータをインポートで確認する必要があります
  • 間違った設定より、データインポートエラーなどが発生します

解決:モジュール(Feeds Import Preview)でインポート設定を確認します

  • モジュール(Feeds Import Preview)でデータインポート直前のステップまでに進んで、実際のインポート設定の確認ができます
    Drupalのモジュール(Feeds Import Preview)でデータインポート設定の確認ができます
  • 実際にソースから各フィールドの値が表示されています。
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
feeds
module usage

やりたいこと:コンテンツ(例:記事)のbodyフィールドの多言語データのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Entity Translation7.x-1.0
  • コンテンツのbody以外のフィールドがEntity Translation有効であれば、Feedsのデータマッピングで複数の言語のターゲットが現れます
    • drupalのfeedsで多言語コンテンツデータのインポート
  • BodyにEntity Translation有効の場合にマッピングでのターゲットが一つしかありません
  • 複数回でそれぞれの言語データをインポートします
    DrupalのFeedsで多言語bodyデータのインポート

FeedsのNode Processor設定画面でコンテンツ(例:記事)の初期言語を設定

  • コンテンツの元言語を設定する必要があります(もし、設定しなければ多言語の表示に影響しないが、コンテンツの翻訳タグが表示されない)
  • Node Processor設定画面でノートの言語を選択して、データインポート時に設定してくれます(ビデオを参考)

Feedsのマッピング設定画面でbodyのインポート言語設定を行います

  • データマッピング管理画面でbodyフィールドに言語設定があります
    データマッピング管理画面でbodyフィールドの言語設定
  • 複数の言語に対して複数のインポーターを用意するか、複数回で言語設定を行います

各言語に応じて複数回を分けてデータインポートする必要があります

  • 言語ごとにデータインポートする必要があります
    • 一括して同一フィールドに複数の言語インポートができません
  • 具体的なステップはビデオを参考してください
Embedded thumbnail for 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
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
system_management

モジュール(Localization Update)でサイトの多言語ユーザーインターフェースを導入します

  • 背景:Drupal7.54、Localization Update7.x-2.1
  • モジュール(Localization Update)をインストール/有効化します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)で「言語を追加」リンクをクリックすると、必要なユーザーインターフェース言語の導入ができます

管理者がサイト単位でユーザーインターフェース言語の一括設定(ほかの言語を使用しない)

  • Druaplを初期インストール(英語バージョンの場合)後に、別の言語(例:日本語)を導入し、その言語のみを使用します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)でのデフォルト値を選択すればよいです
    サイト単位の言語設定
  • サイト管理者が選択してから、一般ユーザーの選択はできません。

複数の言語をユーザーインターフェースとして利用する場合に、URL/ブラウザ/セッション/ユーザーの言語設定などよりサイトの言語自動判別ができます

  • 複数のユーザーインターフェース言語がある場合、どれを使用するかは決める必要があります
  • 言語判別設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語 » 判別と選択)言語利用の判別条件を設定します
    言語の判別設定と判別順序設定
    • URL: URLから言語を判定する(パス接頭語かドメイン)
    • セッション: 言語をrequest/sessionパラメーターから判定する。
    • ブラウザ: ブラウザーの言語設定から言語を判定する。
    • ユーザー: ユーザープロフィールで設定した言語に従う。
    • デフォルト: サイトのデフォルト言語を使う
  • 上記判別方法のい任意、または全部の選択はできます
  • 判別の優先順のソートができます
  • URLで言語判断設定した場合、URLのドメイン/パス接頭語の設定が必要となります
    言語判別のURLドメイン/パス接頭語設定
    • 「言語のドメイン」と「言語コードのパス接頭語」のどちらかの設定(両方の設定はできない)
    • 設定された方式で言語を判別となります
    • 説明の言葉通りに、一度設定したら、変更時にすでに存在しているパスが使用できなくなりますので、ご注意ください(変更後にすべてのパスを再構築などの作業が必要)
      言語判定URLの設定
Embedded thumbnail for Drupalの多言語ユーザーインターフェースの導入と設定
drupal
video
feeds

やりたいこと:Feedsで多言語コンテンツデータのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Feeds:Enity Translation7.x-1.0
  • モジュール:Entity Translationで多言語サイトを構築しています
  • 複数の言語コンテンツをデータ移行したいです
  • いろいろ調べてみてた、同一フィールドに多言語インポート方法が少なく、難しそうです

解決方法:モジュール(Feeds:Entity Translation)で多言語コンテンツデータの移行

  • 多言語コンテンツデータ移行をサポートするモジュールがあまり多くないようで、一つモジュール(Feeds: Entity Translation)を見つけました
  • モジュール(Feeds: Entity Translation)をインストール/有効化したら、Feedsのデータマッピング管理画面に、多言語有効なフィールドの各言語対応ターゲットが現れます
    多言語コンテンツデータ移行にサポートするFeeds: Entity Translation
  • 同一フィールドの各言語対応ターゲットを選択して多言語コンテンツインポートができました
Embedded thumbnail for DrupalのFeedsで多言語コンテンツデータのインポート
drupal
feeds
module usage

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

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

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

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

やりたいこと:モジュール(Feeds)でのデータマッピング時にPHPコードでフィールド値を加工する

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Tamper7.x-1.1、Feeds Tamper PHP7.x1.2
  • Feedsデータインポートの基本は「 Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考してください
  • データマッピングに、各インポートフィールドの値を加工するため、Feeds Tamperモジュールが良く利用します
  • この中に、特殊なフィールド値加工(例:既存のデータを取得するなど)のためFeeds Tamper PHPを利用して、PHPスクリプトの実行ができます
  • Feeds Tamper PHPでインポートデータの扱い、以下のパラメーターで、任意のフィールドの値の利用ができます
    • $field: 渡されたフィールドの値
    • $item['フィールド名']: インポート元で定義していたフィールド名でその値を取得する
      Drupalのモジュール(Feeds)のデータマッピング時にFeedsTamperでのPHPコードより各フィールドの値を加工します
  • 任意のフィールド(例:body)で他のフィールドの値(例:title)の取得することができます

注意点:PHPコード実行のセキュリティ問題とパフォーマンスへの影響

  • PHPコードを実行するには、eval()関数で行うため、任意のPHPコードの実行が可能となります
  • 特にインポートが公開の場合、PHPコード実行のセキュリティ問題を注意深く対応すべきです
  • また、データ取得したり、多くループをしたりして、パフォーマンスへの影響が考えるべきです
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

問題点:モジュール(Feeds)でデータインポート時に間違って設定があった場合インポートエラーなどが発生

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Import Previews7.x-1.x
  • 複雑なデータマッピング設定(例:Feeds Tamperなどで)時に、間違いやすくなります。その場合実際のデータをインポートで確認する必要があります
  • 間違った設定より、データインポートエラーなどが発生します

解決:モジュール(Feeds Import Preview)でインポート設定を確認します

  • モジュール(Feeds Import Preview)でデータインポート直前のステップまでに進んで、実際のインポート設定の確認ができます
    Drupalのモジュール(Feeds Import Preview)でデータインポート設定の確認ができます
  • 実際にソースから各フィールドの値が表示されています。
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
feeds
module usage

やりたいこと:コンテンツ(例:記事)のbodyフィールドの多言語データのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Entity Translation7.x-1.0
  • コンテンツのbody以外のフィールドがEntity Translation有効であれば、Feedsのデータマッピングで複数の言語のターゲットが現れます
    • drupalのfeedsで多言語コンテンツデータのインポート
  • BodyにEntity Translation有効の場合にマッピングでのターゲットが一つしかありません
  • 複数回でそれぞれの言語データをインポートします
    DrupalのFeedsで多言語bodyデータのインポート

FeedsのNode Processor設定画面でコンテンツ(例:記事)の初期言語を設定

  • コンテンツの元言語を設定する必要があります(もし、設定しなければ多言語の表示に影響しないが、コンテンツの翻訳タグが表示されない)
  • Node Processor設定画面でノートの言語を選択して、データインポート時に設定してくれます(ビデオを参考)

Feedsのマッピング設定画面でbodyのインポート言語設定を行います

  • データマッピング管理画面でbodyフィールドに言語設定があります
    データマッピング管理画面でbodyフィールドの言語設定
  • 複数の言語に対して複数のインポーターを用意するか、複数回で言語設定を行います

各言語に応じて複数回を分けてデータインポートする必要があります

  • 言語ごとにデータインポートする必要があります
    • 一括して同一フィールドに複数の言語インポートができません
  • 具体的なステップはビデオを参考してください
Embedded thumbnail for 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
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
system_management

モジュール(Localization Update)でサイトの多言語ユーザーインターフェースを導入します

  • 背景:Drupal7.54、Localization Update7.x-2.1
  • モジュール(Localization Update)をインストール/有効化します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)で「言語を追加」リンクをクリックすると、必要なユーザーインターフェース言語の導入ができます

管理者がサイト単位でユーザーインターフェース言語の一括設定(ほかの言語を使用しない)

  • Druaplを初期インストール(英語バージョンの場合)後に、別の言語(例:日本語)を導入し、その言語のみを使用します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)でのデフォルト値を選択すればよいです
    サイト単位の言語設定
  • サイト管理者が選択してから、一般ユーザーの選択はできません。

複数の言語をユーザーインターフェースとして利用する場合に、URL/ブラウザ/セッション/ユーザーの言語設定などよりサイトの言語自動判別ができます

  • 複数のユーザーインターフェース言語がある場合、どれを使用するかは決める必要があります
  • 言語判別設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語 » 判別と選択)言語利用の判別条件を設定します
    言語の判別設定と判別順序設定
    • URL: URLから言語を判定する(パス接頭語かドメイン)
    • セッション: 言語をrequest/sessionパラメーターから判定する。
    • ブラウザ: ブラウザーの言語設定から言語を判定する。
    • ユーザー: ユーザープロフィールで設定した言語に従う。
    • デフォルト: サイトのデフォルト言語を使う
  • 上記判別方法のい任意、または全部の選択はできます
  • 判別の優先順のソートができます
  • URLで言語判断設定した場合、URLのドメイン/パス接頭語の設定が必要となります
    言語判別のURLドメイン/パス接頭語設定
    • 「言語のドメイン」と「言語コードのパス接頭語」のどちらかの設定(両方の設定はできない)
    • 設定された方式で言語を判別となります
    • 説明の言葉通りに、一度設定したら、変更時にすでに存在しているパスが使用できなくなりますので、ご注意ください(変更後にすべてのパスを再構築などの作業が必要)
      言語判定URLの設定
Embedded thumbnail for Drupalの多言語ユーザーインターフェースの導入と設定
drupal
video
feeds

やりたいこと:Feedsで多言語コンテンツデータのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Feeds:Enity Translation7.x-1.0
  • モジュール:Entity Translationで多言語サイトを構築しています
  • 複数の言語コンテンツをデータ移行したいです
  • いろいろ調べてみてた、同一フィールドに多言語インポート方法が少なく、難しそうです

解決方法:モジュール(Feeds:Entity Translation)で多言語コンテンツデータの移行

  • 多言語コンテンツデータ移行をサポートするモジュールがあまり多くないようで、一つモジュール(Feeds: Entity Translation)を見つけました
  • モジュール(Feeds: Entity Translation)をインストール/有効化したら、Feedsのデータマッピング管理画面に、多言語有効なフィールドの各言語対応ターゲットが現れます
    多言語コンテンツデータ移行にサポートするFeeds: Entity Translation
  • 同一フィールドの各言語対応ターゲットを選択して多言語コンテンツインポートができました
Embedded thumbnail for DrupalのFeedsで多言語コンテンツデータのインポート
drupal
feeds
module usage

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

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

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

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

やりたいこと:モジュール(Feeds)でのデータマッピング時にPHPコードでフィールド値を加工する

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Tamper7.x-1.1、Feeds Tamper PHP7.x1.2
  • Feedsデータインポートの基本は「 Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考してください
  • データマッピングに、各インポートフィールドの値を加工するため、Feeds Tamperモジュールが良く利用します
  • この中に、特殊なフィールド値加工(例:既存のデータを取得するなど)のためFeeds Tamper PHPを利用して、PHPスクリプトの実行ができます
  • Feeds Tamper PHPでインポートデータの扱い、以下のパラメーターで、任意のフィールドの値の利用ができます
    • $field: 渡されたフィールドの値
    • $item['フィールド名']: インポート元で定義していたフィールド名でその値を取得する
      Drupalのモジュール(Feeds)のデータマッピング時にFeedsTamperでのPHPコードより各フィールドの値を加工します
  • 任意のフィールド(例:body)で他のフィールドの値(例:title)の取得することができます

注意点:PHPコード実行のセキュリティ問題とパフォーマンスへの影響

  • PHPコードを実行するには、eval()関数で行うため、任意のPHPコードの実行が可能となります
  • 特にインポートが公開の場合、PHPコード実行のセキュリティ問題を注意深く対応すべきです
  • また、データ取得したり、多くループをしたりして、パフォーマンスへの影響が考えるべきです
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

問題点:モジュール(Feeds)でデータインポート時に間違って設定があった場合インポートエラーなどが発生

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Import Previews7.x-1.x
  • 複雑なデータマッピング設定(例:Feeds Tamperなどで)時に、間違いやすくなります。その場合実際のデータをインポートで確認する必要があります
  • 間違った設定より、データインポートエラーなどが発生します

解決:モジュール(Feeds Import Preview)でインポート設定を確認します

  • モジュール(Feeds Import Preview)でデータインポート直前のステップまでに進んで、実際のインポート設定の確認ができます
    Drupalのモジュール(Feeds Import Preview)でデータインポート設定の確認ができます
  • 実際にソースから各フィールドの値が表示されています。
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
feeds
module usage

やりたいこと:コンテンツ(例:記事)のbodyフィールドの多言語データのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Entity Translation7.x-1.0
  • コンテンツのbody以外のフィールドがEntity Translation有効であれば、Feedsのデータマッピングで複数の言語のターゲットが現れます
    • drupalのfeedsで多言語コンテンツデータのインポート
  • BodyにEntity Translation有効の場合にマッピングでのターゲットが一つしかありません
  • 複数回でそれぞれの言語データをインポートします
    DrupalのFeedsで多言語bodyデータのインポート

FeedsのNode Processor設定画面でコンテンツ(例:記事)の初期言語を設定

  • コンテンツの元言語を設定する必要があります(もし、設定しなければ多言語の表示に影響しないが、コンテンツの翻訳タグが表示されない)
  • Node Processor設定画面でノートの言語を選択して、データインポート時に設定してくれます(ビデオを参考)

Feedsのマッピング設定画面でbodyのインポート言語設定を行います

  • データマッピング管理画面でbodyフィールドに言語設定があります
    データマッピング管理画面でbodyフィールドの言語設定
  • 複数の言語に対して複数のインポーターを用意するか、複数回で言語設定を行います

各言語に応じて複数回を分けてデータインポートする必要があります

  • 言語ごとにデータインポートする必要があります
    • 一括して同一フィールドに複数の言語インポートができません
  • 具体的なステップはビデオを参考してください
Embedded thumbnail for 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
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
system_management

モジュール(Localization Update)でサイトの多言語ユーザーインターフェースを導入します

  • 背景:Drupal7.54、Localization Update7.x-2.1
  • モジュール(Localization Update)をインストール/有効化します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)で「言語を追加」リンクをクリックすると、必要なユーザーインターフェース言語の導入ができます

管理者がサイト単位でユーザーインターフェース言語の一括設定(ほかの言語を使用しない)

  • Druaplを初期インストール(英語バージョンの場合)後に、別の言語(例:日本語)を導入し、その言語のみを使用します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)でのデフォルト値を選択すればよいです
    サイト単位の言語設定
  • サイト管理者が選択してから、一般ユーザーの選択はできません。

複数の言語をユーザーインターフェースとして利用する場合に、URL/ブラウザ/セッション/ユーザーの言語設定などよりサイトの言語自動判別ができます

  • 複数のユーザーインターフェース言語がある場合、どれを使用するかは決める必要があります
  • 言語判別設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語 » 判別と選択)言語利用の判別条件を設定します
    言語の判別設定と判別順序設定
    • URL: URLから言語を判定する(パス接頭語かドメイン)
    • セッション: 言語をrequest/sessionパラメーターから判定する。
    • ブラウザ: ブラウザーの言語設定から言語を判定する。
    • ユーザー: ユーザープロフィールで設定した言語に従う。
    • デフォルト: サイトのデフォルト言語を使う
  • 上記判別方法のい任意、または全部の選択はできます
  • 判別の優先順のソートができます
  • URLで言語判断設定した場合、URLのドメイン/パス接頭語の設定が必要となります
    言語判別のURLドメイン/パス接頭語設定
    • 「言語のドメイン」と「言語コードのパス接頭語」のどちらかの設定(両方の設定はできない)
    • 設定された方式で言語を判別となります
    • 説明の言葉通りに、一度設定したら、変更時にすでに存在しているパスが使用できなくなりますので、ご注意ください(変更後にすべてのパスを再構築などの作業が必要)
      言語判定URLの設定
Embedded thumbnail for Drupalの多言語ユーザーインターフェースの導入と設定
drupal
video
feeds

やりたいこと:Feedsで多言語コンテンツデータのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Feeds:Enity Translation7.x-1.0
  • モジュール:Entity Translationで多言語サイトを構築しています
  • 複数の言語コンテンツをデータ移行したいです
  • いろいろ調べてみてた、同一フィールドに多言語インポート方法が少なく、難しそうです

解決方法:モジュール(Feeds:Entity Translation)で多言語コンテンツデータの移行

  • 多言語コンテンツデータ移行をサポートするモジュールがあまり多くないようで、一つモジュール(Feeds: Entity Translation)を見つけました
  • モジュール(Feeds: Entity Translation)をインストール/有効化したら、Feedsのデータマッピング管理画面に、多言語有効なフィールドの各言語対応ターゲットが現れます
    多言語コンテンツデータ移行にサポートするFeeds: Entity Translation
  • 同一フィールドの各言語対応ターゲットを選択して多言語コンテンツインポートができました
Embedded thumbnail for DrupalのFeedsで多言語コンテンツデータのインポート
drupal
feeds
module usage

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

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

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

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

やりたいこと:モジュール(Feeds)でのデータマッピング時にPHPコードでフィールド値を加工する

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Tamper7.x-1.1、Feeds Tamper PHP7.x1.2
  • Feedsデータインポートの基本は「 Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考してください
  • データマッピングに、各インポートフィールドの値を加工するため、Feeds Tamperモジュールが良く利用します
  • この中に、特殊なフィールド値加工(例:既存のデータを取得するなど)のためFeeds Tamper PHPを利用して、PHPスクリプトの実行ができます
  • Feeds Tamper PHPでインポートデータの扱い、以下のパラメーターで、任意のフィールドの値の利用ができます
    • $field: 渡されたフィールドの値
    • $item['フィールド名']: インポート元で定義していたフィールド名でその値を取得する
      Drupalのモジュール(Feeds)のデータマッピング時にFeedsTamperでのPHPコードより各フィールドの値を加工します
  • 任意のフィールド(例:body)で他のフィールドの値(例:title)の取得することができます

注意点:PHPコード実行のセキュリティ問題とパフォーマンスへの影響

  • PHPコードを実行するには、eval()関数で行うため、任意のPHPコードの実行が可能となります
  • 特にインポートが公開の場合、PHPコード実行のセキュリティ問題を注意深く対応すべきです
  • また、データ取得したり、多くループをしたりして、パフォーマンスへの影響が考えるべきです
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

問題点:モジュール(Feeds)でデータインポート時に間違って設定があった場合インポートエラーなどが発生

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Import Previews7.x-1.x
  • 複雑なデータマッピング設定(例:Feeds Tamperなどで)時に、間違いやすくなります。その場合実際のデータをインポートで確認する必要があります
  • 間違った設定より、データインポートエラーなどが発生します

解決:モジュール(Feeds Import Preview)でインポート設定を確認します

  • モジュール(Feeds Import Preview)でデータインポート直前のステップまでに進んで、実際のインポート設定の確認ができます
    Drupalのモジュール(Feeds Import Preview)でデータインポート設定の確認ができます
  • 実際にソースから各フィールドの値が表示されています。
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
feeds
module usage

やりたいこと:コンテンツ(例:記事)のbodyフィールドの多言語データのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Entity Translation7.x-1.0
  • コンテンツのbody以外のフィールドがEntity Translation有効であれば、Feedsのデータマッピングで複数の言語のターゲットが現れます
    • drupalのfeedsで多言語コンテンツデータのインポート
  • BodyにEntity Translation有効の場合にマッピングでのターゲットが一つしかありません
  • 複数回でそれぞれの言語データをインポートします
    DrupalのFeedsで多言語bodyデータのインポート

FeedsのNode Processor設定画面でコンテンツ(例:記事)の初期言語を設定

  • コンテンツの元言語を設定する必要があります(もし、設定しなければ多言語の表示に影響しないが、コンテンツの翻訳タグが表示されない)
  • Node Processor設定画面でノートの言語を選択して、データインポート時に設定してくれます(ビデオを参考)

Feedsのマッピング設定画面でbodyのインポート言語設定を行います

  • データマッピング管理画面でbodyフィールドに言語設定があります
    データマッピング管理画面でbodyフィールドの言語設定
  • 複数の言語に対して複数のインポーターを用意するか、複数回で言語設定を行います

各言語に応じて複数回を分けてデータインポートする必要があります

  • 言語ごとにデータインポートする必要があります
    • 一括して同一フィールドに複数の言語インポートができません
  • 具体的なステップはビデオを参考してください
Embedded thumbnail for 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
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
system_management

モジュール(Localization Update)でサイトの多言語ユーザーインターフェースを導入します

  • 背景:Drupal7.54、Localization Update7.x-2.1
  • モジュール(Localization Update)をインストール/有効化します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)で「言語を追加」リンクをクリックすると、必要なユーザーインターフェース言語の導入ができます

管理者がサイト単位でユーザーインターフェース言語の一括設定(ほかの言語を使用しない)

  • Druaplを初期インストール(英語バージョンの場合)後に、別の言語(例:日本語)を導入し、その言語のみを使用します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)でのデフォルト値を選択すればよいです
    サイト単位の言語設定
  • サイト管理者が選択してから、一般ユーザーの選択はできません。

複数の言語をユーザーインターフェースとして利用する場合に、URL/ブラウザ/セッション/ユーザーの言語設定などよりサイトの言語自動判別ができます

  • 複数のユーザーインターフェース言語がある場合、どれを使用するかは決める必要があります
  • 言語判別設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語 » 判別と選択)言語利用の判別条件を設定します
    言語の判別設定と判別順序設定
    • URL: URLから言語を判定する(パス接頭語かドメイン)
    • セッション: 言語をrequest/sessionパラメーターから判定する。
    • ブラウザ: ブラウザーの言語設定から言語を判定する。
    • ユーザー: ユーザープロフィールで設定した言語に従う。
    • デフォルト: サイトのデフォルト言語を使う
  • 上記判別方法のい任意、または全部の選択はできます
  • 判別の優先順のソートができます
  • URLで言語判断設定した場合、URLのドメイン/パス接頭語の設定が必要となります
    言語判別のURLドメイン/パス接頭語設定
    • 「言語のドメイン」と「言語コードのパス接頭語」のどちらかの設定(両方の設定はできない)
    • 設定された方式で言語を判別となります
    • 説明の言葉通りに、一度設定したら、変更時にすでに存在しているパスが使用できなくなりますので、ご注意ください(変更後にすべてのパスを再構築などの作業が必要)
      言語判定URLの設定
Embedded thumbnail for Drupalの多言語ユーザーインターフェースの導入と設定
drupal
video
feeds

やりたいこと:Feedsで多言語コンテンツデータのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Feeds:Enity Translation7.x-1.0
  • モジュール:Entity Translationで多言語サイトを構築しています
  • 複数の言語コンテンツをデータ移行したいです
  • いろいろ調べてみてた、同一フィールドに多言語インポート方法が少なく、難しそうです

解決方法:モジュール(Feeds:Entity Translation)で多言語コンテンツデータの移行

  • 多言語コンテンツデータ移行をサポートするモジュールがあまり多くないようで、一つモジュール(Feeds: Entity Translation)を見つけました
  • モジュール(Feeds: Entity Translation)をインストール/有効化したら、Feedsのデータマッピング管理画面に、多言語有効なフィールドの各言語対応ターゲットが現れます
    多言語コンテンツデータ移行にサポートするFeeds: Entity Translation
  • 同一フィールドの各言語対応ターゲットを選択して多言語コンテンツインポートができました
Embedded thumbnail for DrupalのFeedsで多言語コンテンツデータのインポート
drupal
feeds
module usage

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

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

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

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

やりたいこと:モジュール(Feeds)でのデータマッピング時にPHPコードでフィールド値を加工する

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Tamper7.x-1.1、Feeds Tamper PHP7.x1.2
  • Feedsデータインポートの基本は「 Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考してください
  • データマッピングに、各インポートフィールドの値を加工するため、Feeds Tamperモジュールが良く利用します
  • この中に、特殊なフィールド値加工(例:既存のデータを取得するなど)のためFeeds Tamper PHPを利用して、PHPスクリプトの実行ができます
  • Feeds Tamper PHPでインポートデータの扱い、以下のパラメーターで、任意のフィールドの値の利用ができます
    • $field: 渡されたフィールドの値
    • $item['フィールド名']: インポート元で定義していたフィールド名でその値を取得する
      Drupalのモジュール(Feeds)のデータマッピング時にFeedsTamperでのPHPコードより各フィールドの値を加工します
  • 任意のフィールド(例:body)で他のフィールドの値(例:title)の取得することができます

注意点:PHPコード実行のセキュリティ問題とパフォーマンスへの影響

  • PHPコードを実行するには、eval()関数で行うため、任意のPHPコードの実行が可能となります
  • 特にインポートが公開の場合、PHPコード実行のセキュリティ問題を注意深く対応すべきです
  • また、データ取得したり、多くループをしたりして、パフォーマンスへの影響が考えるべきです
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

問題点:モジュール(Feeds)でデータインポート時に間違って設定があった場合インポートエラーなどが発生

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Import Previews7.x-1.x
  • 複雑なデータマッピング設定(例:Feeds Tamperなどで)時に、間違いやすくなります。その場合実際のデータをインポートで確認する必要があります
  • 間違った設定より、データインポートエラーなどが発生します

解決:モジュール(Feeds Import Preview)でインポート設定を確認します

  • モジュール(Feeds Import Preview)でデータインポート直前のステップまでに進んで、実際のインポート設定の確認ができます
    Drupalのモジュール(Feeds Import Preview)でデータインポート設定の確認ができます
  • 実際にソースから各フィールドの値が表示されています。
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
feeds
module usage

やりたいこと:コンテンツ(例:記事)のbodyフィールドの多言語データのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Entity Translation7.x-1.0
  • コンテンツのbody以外のフィールドがEntity Translation有効であれば、Feedsのデータマッピングで複数の言語のターゲットが現れます
    • drupalのfeedsで多言語コンテンツデータのインポート
  • BodyにEntity Translation有効の場合にマッピングでのターゲットが一つしかありません
  • 複数回でそれぞれの言語データをインポートします
    DrupalのFeedsで多言語bodyデータのインポート

FeedsのNode Processor設定画面でコンテンツ(例:記事)の初期言語を設定

  • コンテンツの元言語を設定する必要があります(もし、設定しなければ多言語の表示に影響しないが、コンテンツの翻訳タグが表示されない)
  • Node Processor設定画面でノートの言語を選択して、データインポート時に設定してくれます(ビデオを参考)

Feedsのマッピング設定画面でbodyのインポート言語設定を行います

  • データマッピング管理画面でbodyフィールドに言語設定があります
    データマッピング管理画面でbodyフィールドの言語設定
  • 複数の言語に対して複数のインポーターを用意するか、複数回で言語設定を行います

各言語に応じて複数回を分けてデータインポートする必要があります

  • 言語ごとにデータインポートする必要があります
    • 一括して同一フィールドに複数の言語インポートができません
  • 具体的なステップはビデオを参考してください
Embedded thumbnail for 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
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
system_management

モジュール(Localization Update)でサイトの多言語ユーザーインターフェースを導入します

  • 背景:Drupal7.54、Localization Update7.x-2.1
  • モジュール(Localization Update)をインストール/有効化します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)で「言語を追加」リンクをクリックすると、必要なユーザーインターフェース言語の導入ができます

管理者がサイト単位でユーザーインターフェース言語の一括設定(ほかの言語を使用しない)

  • Druaplを初期インストール(英語バージョンの場合)後に、別の言語(例:日本語)を導入し、その言語のみを使用します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)でのデフォルト値を選択すればよいです
    サイト単位の言語設定
  • サイト管理者が選択してから、一般ユーザーの選択はできません。

複数の言語をユーザーインターフェースとして利用する場合に、URL/ブラウザ/セッション/ユーザーの言語設定などよりサイトの言語自動判別ができます

  • 複数のユーザーインターフェース言語がある場合、どれを使用するかは決める必要があります
  • 言語判別設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語 » 判別と選択)言語利用の判別条件を設定します
    言語の判別設定と判別順序設定
    • URL: URLから言語を判定する(パス接頭語かドメイン)
    • セッション: 言語をrequest/sessionパラメーターから判定する。
    • ブラウザ: ブラウザーの言語設定から言語を判定する。
    • ユーザー: ユーザープロフィールで設定した言語に従う。
    • デフォルト: サイトのデフォルト言語を使う
  • 上記判別方法のい任意、または全部の選択はできます
  • 判別の優先順のソートができます
  • URLで言語判断設定した場合、URLのドメイン/パス接頭語の設定が必要となります
    言語判別のURLドメイン/パス接頭語設定
    • 「言語のドメイン」と「言語コードのパス接頭語」のどちらかの設定(両方の設定はできない)
    • 設定された方式で言語を判別となります
    • 説明の言葉通りに、一度設定したら、変更時にすでに存在しているパスが使用できなくなりますので、ご注意ください(変更後にすべてのパスを再構築などの作業が必要)
      言語判定URLの設定
Embedded thumbnail for Drupalの多言語ユーザーインターフェースの導入と設定
drupal
video
feeds

やりたいこと:Feedsで多言語コンテンツデータのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Feeds:Enity Translation7.x-1.0
  • モジュール:Entity Translationで多言語サイトを構築しています
  • 複数の言語コンテンツをデータ移行したいです
  • いろいろ調べてみてた、同一フィールドに多言語インポート方法が少なく、難しそうです

解決方法:モジュール(Feeds:Entity Translation)で多言語コンテンツデータの移行

  • 多言語コンテンツデータ移行をサポートするモジュールがあまり多くないようで、一つモジュール(Feeds: Entity Translation)を見つけました
  • モジュール(Feeds: Entity Translation)をインストール/有効化したら、Feedsのデータマッピング管理画面に、多言語有効なフィールドの各言語対応ターゲットが現れます
    多言語コンテンツデータ移行にサポートするFeeds: Entity Translation
  • 同一フィールドの各言語対応ターゲットを選択して多言語コンテンツインポートができました
Embedded thumbnail for DrupalのFeedsで多言語コンテンツデータのインポート
drupal
feeds
module usage

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

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

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

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

やりたいこと:モジュール(Feeds)でのデータマッピング時にPHPコードでフィールド値を加工する

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Tamper7.x-1.1、Feeds Tamper PHP7.x1.2
  • Feedsデータインポートの基本は「 Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考してください
  • データマッピングに、各インポートフィールドの値を加工するため、Feeds Tamperモジュールが良く利用します
  • この中に、特殊なフィールド値加工(例:既存のデータを取得するなど)のためFeeds Tamper PHPを利用して、PHPスクリプトの実行ができます
  • Feeds Tamper PHPでインポートデータの扱い、以下のパラメーターで、任意のフィールドの値の利用ができます
    • $field: 渡されたフィールドの値
    • $item['フィールド名']: インポート元で定義していたフィールド名でその値を取得する
      Drupalのモジュール(Feeds)のデータマッピング時にFeedsTamperでのPHPコードより各フィールドの値を加工します
  • 任意のフィールド(例:body)で他のフィールドの値(例:title)の取得することができます

注意点:PHPコード実行のセキュリティ問題とパフォーマンスへの影響

  • PHPコードを実行するには、eval()関数で行うため、任意のPHPコードの実行が可能となります
  • 特にインポートが公開の場合、PHPコード実行のセキュリティ問題を注意深く対応すべきです
  • また、データ取得したり、多くループをしたりして、パフォーマンスへの影響が考えるべきです
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

問題点:モジュール(Feeds)でデータインポート時に間違って設定があった場合インポートエラーなどが発生

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Import Previews7.x-1.x
  • 複雑なデータマッピング設定(例:Feeds Tamperなどで)時に、間違いやすくなります。その場合実際のデータをインポートで確認する必要があります
  • 間違った設定より、データインポートエラーなどが発生します

解決:モジュール(Feeds Import Preview)でインポート設定を確認します

  • モジュール(Feeds Import Preview)でデータインポート直前のステップまでに進んで、実際のインポート設定の確認ができます
    Drupalのモジュール(Feeds Import Preview)でデータインポート設定の確認ができます
  • 実際にソースから各フィールドの値が表示されています。
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
feeds
module usage

やりたいこと:コンテンツ(例:記事)のbodyフィールドの多言語データのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Entity Translation7.x-1.0
  • コンテンツのbody以外のフィールドがEntity Translation有効であれば、Feedsのデータマッピングで複数の言語のターゲットが現れます
    • drupalのfeedsで多言語コンテンツデータのインポート
  • BodyにEntity Translation有効の場合にマッピングでのターゲットが一つしかありません
  • 複数回でそれぞれの言語データをインポートします
    DrupalのFeedsで多言語bodyデータのインポート

FeedsのNode Processor設定画面でコンテンツ(例:記事)の初期言語を設定

  • コンテンツの元言語を設定する必要があります(もし、設定しなければ多言語の表示に影響しないが、コンテンツの翻訳タグが表示されない)
  • Node Processor設定画面でノートの言語を選択して、データインポート時に設定してくれます(ビデオを参考)

Feedsのマッピング設定画面でbodyのインポート言語設定を行います

  • データマッピング管理画面でbodyフィールドに言語設定があります
    データマッピング管理画面でbodyフィールドの言語設定
  • 複数の言語に対して複数のインポーターを用意するか、複数回で言語設定を行います

各言語に応じて複数回を分けてデータインポートする必要があります

  • 言語ごとにデータインポートする必要があります
    • 一括して同一フィールドに複数の言語インポートができません
  • 具体的なステップはビデオを参考してください
Embedded thumbnail for 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
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
system_management

モジュール(Localization Update)でサイトの多言語ユーザーインターフェースを導入します

  • 背景:Drupal7.54、Localization Update7.x-2.1
  • モジュール(Localization Update)をインストール/有効化します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)で「言語を追加」リンクをクリックすると、必要なユーザーインターフェース言語の導入ができます

管理者がサイト単位でユーザーインターフェース言語の一括設定(ほかの言語を使用しない)

  • Druaplを初期インストール(英語バージョンの場合)後に、別の言語(例:日本語)を導入し、その言語のみを使用します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)でのデフォルト値を選択すればよいです
    サイト単位の言語設定
  • サイト管理者が選択してから、一般ユーザーの選択はできません。

複数の言語をユーザーインターフェースとして利用する場合に、URL/ブラウザ/セッション/ユーザーの言語設定などよりサイトの言語自動判別ができます

  • 複数のユーザーインターフェース言語がある場合、どれを使用するかは決める必要があります
  • 言語判別設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語 » 判別と選択)言語利用の判別条件を設定します
    言語の判別設定と判別順序設定
    • URL: URLから言語を判定する(パス接頭語かドメイン)
    • セッション: 言語をrequest/sessionパラメーターから判定する。
    • ブラウザ: ブラウザーの言語設定から言語を判定する。
    • ユーザー: ユーザープロフィールで設定した言語に従う。
    • デフォルト: サイトのデフォルト言語を使う
  • 上記判別方法のい任意、または全部の選択はできます
  • 判別の優先順のソートができます
  • URLで言語判断設定した場合、URLのドメイン/パス接頭語の設定が必要となります
    言語判別のURLドメイン/パス接頭語設定
    • 「言語のドメイン」と「言語コードのパス接頭語」のどちらかの設定(両方の設定はできない)
    • 設定された方式で言語を判別となります
    • 説明の言葉通りに、一度設定したら、変更時にすでに存在しているパスが使用できなくなりますので、ご注意ください(変更後にすべてのパスを再構築などの作業が必要)
      言語判定URLの設定
Embedded thumbnail for Drupalの多言語ユーザーインターフェースの導入と設定
drupal
video
feeds

やりたいこと:Feedsで多言語コンテンツデータのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Feeds:Enity Translation7.x-1.0
  • モジュール:Entity Translationで多言語サイトを構築しています
  • 複数の言語コンテンツをデータ移行したいです
  • いろいろ調べてみてた、同一フィールドに多言語インポート方法が少なく、難しそうです

解決方法:モジュール(Feeds:Entity Translation)で多言語コンテンツデータの移行

  • 多言語コンテンツデータ移行をサポートするモジュールがあまり多くないようで、一つモジュール(Feeds: Entity Translation)を見つけました
  • モジュール(Feeds: Entity Translation)をインストール/有効化したら、Feedsのデータマッピング管理画面に、多言語有効なフィールドの各言語対応ターゲットが現れます
    多言語コンテンツデータ移行にサポートするFeeds: Entity Translation
  • 同一フィールドの各言語対応ターゲットを選択して多言語コンテンツインポートができました
Embedded thumbnail for DrupalのFeedsで多言語コンテンツデータのインポート
drupal
feeds
module usage

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

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

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

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

やりたいこと:モジュール(Feeds)でのデータマッピング時にPHPコードでフィールド値を加工する

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Tamper7.x-1.1、Feeds Tamper PHP7.x1.2
  • Feedsデータインポートの基本は「 Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考してください
  • データマッピングに、各インポートフィールドの値を加工するため、Feeds Tamperモジュールが良く利用します
  • この中に、特殊なフィールド値加工(例:既存のデータを取得するなど)のためFeeds Tamper PHPを利用して、PHPスクリプトの実行ができます
  • Feeds Tamper PHPでインポートデータの扱い、以下のパラメーターで、任意のフィールドの値の利用ができます
    • $field: 渡されたフィールドの値
    • $item['フィールド名']: インポート元で定義していたフィールド名でその値を取得する
      Drupalのモジュール(Feeds)のデータマッピング時にFeedsTamperでのPHPコードより各フィールドの値を加工します
  • 任意のフィールド(例:body)で他のフィールドの値(例:title)の取得することができます

注意点:PHPコード実行のセキュリティ問題とパフォーマンスへの影響

  • PHPコードを実行するには、eval()関数で行うため、任意のPHPコードの実行が可能となります
  • 特にインポートが公開の場合、PHPコード実行のセキュリティ問題を注意深く対応すべきです
  • また、データ取得したり、多くループをしたりして、パフォーマンスへの影響が考えるべきです
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

問題点:モジュール(Feeds)でデータインポート時に間違って設定があった場合インポートエラーなどが発生

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Import Previews7.x-1.x
  • 複雑なデータマッピング設定(例:Feeds Tamperなどで)時に、間違いやすくなります。その場合実際のデータをインポートで確認する必要があります
  • 間違った設定より、データインポートエラーなどが発生します

解決:モジュール(Feeds Import Preview)でインポート設定を確認します

  • モジュール(Feeds Import Preview)でデータインポート直前のステップまでに進んで、実際のインポート設定の確認ができます
    Drupalのモジュール(Feeds Import Preview)でデータインポート設定の確認ができます
  • 実際にソースから各フィールドの値が表示されています。
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
feeds
module usage

やりたいこと:コンテンツ(例:記事)のbodyフィールドの多言語データのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Entity Translation7.x-1.0
  • コンテンツのbody以外のフィールドがEntity Translation有効であれば、Feedsのデータマッピングで複数の言語のターゲットが現れます
    • drupalのfeedsで多言語コンテンツデータのインポート
  • BodyにEntity Translation有効の場合にマッピングでのターゲットが一つしかありません
  • 複数回でそれぞれの言語データをインポートします
    DrupalのFeedsで多言語bodyデータのインポート

FeedsのNode Processor設定画面でコンテンツ(例:記事)の初期言語を設定

  • コンテンツの元言語を設定する必要があります(もし、設定しなければ多言語の表示に影響しないが、コンテンツの翻訳タグが表示されない)
  • Node Processor設定画面でノートの言語を選択して、データインポート時に設定してくれます(ビデオを参考)

Feedsのマッピング設定画面でbodyのインポート言語設定を行います

  • データマッピング管理画面でbodyフィールドに言語設定があります
    データマッピング管理画面でbodyフィールドの言語設定
  • 複数の言語に対して複数のインポーターを用意するか、複数回で言語設定を行います

各言語に応じて複数回を分けてデータインポートする必要があります

  • 言語ごとにデータインポートする必要があります
    • 一括して同一フィールドに複数の言語インポートができません
  • 具体的なステップはビデオを参考してください
Embedded thumbnail for 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
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
system_management

モジュール(Localization Update)でサイトの多言語ユーザーインターフェースを導入します

  • 背景:Drupal7.54、Localization Update7.x-2.1
  • モジュール(Localization Update)をインストール/有効化します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)で「言語を追加」リンクをクリックすると、必要なユーザーインターフェース言語の導入ができます

管理者がサイト単位でユーザーインターフェース言語の一括設定(ほかの言語を使用しない)

  • Druaplを初期インストール(英語バージョンの場合)後に、別の言語(例:日本語)を導入し、その言語のみを使用します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)でのデフォルト値を選択すればよいです
    サイト単位の言語設定
  • サイト管理者が選択してから、一般ユーザーの選択はできません。

複数の言語をユーザーインターフェースとして利用する場合に、URL/ブラウザ/セッション/ユーザーの言語設定などよりサイトの言語自動判別ができます

  • 複数のユーザーインターフェース言語がある場合、どれを使用するかは決める必要があります
  • 言語判別設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語 » 判別と選択)言語利用の判別条件を設定します
    言語の判別設定と判別順序設定
    • URL: URLから言語を判定する(パス接頭語かドメイン)
    • セッション: 言語をrequest/sessionパラメーターから判定する。
    • ブラウザ: ブラウザーの言語設定から言語を判定する。
    • ユーザー: ユーザープロフィールで設定した言語に従う。
    • デフォルト: サイトのデフォルト言語を使う
  • 上記判別方法のい任意、または全部の選択はできます
  • 判別の優先順のソートができます
  • URLで言語判断設定した場合、URLのドメイン/パス接頭語の設定が必要となります
    言語判別のURLドメイン/パス接頭語設定
    • 「言語のドメイン」と「言語コードのパス接頭語」のどちらかの設定(両方の設定はできない)
    • 設定された方式で言語を判別となります
    • 説明の言葉通りに、一度設定したら、変更時にすでに存在しているパスが使用できなくなりますので、ご注意ください(変更後にすべてのパスを再構築などの作業が必要)
      言語判定URLの設定
Embedded thumbnail for Drupalの多言語ユーザーインターフェースの導入と設定
drupal
video
feeds

やりたいこと:Feedsで多言語コンテンツデータのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Feeds:Enity Translation7.x-1.0
  • モジュール:Entity Translationで多言語サイトを構築しています
  • 複数の言語コンテンツをデータ移行したいです
  • いろいろ調べてみてた、同一フィールドに多言語インポート方法が少なく、難しそうです

解決方法:モジュール(Feeds:Entity Translation)で多言語コンテンツデータの移行

  • 多言語コンテンツデータ移行をサポートするモジュールがあまり多くないようで、一つモジュール(Feeds: Entity Translation)を見つけました
  • モジュール(Feeds: Entity Translation)をインストール/有効化したら、Feedsのデータマッピング管理画面に、多言語有効なフィールドの各言語対応ターゲットが現れます
    多言語コンテンツデータ移行にサポートするFeeds: Entity Translation
  • 同一フィールドの各言語対応ターゲットを選択して多言語コンテンツインポートができました
Embedded thumbnail for DrupalのFeedsで多言語コンテンツデータのインポート
drupal
feeds
module usage

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

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

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

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

やりたいこと:モジュール(Feeds)でのデータマッピング時にPHPコードでフィールド値を加工する

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Tamper7.x-1.1、Feeds Tamper PHP7.x1.2
  • Feedsデータインポートの基本は「 Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考してください
  • データマッピングに、各インポートフィールドの値を加工するため、Feeds Tamperモジュールが良く利用します
  • この中に、特殊なフィールド値加工(例:既存のデータを取得するなど)のためFeeds Tamper PHPを利用して、PHPスクリプトの実行ができます
  • Feeds Tamper PHPでインポートデータの扱い、以下のパラメーターで、任意のフィールドの値の利用ができます
    • $field: 渡されたフィールドの値
    • $item['フィールド名']: インポート元で定義していたフィールド名でその値を取得する
      Drupalのモジュール(Feeds)のデータマッピング時にFeedsTamperでのPHPコードより各フィールドの値を加工します
  • 任意のフィールド(例:body)で他のフィールドの値(例:title)の取得することができます

注意点:PHPコード実行のセキュリティ問題とパフォーマンスへの影響

  • PHPコードを実行するには、eval()関数で行うため、任意のPHPコードの実行が可能となります
  • 特にインポートが公開の場合、PHPコード実行のセキュリティ問題を注意深く対応すべきです
  • また、データ取得したり、多くループをしたりして、パフォーマンスへの影響が考えるべきです
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

問題点:モジュール(Feeds)でデータインポート時に間違って設定があった場合インポートエラーなどが発生

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Import Previews7.x-1.x
  • 複雑なデータマッピング設定(例:Feeds Tamperなどで)時に、間違いやすくなります。その場合実際のデータをインポートで確認する必要があります
  • 間違った設定より、データインポートエラーなどが発生します

解決:モジュール(Feeds Import Preview)でインポート設定を確認します

  • モジュール(Feeds Import Preview)でデータインポート直前のステップまでに進んで、実際のインポート設定の確認ができます
    Drupalのモジュール(Feeds Import Preview)でデータインポート設定の確認ができます
  • 実際にソースから各フィールドの値が表示されています。
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
feeds
module usage

やりたいこと:コンテンツ(例:記事)のbodyフィールドの多言語データのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Entity Translation7.x-1.0
  • コンテンツのbody以外のフィールドがEntity Translation有効であれば、Feedsのデータマッピングで複数の言語のターゲットが現れます
    • drupalのfeedsで多言語コンテンツデータのインポート
  • BodyにEntity Translation有効の場合にマッピングでのターゲットが一つしかありません
  • 複数回でそれぞれの言語データをインポートします
    DrupalのFeedsで多言語bodyデータのインポート

FeedsのNode Processor設定画面でコンテンツ(例:記事)の初期言語を設定

  • コンテンツの元言語を設定する必要があります(もし、設定しなければ多言語の表示に影響しないが、コンテンツの翻訳タグが表示されない)
  • Node Processor設定画面でノートの言語を選択して、データインポート時に設定してくれます(ビデオを参考)

Feedsのマッピング設定画面でbodyのインポート言語設定を行います

  • データマッピング管理画面でbodyフィールドに言語設定があります
    データマッピング管理画面でbodyフィールドの言語設定
  • 複数の言語に対して複数のインポーターを用意するか、複数回で言語設定を行います

各言語に応じて複数回を分けてデータインポートする必要があります

  • 言語ごとにデータインポートする必要があります
    • 一括して同一フィールドに複数の言語インポートができません
  • 具体的なステップはビデオを参考してください
Embedded thumbnail for 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
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
system_management

モジュール(Localization Update)でサイトの多言語ユーザーインターフェースを導入します

  • 背景:Drupal7.54、Localization Update7.x-2.1
  • モジュール(Localization Update)をインストール/有効化します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)で「言語を追加」リンクをクリックすると、必要なユーザーインターフェース言語の導入ができます

管理者がサイト単位でユーザーインターフェース言語の一括設定(ほかの言語を使用しない)

  • Druaplを初期インストール(英語バージョンの場合)後に、別の言語(例:日本語)を導入し、その言語のみを使用します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)でのデフォルト値を選択すればよいです
    サイト単位の言語設定
  • サイト管理者が選択してから、一般ユーザーの選択はできません。

複数の言語をユーザーインターフェースとして利用する場合に、URL/ブラウザ/セッション/ユーザーの言語設定などよりサイトの言語自動判別ができます

  • 複数のユーザーインターフェース言語がある場合、どれを使用するかは決める必要があります
  • 言語判別設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語 » 判別と選択)言語利用の判別条件を設定します
    言語の判別設定と判別順序設定
    • URL: URLから言語を判定する(パス接頭語かドメイン)
    • セッション: 言語をrequest/sessionパラメーターから判定する。
    • ブラウザ: ブラウザーの言語設定から言語を判定する。
    • ユーザー: ユーザープロフィールで設定した言語に従う。
    • デフォルト: サイトのデフォルト言語を使う
  • 上記判別方法のい任意、または全部の選択はできます
  • 判別の優先順のソートができます
  • URLで言語判断設定した場合、URLのドメイン/パス接頭語の設定が必要となります
    言語判別のURLドメイン/パス接頭語設定
    • 「言語のドメイン」と「言語コードのパス接頭語」のどちらかの設定(両方の設定はできない)
    • 設定された方式で言語を判別となります
    • 説明の言葉通りに、一度設定したら、変更時にすでに存在しているパスが使用できなくなりますので、ご注意ください(変更後にすべてのパスを再構築などの作業が必要)
      言語判定URLの設定
Embedded thumbnail for Drupalの多言語ユーザーインターフェースの導入と設定
drupal
video
feeds

やりたいこと:Feedsで多言語コンテンツデータのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Feeds:Enity Translation7.x-1.0
  • モジュール:Entity Translationで多言語サイトを構築しています
  • 複数の言語コンテンツをデータ移行したいです
  • いろいろ調べてみてた、同一フィールドに多言語インポート方法が少なく、難しそうです

解決方法:モジュール(Feeds:Entity Translation)で多言語コンテンツデータの移行

  • 多言語コンテンツデータ移行をサポートするモジュールがあまり多くないようで、一つモジュール(Feeds: Entity Translation)を見つけました
  • モジュール(Feeds: Entity Translation)をインストール/有効化したら、Feedsのデータマッピング管理画面に、多言語有効なフィールドの各言語対応ターゲットが現れます
    多言語コンテンツデータ移行にサポートするFeeds: Entity Translation
  • 同一フィールドの各言語対応ターゲットを選択して多言語コンテンツインポートができました
Embedded thumbnail for DrupalのFeedsで多言語コンテンツデータのインポート
drupal
feeds
module usage

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

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

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

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

やりたいこと:モジュール(Feeds)でのデータマッピング時にPHPコードでフィールド値を加工する

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Tamper7.x-1.1、Feeds Tamper PHP7.x1.2
  • Feedsデータインポートの基本は「 Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本) 」を参考してください
  • データマッピングに、各インポートフィールドの値を加工するため、Feeds Tamperモジュールが良く利用します
  • この中に、特殊なフィールド値加工(例:既存のデータを取得するなど)のためFeeds Tamper PHPを利用して、PHPスクリプトの実行ができます
  • Feeds Tamper PHPでインポートデータの扱い、以下のパラメーターで、任意のフィールドの値の利用ができます
    • $field: 渡されたフィールドの値
    • $item['フィールド名']: インポート元で定義していたフィールド名でその値を取得する
      Drupalのモジュール(Feeds)のデータマッピング時にFeedsTamperでのPHPコードより各フィールドの値を加工します
  • 任意のフィールド(例:body)で他のフィールドの値(例:title)の取得することができます

注意点:PHPコード実行のセキュリティ問題とパフォーマンスへの影響

  • PHPコードを実行するには、eval()関数で行うため、任意のPHPコードの実行が可能となります
  • 特にインポートが公開の場合、PHPコード実行のセキュリティ問題を注意深く対応すべきです
  • また、データ取得したり、多くループをしたりして、パフォーマンスへの影響が考えるべきです
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
feeds
module usage

問題点:モジュール(Feeds)でデータインポート時に間違って設定があった場合インポートエラーなどが発生

  • 環境:Drupal7.54、Feeds7.x-2.0、Feeds Import Previews7.x-1.x
  • 複雑なデータマッピング設定(例:Feeds Tamperなどで)時に、間違いやすくなります。その場合実際のデータをインポートで確認する必要があります
  • 間違った設定より、データインポートエラーなどが発生します

解決:モジュール(Feeds Import Preview)でインポート設定を確認します

  • モジュール(Feeds Import Preview)でデータインポート直前のステップまでに進んで、実際のインポート設定の確認ができます
    Drupalのモジュール(Feeds Import Preview)でデータインポート設定の確認ができます
  • 実際にソースから各フィールドの値が表示されています。
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
feeds
module usage

やりたいこと:コンテンツ(例:記事)のbodyフィールドの多言語データのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Entity Translation7.x-1.0
  • コンテンツのbody以外のフィールドがEntity Translation有効であれば、Feedsのデータマッピングで複数の言語のターゲットが現れます
    • drupalのfeedsで多言語コンテンツデータのインポート
  • BodyにEntity Translation有効の場合にマッピングでのターゲットが一つしかありません
  • 複数回でそれぞれの言語データをインポートします
    DrupalのFeedsで多言語bodyデータのインポート

FeedsのNode Processor設定画面でコンテンツ(例:記事)の初期言語を設定

  • コンテンツの元言語を設定する必要があります(もし、設定しなければ多言語の表示に影響しないが、コンテンツの翻訳タグが表示されない)
  • Node Processor設定画面でノートの言語を選択して、データインポート時に設定してくれます(ビデオを参考)

Feedsのマッピング設定画面でbodyのインポート言語設定を行います

  • データマッピング管理画面でbodyフィールドに言語設定があります
    データマッピング管理画面でbodyフィールドの言語設定
  • 複数の言語に対して複数のインポーターを用意するか、複数回で言語設定を行います

各言語に応じて複数回を分けてデータインポートする必要があります

  • 言語ごとにデータインポートする必要があります
    • 一括して同一フィールドに複数の言語インポートができません
  • 具体的なステップはビデオを参考してください
Embedded thumbnail for 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
drupal
feeds
module usage

Feedsモジュールの基本使用:csvデータをノード(node)にインポート

  • 環境:Drupal7.54、Feeds7.x-2.0
  • Feedsのインポート機能を理解するには、csvデータインポートから始めたほうが良いでしょう
  • 例:コンテンツのタイトルと内容をインポートします
    DrupalのFeedsモジュールでcsvデータのインポート

注意事項:基本設定とプロセッサーの設定

  • 基本的なインポート操作はビデオを参考してください
  • 基本設定の内容に周期的なインポートが必要の場合にインポートの頻度を設定します
  • プロセッサーの設定
    • 新規ノートの作成許可するかの設定
    • 複数回のインポートが必要な場合に「 ハッシュチェックをスキップ 」をチェックします
    • 投稿者の設定はデータ新規作成のみに使用されます
    • コンテンツ更新の場合、コンテンツの作成者が更新権限がチェックされます
  • プロセッター設定について、記事「Drupalのモジュール(Feeds)で手動でデータインポート時の必須設定 」を参考してください
 
 
 
Embedded thumbnail for Drupalのモジュール(Feeds)でcsvデータをコンテンツにインポート(Feedsの基本)
drupal
video
system_management

モジュール(Localization Update)でサイトの多言語ユーザーインターフェースを導入します

  • 背景:Drupal7.54、Localization Update7.x-2.1
  • モジュール(Localization Update)をインストール/有効化します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)で「言語を追加」リンクをクリックすると、必要なユーザーインターフェース言語の導入ができます

管理者がサイト単位でユーザーインターフェース言語の一括設定(ほかの言語を使用しない)

  • Druaplを初期インストール(英語バージョンの場合)後に、別の言語(例:日本語)を導入し、その言語のみを使用します
  • 言語設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語)でのデフォルト値を選択すればよいです
    サイト単位の言語設定
  • サイト管理者が選択してから、一般ユーザーの選択はできません。

複数の言語をユーザーインターフェースとして利用する場合に、URL/ブラウザ/セッション/ユーザーの言語設定などよりサイトの言語自動判別ができます

  • 複数のユーザーインターフェース言語がある場合、どれを使用するかは決める必要があります
  • 言語判別設定画面(ホーム » 管理 » 環境設定 » 地域と言語 » 言語 » 判別と選択)言語利用の判別条件を設定します
    言語の判別設定と判別順序設定
    • URL: URLから言語を判定する(パス接頭語かドメイン)
    • セッション: 言語をrequest/sessionパラメーターから判定する。
    • ブラウザ: ブラウザーの言語設定から言語を判定する。
    • ユーザー: ユーザープロフィールで設定した言語に従う。
    • デフォルト: サイトのデフォルト言語を使う
  • 上記判別方法のい任意、または全部の選択はできます
  • 判別の優先順のソートができます
  • URLで言語判断設定した場合、URLのドメイン/パス接頭語の設定が必要となります
    言語判別のURLドメイン/パス接頭語設定
    • 「言語のドメイン」と「言語コードのパス接頭語」のどちらかの設定(両方の設定はできない)
    • 設定された方式で言語を判別となります
    • 説明の言葉通りに、一度設定したら、変更時にすでに存在しているパスが使用できなくなりますので、ご注意ください(変更後にすべてのパスを再構築などの作業が必要)
      言語判定URLの設定
Embedded thumbnail for Drupalの多言語ユーザーインターフェースの導入と設定
drupal
video
feeds

やりたいこと:Feedsで多言語コンテンツデータのインポート

  • 背景:Drupal7.55、Feeds7.x-2.0、Feeds:Enity Translation7.x-1.0
  • モジュール:Entity Translationで多言語サイトを構築しています
  • 複数の言語コンテンツをデータ移行したいです
  • いろいろ調べてみてた、同一フィールドに多言語インポート方法が少なく、難しそうです

解決方法:モジュール(Feeds:Entity Translation)で多言語コンテンツデータの移行

  • 多言語コンテンツデータ移行をサポートするモジュールがあまり多くないようで、一つモジュール(Feeds: Entity Translation)を見つけました
  • モジュール(Feeds: Entity Translation)をインストール/有効化したら、Feedsのデータマッピング管理画面に、多言語有効なフィールドの各言語対応ターゲットが現れます
    多言語コンテンツデータ移行にサポートするFeeds: Entity Translation
  • 同一フィールドの各言語対応ターゲットを選択して多言語コンテンツインポートができました
Embedded thumbnail for DrupalのFeedsで多言語コンテンツデータのインポート
drupal
feeds
module usage

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

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

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

  • 「投稿時にインポート」オプションが無効の場合、手動でデータインポートはできません
  • インポートデータがあるにはかかわらず、画面上に「インポートされた項目はありません」として表示されます
  • バッチにインポートジョブを入れたメッセージはありません
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
php
development
bug
syntax highlighter

別々のDrupal(バージョン7)ソースのサイトを一つ共有ソースのところにサイト移行

  • 複数のDrupalソースで構築した複数のウェブサイトがありまして、Drupalソースのバージョンアップ、バグ管理などに手間がかかり、一つのDrupal共有ソールの元で複数のサイトを構築しました。
  • 今回は一つのサイトを共有ソースのところに移行を行いました
  • 移行をシンプルにするため、事前に不必要ないくつかモジュール(SyntaxHighlighter含め)をアンインストールしました
  • 移行後に再度モジュール(SyntaxHighlighter含め)をインストールし直します

モジュール(SyntaxHighlighter)インストール後にSyntaxHighlighterライブラリが見つからないエラー

  • まずSyntaxHighlighterのライブラリ(3.0.83)をダウンロードしてsites/all/libraies/syntaxhighlighter_3.0.83に展開しました
  • 通常の方法でSyntaxHighlighterモジュール(7.x-2.0)をインストールして有効化しました
  • 以前のサイトになっかたエラーメッセージ:
    Warning: file_get_contents(sites/all/libraries/flexslider/scripts/shCore.js): failed to open stream: No such file or directory _locale_parse_js_file() (/virtual/drills/public_html/drupal7/includes/locale.inc ファイル 1527行).
    Warning: file_get_contents(sites/all/libraries/flexslider/scripts/shBrushPhp.js): failed to open stream: No such file or directory _locale_parse_js_file() (/virtual/drills/public_html/drupal7/includes/locale.inc ファイル 1527行)
    
  • shCore.jsがSyntaxHighlighterのライブラリにあるはずなのに、なぜかflexsliderライブラリに関連付けられました(不思議なエラー)

問題:flexsliderのライブラリに同じ名前(shCore.js)のファイルがありました

  • 他に同じようなエラーがあるか、検索してみたが、答えはありませんでした
  • ソースコードを読んで自力で解決するしかないですね。幸い、複雑なモジュールではなく、SyntaxHighlighterのjsファイルをページロード時にクライアント側に渡すプログラムです
  • 最初は sites/all/modules/syntaxhighlighter/syntaxhighlighter.install をチェックしました。44行目にあるライブラリパス取得関数:sntaxhighlighter_get_lib_location()を注目しました
  • 関数(_syntaxhighlighter_get_lib_location())は sites/all/modules/syntaxhighlighter/syntaxhighlighter.module にあります。さらに、ライブラリパス取得ロジックを探してみました
  • syntaxhighlighter.moduleの377行あたりにあるライブラリフォルダスキャン関数:_syntaxhighlighter_scan_lib_location()があります
    • ライブラリフォルダスキャンの原理:shCore.jsが含まれているフォルダを取得します
  • _syntaxhighlighter_scan_lib_location()にwatchdogを入れて、取得したフォルダをログとして出力しました。
  • 結果として、このパス「sites/all/libraries/flexslider/demo/js/shCore.jssites/all/libraries/flexslider/demo/js/shCore.js」を取得しました。
  • flexSlider/demoの下に同じ名前(shCore.js)のファイルがあるため、flexsliderライブラリに関連づけられました。

解決:demoフォルダ(「sites/all/libraries/flexslider/demo」)を消して、再インストールします

  • flexsliderのdemoフォルダが邪魔にになってるため、またライブラリにdemoプログラムを使用しないため、demoフォルダを消しました
  • SyntaxHighlighterモジュールをアンインストールして、再インストールしたら、機能正常に戻りました
drupal
customization
development
module usage

やりたいこと:一つDrupalのソースで複数のサイト(複数のドメイン)を構築したいです

  • Drupalを用いて複数のサイト(ドメイン)を構築する場合、一つサイト(ドメイン)ごとに一つのDrupalソースで構築することがもちろん問題はありません
  • Drupalソースが分散すると、バージョンアップ、バグ管理などの作業が大変になります
  • 当然一つのDrupalソースの元で複数のサイト(ドメイン)の構築が必要となります
    • 一ドメイン ⇒ Drupalソース ⇒ 共有DB
    • 一ドメイン ⇒ Drupalソース ⇒ 独立DB
  • Drupalでは複数のサイト(ドメイン)への対応をしています

sitesディレクトリの下にドメインごとの子ディレクトリを作成してマルティサイトを構築します

  • 複数のドメイン名をDrupalのルートディレクトリに同期します(例:シンボリックリンクでドメイン名をディレクトリと同期します)
    • 例: old-pine.net をDrupalのルートディレクトリにシンボリックリンクで同期します
  • Drupalのルートディレクトリの下に sites ディレクトリがあります。sitesの下に各メイン名に同期したいディレクトリを作成します
    • 例:sites/pine を作成します
  • sites/sites.phpファイルでドメイン名をディレクトと同期設定を行います
    • 例: 'old-pine.net' => 'pine'  (書き方: ドメイン名 => ディレクトリ名)
       $sites = array(
          'old-pine.net' => 'pine',
       );
      
  • 新規作成したディレクトの下にサイトのインストール設定ファイル(settings.php)の作成
    • 例:sites/pine/settings.phpを作成します
    • settings.phpの内容はsites/pine/default.settings.phpのコピーで良いです(サイト新規作成する場合)
  • 追加したドメイン名でサイトをアクセスして、新規サイトができたことを確認します
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
php
development
bug
syntax highlighter

別々のDrupal(バージョン7)ソースのサイトを一つ共有ソースのところにサイト移行

  • 複数のDrupalソースで構築した複数のウェブサイトがありまして、Drupalソースのバージョンアップ、バグ管理などに手間がかかり、一つのDrupal共有ソールの元で複数のサイトを構築しました。
  • 今回は一つのサイトを共有ソースのところに移行を行いました
  • 移行をシンプルにするため、事前に不必要ないくつかモジュール(SyntaxHighlighter含め)をアンインストールしました
  • 移行後に再度モジュール(SyntaxHighlighter含め)をインストールし直します

モジュール(SyntaxHighlighter)インストール後にSyntaxHighlighterライブラリが見つからないエラー

  • まずSyntaxHighlighterのライブラリ(3.0.83)をダウンロードしてsites/all/libraies/syntaxhighlighter_3.0.83に展開しました
  • 通常の方法でSyntaxHighlighterモジュール(7.x-2.0)をインストールして有効化しました
  • 以前のサイトになっかたエラーメッセージ:
    Warning: file_get_contents(sites/all/libraries/flexslider/scripts/shCore.js): failed to open stream: No such file or directory _locale_parse_js_file() (/virtual/drills/public_html/drupal7/includes/locale.inc ファイル 1527行).
    Warning: file_get_contents(sites/all/libraries/flexslider/scripts/shBrushPhp.js): failed to open stream: No such file or directory _locale_parse_js_file() (/virtual/drills/public_html/drupal7/includes/locale.inc ファイル 1527行)
    
  • shCore.jsがSyntaxHighlighterのライブラリにあるはずなのに、なぜかflexsliderライブラリに関連付けられました(不思議なエラー)

問題:flexsliderのライブラリに同じ名前(shCore.js)のファイルがありました

  • 他に同じようなエラーがあるか、検索してみたが、答えはありませんでした
  • ソースコードを読んで自力で解決するしかないですね。幸い、複雑なモジュールではなく、SyntaxHighlighterのjsファイルをページロード時にクライアント側に渡すプログラムです
  • 最初は sites/all/modules/syntaxhighlighter/syntaxhighlighter.install をチェックしました。44行目にあるライブラリパス取得関数:sntaxhighlighter_get_lib_location()を注目しました
  • 関数(_syntaxhighlighter_get_lib_location())は sites/all/modules/syntaxhighlighter/syntaxhighlighter.module にあります。さらに、ライブラリパス取得ロジックを探してみました
  • syntaxhighlighter.moduleの377行あたりにあるライブラリフォルダスキャン関数:_syntaxhighlighter_scan_lib_location()があります
    • ライブラリフォルダスキャンの原理:shCore.jsが含まれているフォルダを取得します
  • _syntaxhighlighter_scan_lib_location()にwatchdogを入れて、取得したフォルダをログとして出力しました。
  • 結果として、このパス「sites/all/libraries/flexslider/demo/js/shCore.jssites/all/libraries/flexslider/demo/js/shCore.js」を取得しました。
  • flexSlider/demoの下に同じ名前(shCore.js)のファイルがあるため、flexsliderライブラリに関連づけられました。

解決:demoフォルダ(「sites/all/libraries/flexslider/demo」)を消して、再インストールします

  • flexsliderのdemoフォルダが邪魔にになってるため、またライブラリにdemoプログラムを使用しないため、demoフォルダを消しました
  • SyntaxHighlighterモジュールをアンインストールして、再インストールしたら、機能正常に戻りました
drupal
customization
development
module usage

やりたいこと:一つDrupalのソースで複数のサイト(複数のドメイン)を構築したいです

  • Drupalを用いて複数のサイト(ドメイン)を構築する場合、一つサイト(ドメイン)ごとに一つのDrupalソースで構築することがもちろん問題はありません
  • Drupalソースが分散すると、バージョンアップ、バグ管理などの作業が大変になります
  • 当然一つのDrupalソースの元で複数のサイト(ドメイン)の構築が必要となります
    • 一ドメイン ⇒ Drupalソース ⇒ 共有DB
    • 一ドメイン ⇒ Drupalソース ⇒ 独立DB
  • Drupalでは複数のサイト(ドメイン)への対応をしています

sitesディレクトリの下にドメインごとの子ディレクトリを作成してマルティサイトを構築します

  • 複数のドメイン名をDrupalのルートディレクトリに同期します(例:シンボリックリンクでドメイン名をディレクトリと同期します)
    • 例: old-pine.net をDrupalのルートディレクトリにシンボリックリンクで同期します
  • Drupalのルートディレクトリの下に sites ディレクトリがあります。sitesの下に各メイン名に同期したいディレクトリを作成します
    • 例:sites/pine を作成します
  • sites/sites.phpファイルでドメイン名をディレクトと同期設定を行います
    • 例: 'old-pine.net' => 'pine'  (書き方: ドメイン名 => ディレクトリ名)
       $sites = array(
          'old-pine.net' => 'pine',
       );
      
  • 新規作成したディレクトの下にサイトのインストール設定ファイル(settings.php)の作成
    • 例:sites/pine/settings.phpを作成します
    • settings.phpの内容はsites/pine/default.settings.phpのコピーで良いです(サイト新規作成する場合)
  • 追加したドメイン名でサイトをアクセスして、新規サイトができたことを確認します
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
php
development
bug
syntax highlighter

別々のDrupal(バージョン7)ソースのサイトを一つ共有ソースのところにサイト移行

  • 複数のDrupalソースで構築した複数のウェブサイトがありまして、Drupalソースのバージョンアップ、バグ管理などに手間がかかり、一つのDrupal共有ソールの元で複数のサイトを構築しました。
  • 今回は一つのサイトを共有ソースのところに移行を行いました
  • 移行をシンプルにするため、事前に不必要ないくつかモジュール(SyntaxHighlighter含め)をアンインストールしました
  • 移行後に再度モジュール(SyntaxHighlighter含め)をインストールし直します

モジュール(SyntaxHighlighter)インストール後にSyntaxHighlighterライブラリが見つからないエラー

  • まずSyntaxHighlighterのライブラリ(3.0.83)をダウンロードしてsites/all/libraies/syntaxhighlighter_3.0.83に展開しました
  • 通常の方法でSyntaxHighlighterモジュール(7.x-2.0)をインストールして有効化しました
  • 以前のサイトになっかたエラーメッセージ:
    Warning: file_get_contents(sites/all/libraries/flexslider/scripts/shCore.js): failed to open stream: No such file or directory _locale_parse_js_file() (/virtual/drills/public_html/drupal7/includes/locale.inc ファイル 1527行).
    Warning: file_get_contents(sites/all/libraries/flexslider/scripts/shBrushPhp.js): failed to open stream: No such file or directory _locale_parse_js_file() (/virtual/drills/public_html/drupal7/includes/locale.inc ファイル 1527行)
    
  • shCore.jsがSyntaxHighlighterのライブラリにあるはずなのに、なぜかflexsliderライブラリに関連付けられました(不思議なエラー)

問題:flexsliderのライブラリに同じ名前(shCore.js)のファイルがありました

  • 他に同じようなエラーがあるか、検索してみたが、答えはありませんでした
  • ソースコードを読んで自力で解決するしかないですね。幸い、複雑なモジュールではなく、SyntaxHighlighterのjsファイルをページロード時にクライアント側に渡すプログラムです
  • 最初は sites/all/modules/syntaxhighlighter/syntaxhighlighter.install をチェックしました。44行目にあるライブラリパス取得関数:sntaxhighlighter_get_lib_location()を注目しました
  • 関数(_syntaxhighlighter_get_lib_location())は sites/all/modules/syntaxhighlighter/syntaxhighlighter.module にあります。さらに、ライブラリパス取得ロジックを探してみました
  • syntaxhighlighter.moduleの377行あたりにあるライブラリフォルダスキャン関数:_syntaxhighlighter_scan_lib_location()があります
    • ライブラリフォルダスキャンの原理:shCore.jsが含まれているフォルダを取得します
  • _syntaxhighlighter_scan_lib_location()にwatchdogを入れて、取得したフォルダをログとして出力しました。
  • 結果として、このパス「sites/all/libraries/flexslider/demo/js/shCore.jssites/all/libraries/flexslider/demo/js/shCore.js」を取得しました。
  • flexSlider/demoの下に同じ名前(shCore.js)のファイルがあるため、flexsliderライブラリに関連づけられました。

解決:demoフォルダ(「sites/all/libraries/flexslider/demo」)を消して、再インストールします

  • flexsliderのdemoフォルダが邪魔にになってるため、またライブラリにdemoプログラムを使用しないため、demoフォルダを消しました
  • SyntaxHighlighterモジュールをアンインストールして、再インストールしたら、機能正常に戻りました
drupal
customization
development
module usage

やりたいこと:一つDrupalのソースで複数のサイト(複数のドメイン)を構築したいです

  • Drupalを用いて複数のサイト(ドメイン)を構築する場合、一つサイト(ドメイン)ごとに一つのDrupalソースで構築することがもちろん問題はありません
  • Drupalソースが分散すると、バージョンアップ、バグ管理などの作業が大変になります
  • 当然一つのDrupalソースの元で複数のサイト(ドメイン)の構築が必要となります
    • 一ドメイン ⇒ Drupalソース ⇒ 共有DB
    • 一ドメイン ⇒ Drupalソース ⇒ 独立DB
  • Drupalでは複数のサイト(ドメイン)への対応をしています

sitesディレクトリの下にドメインごとの子ディレクトリを作成してマルティサイトを構築します

  • 複数のドメイン名をDrupalのルートディレクトリに同期します(例:シンボリックリンクでドメイン名をディレクトリと同期します)
    • 例: old-pine.net をDrupalのルートディレクトリにシンボリックリンクで同期します
  • Drupalのルートディレクトリの下に sites ディレクトリがあります。sitesの下に各メイン名に同期したいディレクトリを作成します
    • 例:sites/pine を作成します
  • sites/sites.phpファイルでドメイン名をディレクトと同期設定を行います
    • 例: 'old-pine.net' => 'pine'  (書き方: ドメイン名 => ディレクトリ名)
       $sites = array(
          'old-pine.net' => 'pine',
       );
      
  • 新規作成したディレクトの下にサイトのインストール設定ファイル(settings.php)の作成
    • 例:sites/pine/settings.phpを作成します
    • settings.phpの内容はsites/pine/default.settings.phpのコピーで良いです(サイト新規作成する場合)
  • 追加したドメイン名でサイトをアクセスして、新規サイトができたことを確認します
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
php
development
bug
syntax highlighter

別々のDrupal(バージョン7)ソースのサイトを一つ共有ソースのところにサイト移行

  • 複数のDrupalソースで構築した複数のウェブサイトがありまして、Drupalソースのバージョンアップ、バグ管理などに手間がかかり、一つのDrupal共有ソールの元で複数のサイトを構築しました。
  • 今回は一つのサイトを共有ソースのところに移行を行いました
  • 移行をシンプルにするため、事前に不必要ないくつかモジュール(SyntaxHighlighter含め)をアンインストールしました
  • 移行後に再度モジュール(SyntaxHighlighter含め)をインストールし直します

モジュール(SyntaxHighlighter)インストール後にSyntaxHighlighterライブラリが見つからないエラー

  • まずSyntaxHighlighterのライブラリ(3.0.83)をダウンロードしてsites/all/libraies/syntaxhighlighter_3.0.83に展開しました
  • 通常の方法でSyntaxHighlighterモジュール(7.x-2.0)をインストールして有効化しました
  • 以前のサイトになっかたエラーメッセージ:
    Warning: file_get_contents(sites/all/libraries/flexslider/scripts/shCore.js): failed to open stream: No such file or directory _locale_parse_js_file() (/virtual/drills/public_html/drupal7/includes/locale.inc ファイル 1527行).
    Warning: file_get_contents(sites/all/libraries/flexslider/scripts/shBrushPhp.js): failed to open stream: No such file or directory _locale_parse_js_file() (/virtual/drills/public_html/drupal7/includes/locale.inc ファイル 1527行)
    
  • shCore.jsがSyntaxHighlighterのライブラリにあるはずなのに、なぜかflexsliderライブラリに関連付けられました(不思議なエラー)

問題:flexsliderのライブラリに同じ名前(shCore.js)のファイルがありました

  • 他に同じようなエラーがあるか、検索してみたが、答えはありませんでした
  • ソースコードを読んで自力で解決するしかないですね。幸い、複雑なモジュールではなく、SyntaxHighlighterのjsファイルをページロード時にクライアント側に渡すプログラムです
  • 最初は sites/all/modules/syntaxhighlighter/syntaxhighlighter.install をチェックしました。44行目にあるライブラリパス取得関数:sntaxhighlighter_get_lib_location()を注目しました
  • 関数(_syntaxhighlighter_get_lib_location())は sites/all/modules/syntaxhighlighter/syntaxhighlighter.module にあります。さらに、ライブラリパス取得ロジックを探してみました
  • syntaxhighlighter.moduleの377行あたりにあるライブラリフォルダスキャン関数:_syntaxhighlighter_scan_lib_location()があります
    • ライブラリフォルダスキャンの原理:shCore.jsが含まれているフォルダを取得します
  • _syntaxhighlighter_scan_lib_location()にwatchdogを入れて、取得したフォルダをログとして出力しました。
  • 結果として、このパス「sites/all/libraries/flexslider/demo/js/shCore.jssites/all/libraries/flexslider/demo/js/shCore.js」を取得しました。
  • flexSlider/demoの下に同じ名前(shCore.js)のファイルがあるため、flexsliderライブラリに関連づけられました。

解決:demoフォルダ(「sites/all/libraries/flexslider/demo」)を消して、再インストールします

  • flexsliderのdemoフォルダが邪魔にになってるため、またライブラリにdemoプログラムを使用しないため、demoフォルダを消しました
  • SyntaxHighlighterモジュールをアンインストールして、再インストールしたら、機能正常に戻りました
drupal
customization
development
module usage

やりたいこと:一つDrupalのソースで複数のサイト(複数のドメイン)を構築したいです

  • Drupalを用いて複数のサイト(ドメイン)を構築する場合、一つサイト(ドメイン)ごとに一つのDrupalソースで構築することがもちろん問題はありません
  • Drupalソースが分散すると、バージョンアップ、バグ管理などの作業が大変になります
  • 当然一つのDrupalソースの元で複数のサイト(ドメイン)の構築が必要となります
    • 一ドメイン ⇒ Drupalソース ⇒ 共有DB
    • 一ドメイン ⇒ Drupalソース ⇒ 独立DB
  • Drupalでは複数のサイト(ドメイン)への対応をしています

sitesディレクトリの下にドメインごとの子ディレクトリを作成してマルティサイトを構築します

  • 複数のドメイン名をDrupalのルートディレクトリに同期します(例:シンボリックリンクでドメイン名をディレクトリと同期します)
    • 例: old-pine.net をDrupalのルートディレクトリにシンボリックリンクで同期します
  • Drupalのルートディレクトリの下に sites ディレクトリがあります。sitesの下に各メイン名に同期したいディレクトリを作成します
    • 例:sites/pine を作成します
  • sites/sites.phpファイルでドメイン名をディレクトと同期設定を行います
    • 例: 'old-pine.net' => 'pine'  (書き方: ドメイン名 => ディレクトリ名)
       $sites = array(
          'old-pine.net' => 'pine',
       );
      
  • 新規作成したディレクトの下にサイトのインストール設定ファイル(settings.php)の作成
    • 例:sites/pine/settings.phpを作成します
    • settings.phpの内容はsites/pine/default.settings.phpのコピーで良いです(サイト新規作成する場合)
  • 追加したドメイン名でサイトをアクセスして、新規サイトができたことを確認します
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
php
development
bug
syntax highlighter

別々のDrupal(バージョン7)ソースのサイトを一つ共有ソースのところにサイト移行

  • 複数のDrupalソースで構築した複数のウェブサイトがありまして、Drupalソースのバージョンアップ、バグ管理などに手間がかかり、一つのDrupal共有ソールの元で複数のサイトを構築しました。
  • 今回は一つのサイトを共有ソースのところに移行を行いました
  • 移行をシンプルにするため、事前に不必要ないくつかモジュール(SyntaxHighlighter含め)をアンインストールしました
  • 移行後に再度モジュール(SyntaxHighlighter含め)をインストールし直します

モジュール(SyntaxHighlighter)インストール後にSyntaxHighlighterライブラリが見つからないエラー

  • まずSyntaxHighlighterのライブラリ(3.0.83)をダウンロードしてsites/all/libraies/syntaxhighlighter_3.0.83に展開しました
  • 通常の方法でSyntaxHighlighterモジュール(7.x-2.0)をインストールして有効化しました
  • 以前のサイトになっかたエラーメッセージ:
    Warning: file_get_contents(sites/all/libraries/flexslider/scripts/shCore.js): failed to open stream: No such file or directory _locale_parse_js_file() (/virtual/drills/public_html/drupal7/includes/locale.inc ファイル 1527行).
    Warning: file_get_contents(sites/all/libraries/flexslider/scripts/shBrushPhp.js): failed to open stream: No such file or directory _locale_parse_js_file() (/virtual/drills/public_html/drupal7/includes/locale.inc ファイル 1527行)
    
  • shCore.jsがSyntaxHighlighterのライブラリにあるはずなのに、なぜかflexsliderライブラリに関連付けられました(不思議なエラー)

問題:flexsliderのライブラリに同じ名前(shCore.js)のファイルがありました

  • 他に同じようなエラーがあるか、検索してみたが、答えはありませんでした
  • ソースコードを読んで自力で解決するしかないですね。幸い、複雑なモジュールではなく、SyntaxHighlighterのjsファイルをページロード時にクライアント側に渡すプログラムです
  • 最初は sites/all/modules/syntaxhighlighter/syntaxhighlighter.install をチェックしました。44行目にあるライブラリパス取得関数:sntaxhighlighter_get_lib_location()を注目しました
  • 関数(_syntaxhighlighter_get_lib_location())は sites/all/modules/syntaxhighlighter/syntaxhighlighter.module にあります。さらに、ライブラリパス取得ロジックを探してみました
  • syntaxhighlighter.moduleの377行あたりにあるライブラリフォルダスキャン関数:_syntaxhighlighter_scan_lib_location()があります
    • ライブラリフォルダスキャンの原理:shCore.jsが含まれているフォルダを取得します
  • _syntaxhighlighter_scan_lib_location()にwatchdogを入れて、取得したフォルダをログとして出力しました。
  • 結果として、このパス「sites/all/libraries/flexslider/demo/js/shCore.jssites/all/libraries/flexslider/demo/js/shCore.js」を取得しました。
  • flexSlider/demoの下に同じ名前(shCore.js)のファイルがあるため、flexsliderライブラリに関連づけられました。

解決:demoフォルダ(「sites/all/libraries/flexslider/demo」)を消して、再インストールします

  • flexsliderのdemoフォルダが邪魔にになってるため、またライブラリにdemoプログラムを使用しないため、demoフォルダを消しました
  • SyntaxHighlighterモジュールをアンインストールして、再インストールしたら、機能正常に戻りました
drupal
customization
development
module usage

やりたいこと:一つDrupalのソースで複数のサイト(複数のドメイン)を構築したいです

  • Drupalを用いて複数のサイト(ドメイン)を構築する場合、一つサイト(ドメイン)ごとに一つのDrupalソースで構築することがもちろん問題はありません
  • Drupalソースが分散すると、バージョンアップ、バグ管理などの作業が大変になります
  • 当然一つのDrupalソースの元で複数のサイト(ドメイン)の構築が必要となります
    • 一ドメイン ⇒ Drupalソース ⇒ 共有DB
    • 一ドメイン ⇒ Drupalソース ⇒ 独立DB
  • Drupalでは複数のサイト(ドメイン)への対応をしています

sitesディレクトリの下にドメインごとの子ディレクトリを作成してマルティサイトを構築します

  • 複数のドメイン名をDrupalのルートディレクトリに同期します(例:シンボリックリンクでドメイン名をディレクトリと同期します)
    • 例: old-pine.net をDrupalのルートディレクトリにシンボリックリンクで同期します
  • Drupalのルートディレクトリの下に sites ディレクトリがあります。sitesの下に各メイン名に同期したいディレクトリを作成します
    • 例:sites/pine を作成します
  • sites/sites.phpファイルでドメイン名をディレクトと同期設定を行います
    • 例: 'old-pine.net' => 'pine'  (書き方: ドメイン名 => ディレクトリ名)
       $sites = array(
          'old-pine.net' => 'pine',
       );
      
  • 新規作成したディレクトの下にサイトのインストール設定ファイル(settings.php)の作成
    • 例:sites/pine/settings.phpを作成します
    • settings.phpの内容はsites/pine/default.settings.phpのコピーで良いです(サイト新規作成する場合)
  • 追加したドメイン名でサイトをアクセスして、新規サイトができたことを確認します
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
php
development
bug
syntax highlighter

別々のDrupal(バージョン7)ソースのサイトを一つ共有ソースのところにサイト移行

  • 複数のDrupalソースで構築した複数のウェブサイトがありまして、Drupalソースのバージョンアップ、バグ管理などに手間がかかり、一つのDrupal共有ソールの元で複数のサイトを構築しました。
  • 今回は一つのサイトを共有ソースのところに移行を行いました
  • 移行をシンプルにするため、事前に不必要ないくつかモジュール(SyntaxHighlighter含め)をアンインストールしました
  • 移行後に再度モジュール(SyntaxHighlighter含め)をインストールし直します

モジュール(SyntaxHighlighter)インストール後にSyntaxHighlighterライブラリが見つからないエラー

  • まずSyntaxHighlighterのライブラリ(3.0.83)をダウンロードしてsites/all/libraies/syntaxhighlighter_3.0.83に展開しました
  • 通常の方法でSyntaxHighlighterモジュール(7.x-2.0)をインストールして有効化しました
  • 以前のサイトになっかたエラーメッセージ:
    Warning: file_get_contents(sites/all/libraries/flexslider/scripts/shCore.js): failed to open stream: No such file or directory _locale_parse_js_file() (/virtual/drills/public_html/drupal7/includes/locale.inc ファイル 1527行).
    Warning: file_get_contents(sites/all/libraries/flexslider/scripts/shBrushPhp.js): failed to open stream: No such file or directory _locale_parse_js_file() (/virtual/drills/public_html/drupal7/includes/locale.inc ファイル 1527行)
    
  • shCore.jsがSyntaxHighlighterのライブラリにあるはずなのに、なぜかflexsliderライブラリに関連付けられました(不思議なエラー)

問題:flexsliderのライブラリに同じ名前(shCore.js)のファイルがありました

  • 他に同じようなエラーがあるか、検索してみたが、答えはありませんでした
  • ソースコードを読んで自力で解決するしかないですね。幸い、複雑なモジュールではなく、SyntaxHighlighterのjsファイルをページロード時にクライアント側に渡すプログラムです
  • 最初は sites/all/modules/syntaxhighlighter/syntaxhighlighter.install をチェックしました。44行目にあるライブラリパス取得関数:sntaxhighlighter_get_lib_location()を注目しました
  • 関数(_syntaxhighlighter_get_lib_location())は sites/all/modules/syntaxhighlighter/syntaxhighlighter.module にあります。さらに、ライブラリパス取得ロジックを探してみました
  • syntaxhighlighter.moduleの377行あたりにあるライブラリフォルダスキャン関数:_syntaxhighlighter_scan_lib_location()があります
    • ライブラリフォルダスキャンの原理:shCore.jsが含まれているフォルダを取得します
  • _syntaxhighlighter_scan_lib_location()にwatchdogを入れて、取得したフォルダをログとして出力しました。
  • 結果として、このパス「sites/all/libraries/flexslider/demo/js/shCore.jssites/all/libraries/flexslider/demo/js/shCore.js」を取得しました。
  • flexSlider/demoの下に同じ名前(shCore.js)のファイルがあるため、flexsliderライブラリに関連づけられました。

解決:demoフォルダ(「sites/all/libraries/flexslider/demo」)を消して、再インストールします

  • flexsliderのdemoフォルダが邪魔にになってるため、またライブラリにdemoプログラムを使用しないため、demoフォルダを消しました
  • SyntaxHighlighterモジュールをアンインストールして、再インストールしたら、機能正常に戻りました
drupal
customization
development
module usage

やりたいこと:一つDrupalのソースで複数のサイト(複数のドメイン)を構築したいです

  • Drupalを用いて複数のサイト(ドメイン)を構築する場合、一つサイト(ドメイン)ごとに一つのDrupalソースで構築することがもちろん問題はありません
  • Drupalソースが分散すると、バージョンアップ、バグ管理などの作業が大変になります
  • 当然一つのDrupalソースの元で複数のサイト(ドメイン)の構築が必要となります
    • 一ドメイン ⇒ Drupalソース ⇒ 共有DB
    • 一ドメイン ⇒ Drupalソース ⇒ 独立DB
  • Drupalでは複数のサイト(ドメイン)への対応をしています

sitesディレクトリの下にドメインごとの子ディレクトリを作成してマルティサイトを構築します

  • 複数のドメイン名をDrupalのルートディレクトリに同期します(例:シンボリックリンクでドメイン名をディレクトリと同期します)
    • 例: old-pine.net をDrupalのルートディレクトリにシンボリックリンクで同期します
  • Drupalのルートディレクトリの下に sites ディレクトリがあります。sitesの下に各メイン名に同期したいディレクトリを作成します
    • 例:sites/pine を作成します
  • sites/sites.phpファイルでドメイン名をディレクトと同期設定を行います
    • 例: 'old-pine.net' => 'pine'  (書き方: ドメイン名 => ディレクトリ名)
       $sites = array(
          'old-pine.net' => 'pine',
       );
      
  • 新規作成したディレクトの下にサイトのインストール設定ファイル(settings.php)の作成
    • 例:sites/pine/settings.phpを作成します
    • settings.phpの内容はsites/pine/default.settings.phpのコピーで良いです(サイト新規作成する場合)
  • 追加したドメイン名でサイトをアクセスして、新規サイトができたことを確認します
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
php
development
bug
syntax highlighter

別々のDrupal(バージョン7)ソースのサイトを一つ共有ソースのところにサイト移行

  • 複数のDrupalソースで構築した複数のウェブサイトがありまして、Drupalソースのバージョンアップ、バグ管理などに手間がかかり、一つのDrupal共有ソールの元で複数のサイトを構築しました。
  • 今回は一つのサイトを共有ソースのところに移行を行いました
  • 移行をシンプルにするため、事前に不必要ないくつかモジュール(SyntaxHighlighter含め)をアンインストールしました
  • 移行後に再度モジュール(SyntaxHighlighter含め)をインストールし直します

モジュール(SyntaxHighlighter)インストール後にSyntaxHighlighterライブラリが見つからないエラー

  • まずSyntaxHighlighterのライブラリ(3.0.83)をダウンロードしてsites/all/libraies/syntaxhighlighter_3.0.83に展開しました
  • 通常の方法でSyntaxHighlighterモジュール(7.x-2.0)をインストールして有効化しました
  • 以前のサイトになっかたエラーメッセージ:
    Warning: file_get_contents(sites/all/libraries/flexslider/scripts/shCore.js): failed to open stream: No such file or directory _locale_parse_js_file() (/virtual/drills/public_html/drupal7/includes/locale.inc ファイル 1527行).
    Warning: file_get_contents(sites/all/libraries/flexslider/scripts/shBrushPhp.js): failed to open stream: No such file or directory _locale_parse_js_file() (/virtual/drills/public_html/drupal7/includes/locale.inc ファイル 1527行)
    
  • shCore.jsがSyntaxHighlighterのライブラリにあるはずなのに、なぜかflexsliderライブラリに関連付けられました(不思議なエラー)

問題:flexsliderのライブラリに同じ名前(shCore.js)のファイルがありました

  • 他に同じようなエラーがあるか、検索してみたが、答えはありませんでした
  • ソースコードを読んで自力で解決するしかないですね。幸い、複雑なモジュールではなく、SyntaxHighlighterのjsファイルをページロード時にクライアント側に渡すプログラムです
  • 最初は sites/all/modules/syntaxhighlighter/syntaxhighlighter.install をチェックしました。44行目にあるライブラリパス取得関数:sntaxhighlighter_get_lib_location()を注目しました
  • 関数(_syntaxhighlighter_get_lib_location())は sites/all/modules/syntaxhighlighter/syntaxhighlighter.module にあります。さらに、ライブラリパス取得ロジックを探してみました
  • syntaxhighlighter.moduleの377行あたりにあるライブラリフォルダスキャン関数:_syntaxhighlighter_scan_lib_location()があります
    • ライブラリフォルダスキャンの原理:shCore.jsが含まれているフォルダを取得します
  • _syntaxhighlighter_scan_lib_location()にwatchdogを入れて、取得したフォルダをログとして出力しました。
  • 結果として、このパス「sites/all/libraries/flexslider/demo/js/shCore.jssites/all/libraries/flexslider/demo/js/shCore.js」を取得しました。
  • flexSlider/demoの下に同じ名前(shCore.js)のファイルがあるため、flexsliderライブラリに関連づけられました。

解決:demoフォルダ(「sites/all/libraries/flexslider/demo」)を消して、再インストールします

  • flexsliderのdemoフォルダが邪魔にになってるため、またライブラリにdemoプログラムを使用しないため、demoフォルダを消しました
  • SyntaxHighlighterモジュールをアンインストールして、再インストールしたら、機能正常に戻りました
drupal
customization
development
module usage

やりたいこと:一つDrupalのソースで複数のサイト(複数のドメイン)を構築したいです

  • Drupalを用いて複数のサイト(ドメイン)を構築する場合、一つサイト(ドメイン)ごとに一つのDrupalソースで構築することがもちろん問題はありません
  • Drupalソースが分散すると、バージョンアップ、バグ管理などの作業が大変になります
  • 当然一つのDrupalソースの元で複数のサイト(ドメイン)の構築が必要となります
    • 一ドメイン ⇒ Drupalソース ⇒ 共有DB
    • 一ドメイン ⇒ Drupalソース ⇒ 独立DB
  • Drupalでは複数のサイト(ドメイン)への対応をしています

sitesディレクトリの下にドメインごとの子ディレクトリを作成してマルティサイトを構築します

  • 複数のドメイン名をDrupalのルートディレクトリに同期します(例:シンボリックリンクでドメイン名をディレクトリと同期します)
    • 例: old-pine.net をDrupalのルートディレクトリにシンボリックリンクで同期します
  • Drupalのルートディレクトリの下に sites ディレクトリがあります。sitesの下に各メイン名に同期したいディレクトリを作成します
    • 例:sites/pine を作成します
  • sites/sites.phpファイルでドメイン名をディレクトと同期設定を行います
    • 例: 'old-pine.net' => 'pine'  (書き方: ドメイン名 => ディレクトリ名)
       $sites = array(
          'old-pine.net' => 'pine',
       );
      
  • 新規作成したディレクトの下にサイトのインストール設定ファイル(settings.php)の作成
    • 例:sites/pine/settings.phpを作成します
    • settings.phpの内容はsites/pine/default.settings.phpのコピーで良いです(サイト新規作成する場合)
  • 追加したドメイン名でサイトをアクセスして、新規サイトができたことを確認します
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
php
development
bug
syntax highlighter

別々のDrupal(バージョン7)ソースのサイトを一つ共有ソースのところにサイト移行

  • 複数のDrupalソースで構築した複数のウェブサイトがありまして、Drupalソースのバージョンアップ、バグ管理などに手間がかかり、一つのDrupal共有ソールの元で複数のサイトを構築しました。
  • 今回は一つのサイトを共有ソースのところに移行を行いました
  • 移行をシンプルにするため、事前に不必要ないくつかモジュール(SyntaxHighlighter含め)をアンインストールしました
  • 移行後に再度モジュール(SyntaxHighlighter含め)をインストールし直します

モジュール(SyntaxHighlighter)インストール後にSyntaxHighlighterライブラリが見つからないエラー

  • まずSyntaxHighlighterのライブラリ(3.0.83)をダウンロードしてsites/all/libraies/syntaxhighlighter_3.0.83に展開しました
  • 通常の方法でSyntaxHighlighterモジュール(7.x-2.0)をインストールして有効化しました
  • 以前のサイトになっかたエラーメッセージ:
    Warning: file_get_contents(sites/all/libraries/flexslider/scripts/shCore.js): failed to open stream: No such file or directory _locale_parse_js_file() (/virtual/drills/public_html/drupal7/includes/locale.inc ファイル 1527行).
    Warning: file_get_contents(sites/all/libraries/flexslider/scripts/shBrushPhp.js): failed to open stream: No such file or directory _locale_parse_js_file() (/virtual/drills/public_html/drupal7/includes/locale.inc ファイル 1527行)
    
  • shCore.jsがSyntaxHighlighterのライブラリにあるはずなのに、なぜかflexsliderライブラリに関連付けられました(不思議なエラー)

問題:flexsliderのライブラリに同じ名前(shCore.js)のファイルがありました

  • 他に同じようなエラーがあるか、検索してみたが、答えはありませんでした
  • ソースコードを読んで自力で解決するしかないですね。幸い、複雑なモジュールではなく、SyntaxHighlighterのjsファイルをページロード時にクライアント側に渡すプログラムです
  • 最初は sites/all/modules/syntaxhighlighter/syntaxhighlighter.install をチェックしました。44行目にあるライブラリパス取得関数:sntaxhighlighter_get_lib_location()を注目しました
  • 関数(_syntaxhighlighter_get_lib_location())は sites/all/modules/syntaxhighlighter/syntaxhighlighter.module にあります。さらに、ライブラリパス取得ロジックを探してみました
  • syntaxhighlighter.moduleの377行あたりにあるライブラリフォルダスキャン関数:_syntaxhighlighter_scan_lib_location()があります
    • ライブラリフォルダスキャンの原理:shCore.jsが含まれているフォルダを取得します
  • _syntaxhighlighter_scan_lib_location()にwatchdogを入れて、取得したフォルダをログとして出力しました。
  • 結果として、このパス「sites/all/libraries/flexslider/demo/js/shCore.jssites/all/libraries/flexslider/demo/js/shCore.js」を取得しました。
  • flexSlider/demoの下に同じ名前(shCore.js)のファイルがあるため、flexsliderライブラリに関連づけられました。

解決:demoフォルダ(「sites/all/libraries/flexslider/demo」)を消して、再インストールします

  • flexsliderのdemoフォルダが邪魔にになってるため、またライブラリにdemoプログラムを使用しないため、demoフォルダを消しました
  • SyntaxHighlighterモジュールをアンインストールして、再インストールしたら、機能正常に戻りました
drupal
customization
development
module usage

やりたいこと:一つDrupalのソースで複数のサイト(複数のドメイン)を構築したいです

  • Drupalを用いて複数のサイト(ドメイン)を構築する場合、一つサイト(ドメイン)ごとに一つのDrupalソースで構築することがもちろん問題はありません
  • Drupalソースが分散すると、バージョンアップ、バグ管理などの作業が大変になります
  • 当然一つのDrupalソースの元で複数のサイト(ドメイン)の構築が必要となります
    • 一ドメイン ⇒ Drupalソース ⇒ 共有DB
    • 一ドメイン ⇒ Drupalソース ⇒ 独立DB
  • Drupalでは複数のサイト(ドメイン)への対応をしています

sitesディレクトリの下にドメインごとの子ディレクトリを作成してマルティサイトを構築します

  • 複数のドメイン名をDrupalのルートディレクトリに同期します(例:シンボリックリンクでドメイン名をディレクトリと同期します)
    • 例: old-pine.net をDrupalのルートディレクトリにシンボリックリンクで同期します
  • Drupalのルートディレクトリの下に sites ディレクトリがあります。sitesの下に各メイン名に同期したいディレクトリを作成します
    • 例:sites/pine を作成します
  • sites/sites.phpファイルでドメイン名をディレクトと同期設定を行います
    • 例: 'old-pine.net' => 'pine'  (書き方: ドメイン名 => ディレクトリ名)
       $sites = array(
          'old-pine.net' => 'pine',
       );
      
  • 新規作成したディレクトの下にサイトのインストール設定ファイル(settings.php)の作成
    • 例:sites/pine/settings.phpを作成します
    • settings.phpの内容はsites/pine/default.settings.phpのコピーで良いです(サイト新規作成する場合)
  • 追加したドメイン名でサイトをアクセスして、新規サイトができたことを確認します
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
php
development
bug
syntax highlighter

別々のDrupal(バージョン7)ソースのサイトを一つ共有ソースのところにサイト移行

  • 複数のDrupalソースで構築した複数のウェブサイトがありまして、Drupalソースのバージョンアップ、バグ管理などに手間がかかり、一つのDrupal共有ソールの元で複数のサイトを構築しました。
  • 今回は一つのサイトを共有ソースのところに移行を行いました
  • 移行をシンプルにするため、事前に不必要ないくつかモジュール(SyntaxHighlighter含め)をアンインストールしました
  • 移行後に再度モジュール(SyntaxHighlighter含め)をインストールし直します

モジュール(SyntaxHighlighter)インストール後にSyntaxHighlighterライブラリが見つからないエラー

  • まずSyntaxHighlighterのライブラリ(3.0.83)をダウンロードしてsites/all/libraies/syntaxhighlighter_3.0.83に展開しました
  • 通常の方法でSyntaxHighlighterモジュール(7.x-2.0)をインストールして有効化しました
  • 以前のサイトになっかたエラーメッセージ:
    Warning: file_get_contents(sites/all/libraries/flexslider/scripts/shCore.js): failed to open stream: No such file or directory _locale_parse_js_file() (/virtual/drills/public_html/drupal7/includes/locale.inc ファイル 1527行).
    Warning: file_get_contents(sites/all/libraries/flexslider/scripts/shBrushPhp.js): failed to open stream: No such file or directory _locale_parse_js_file() (/virtual/drills/public_html/drupal7/includes/locale.inc ファイル 1527行)
    
  • shCore.jsがSyntaxHighlighterのライブラリにあるはずなのに、なぜかflexsliderライブラリに関連付けられました(不思議なエラー)

問題:flexsliderのライブラリに同じ名前(shCore.js)のファイルがありました

  • 他に同じようなエラーがあるか、検索してみたが、答えはありませんでした
  • ソースコードを読んで自力で解決するしかないですね。幸い、複雑なモジュールではなく、SyntaxHighlighterのjsファイルをページロード時にクライアント側に渡すプログラムです
  • 最初は sites/all/modules/syntaxhighlighter/syntaxhighlighter.install をチェックしました。44行目にあるライブラリパス取得関数:sntaxhighlighter_get_lib_location()を注目しました
  • 関数(_syntaxhighlighter_get_lib_location())は sites/all/modules/syntaxhighlighter/syntaxhighlighter.module にあります。さらに、ライブラリパス取得ロジックを探してみました
  • syntaxhighlighter.moduleの377行あたりにあるライブラリフォルダスキャン関数:_syntaxhighlighter_scan_lib_location()があります
    • ライブラリフォルダスキャンの原理:shCore.jsが含まれているフォルダを取得します
  • _syntaxhighlighter_scan_lib_location()にwatchdogを入れて、取得したフォルダをログとして出力しました。
  • 結果として、このパス「sites/all/libraries/flexslider/demo/js/shCore.jssites/all/libraries/flexslider/demo/js/shCore.js」を取得しました。
  • flexSlider/demoの下に同じ名前(shCore.js)のファイルがあるため、flexsliderライブラリに関連づけられました。

解決:demoフォルダ(「sites/all/libraries/flexslider/demo」)を消して、再インストールします

  • flexsliderのdemoフォルダが邪魔にになってるため、またライブラリにdemoプログラムを使用しないため、demoフォルダを消しました
  • SyntaxHighlighterモジュールをアンインストールして、再インストールしたら、機能正常に戻りました
drupal
customization
development
module usage

やりたいこと:一つDrupalのソースで複数のサイト(複数のドメイン)を構築したいです

  • Drupalを用いて複数のサイト(ドメイン)を構築する場合、一つサイト(ドメイン)ごとに一つのDrupalソースで構築することがもちろん問題はありません
  • Drupalソースが分散すると、バージョンアップ、バグ管理などの作業が大変になります
  • 当然一つのDrupalソースの元で複数のサイト(ドメイン)の構築が必要となります
    • 一ドメイン ⇒ Drupalソース ⇒ 共有DB
    • 一ドメイン ⇒ Drupalソース ⇒ 独立DB
  • Drupalでは複数のサイト(ドメイン)への対応をしています

sitesディレクトリの下にドメインごとの子ディレクトリを作成してマルティサイトを構築します

  • 複数のドメイン名をDrupalのルートディレクトリに同期します(例:シンボリックリンクでドメイン名をディレクトリと同期します)
    • 例: old-pine.net をDrupalのルートディレクトリにシンボリックリンクで同期します
  • Drupalのルートディレクトリの下に sites ディレクトリがあります。sitesの下に各メイン名に同期したいディレクトリを作成します
    • 例:sites/pine を作成します
  • sites/sites.phpファイルでドメイン名をディレクトと同期設定を行います
    • 例: 'old-pine.net' => 'pine'  (書き方: ドメイン名 => ディレクトリ名)
       $sites = array(
          'old-pine.net' => 'pine',
       );
      
  • 新規作成したディレクトの下にサイトのインストール設定ファイル(settings.php)の作成
    • 例:sites/pine/settings.phpを作成します
    • settings.phpの内容はsites/pine/default.settings.phpのコピーで良いです(サイト新規作成する場合)
  • 追加したドメイン名でサイトをアクセスして、新規サイトができたことを確認します
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
php
development
bug
syntax highlighter

別々のDrupal(バージョン7)ソースのサイトを一つ共有ソースのところにサイト移行

  • 複数のDrupalソースで構築した複数のウェブサイトがありまして、Drupalソースのバージョンアップ、バグ管理などに手間がかかり、一つのDrupal共有ソールの元で複数のサイトを構築しました。
  • 今回は一つのサイトを共有ソースのところに移行を行いました
  • 移行をシンプルにするため、事前に不必要ないくつかモジュール(SyntaxHighlighter含め)をアンインストールしました
  • 移行後に再度モジュール(SyntaxHighlighter含め)をインストールし直します

モジュール(SyntaxHighlighter)インストール後にSyntaxHighlighterライブラリが見つからないエラー

  • まずSyntaxHighlighterのライブラリ(3.0.83)をダウンロードしてsites/all/libraies/syntaxhighlighter_3.0.83に展開しました
  • 通常の方法でSyntaxHighlighterモジュール(7.x-2.0)をインストールして有効化しました
  • 以前のサイトになっかたエラーメッセージ:
    Warning: file_get_contents(sites/all/libraries/flexslider/scripts/shCore.js): failed to open stream: No such file or directory _locale_parse_js_file() (/virtual/drills/public_html/drupal7/includes/locale.inc ファイル 1527行).
    Warning: file_get_contents(sites/all/libraries/flexslider/scripts/shBrushPhp.js): failed to open stream: No such file or directory _locale_parse_js_file() (/virtual/drills/public_html/drupal7/includes/locale.inc ファイル 1527行)
    
  • shCore.jsがSyntaxHighlighterのライブラリにあるはずなのに、なぜかflexsliderライブラリに関連付けられました(不思議なエラー)

問題:flexsliderのライブラリに同じ名前(shCore.js)のファイルがありました

  • 他に同じようなエラーがあるか、検索してみたが、答えはありませんでした
  • ソースコードを読んで自力で解決するしかないですね。幸い、複雑なモジュールではなく、SyntaxHighlighterのjsファイルをページロード時にクライアント側に渡すプログラムです
  • 最初は sites/all/modules/syntaxhighlighter/syntaxhighlighter.install をチェックしました。44行目にあるライブラリパス取得関数:sntaxhighlighter_get_lib_location()を注目しました
  • 関数(_syntaxhighlighter_get_lib_location())は sites/all/modules/syntaxhighlighter/syntaxhighlighter.module にあります。さらに、ライブラリパス取得ロジックを探してみました
  • syntaxhighlighter.moduleの377行あたりにあるライブラリフォルダスキャン関数:_syntaxhighlighter_scan_lib_location()があります
    • ライブラリフォルダスキャンの原理:shCore.jsが含まれているフォルダを取得します
  • _syntaxhighlighter_scan_lib_location()にwatchdogを入れて、取得したフォルダをログとして出力しました。
  • 結果として、このパス「sites/all/libraries/flexslider/demo/js/shCore.jssites/all/libraries/flexslider/demo/js/shCore.js」を取得しました。
  • flexSlider/demoの下に同じ名前(shCore.js)のファイルがあるため、flexsliderライブラリに関連づけられました。

解決:demoフォルダ(「sites/all/libraries/flexslider/demo」)を消して、再インストールします

  • flexsliderのdemoフォルダが邪魔にになってるため、またライブラリにdemoプログラムを使用しないため、demoフォルダを消しました
  • SyntaxHighlighterモジュールをアンインストールして、再インストールしたら、機能正常に戻りました
drupal
customization
development
module usage

やりたいこと:一つDrupalのソースで複数のサイト(複数のドメイン)を構築したいです

  • Drupalを用いて複数のサイト(ドメイン)を構築する場合、一つサイト(ドメイン)ごとに一つのDrupalソースで構築することがもちろん問題はありません
  • Drupalソースが分散すると、バージョンアップ、バグ管理などの作業が大変になります
  • 当然一つのDrupalソースの元で複数のサイト(ドメイン)の構築が必要となります
    • 一ドメイン ⇒ Drupalソース ⇒ 共有DB
    • 一ドメイン ⇒ Drupalソース ⇒ 独立DB
  • Drupalでは複数のサイト(ドメイン)への対応をしています

sitesディレクトリの下にドメインごとの子ディレクトリを作成してマルティサイトを構築します

  • 複数のドメイン名をDrupalのルートディレクトリに同期します(例:シンボリックリンクでドメイン名をディレクトリと同期します)
    • 例: old-pine.net をDrupalのルートディレクトリにシンボリックリンクで同期します
  • Drupalのルートディレクトリの下に sites ディレクトリがあります。sitesの下に各メイン名に同期したいディレクトリを作成します
    • 例:sites/pine を作成します
  • sites/sites.phpファイルでドメイン名をディレクトと同期設定を行います
    • 例: 'old-pine.net' => 'pine'  (書き方: ドメイン名 => ディレクトリ名)
       $sites = array(
          'old-pine.net' => 'pine',
       );
      
  • 新規作成したディレクトの下にサイトのインストール設定ファイル(settings.php)の作成
    • 例:sites/pine/settings.phpを作成します
    • settings.phpの内容はsites/pine/default.settings.phpのコピーで良いです(サイト新規作成する場合)
  • 追加したドメイン名でサイトをアクセスして、新規サイトができたことを確認します
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
php
development
bug
syntax highlighter

別々のDrupal(バージョン7)ソースのサイトを一つ共有ソースのところにサイト移行

  • 複数のDrupalソースで構築した複数のウェブサイトがありまして、Drupalソースのバージョンアップ、バグ管理などに手間がかかり、一つのDrupal共有ソールの元で複数のサイトを構築しました。
  • 今回は一つのサイトを共有ソースのところに移行を行いました
  • 移行をシンプルにするため、事前に不必要ないくつかモジュール(SyntaxHighlighter含め)をアンインストールしました
  • 移行後に再度モジュール(SyntaxHighlighter含め)をインストールし直します

モジュール(SyntaxHighlighter)インストール後にSyntaxHighlighterライブラリが見つからないエラー

  • まずSyntaxHighlighterのライブラリ(3.0.83)をダウンロードしてsites/all/libraies/syntaxhighlighter_3.0.83に展開しました
  • 通常の方法でSyntaxHighlighterモジュール(7.x-2.0)をインストールして有効化しました
  • 以前のサイトになっかたエラーメッセージ:
    Warning: file_get_contents(sites/all/libraries/flexslider/scripts/shCore.js): failed to open stream: No such file or directory _locale_parse_js_file() (/virtual/drills/public_html/drupal7/includes/locale.inc ファイル 1527行).
    Warning: file_get_contents(sites/all/libraries/flexslider/scripts/shBrushPhp.js): failed to open stream: No such file or directory _locale_parse_js_file() (/virtual/drills/public_html/drupal7/includes/locale.inc ファイル 1527行)
    
  • shCore.jsがSyntaxHighlighterのライブラリにあるはずなのに、なぜかflexsliderライブラリに関連付けられました(不思議なエラー)

問題:flexsliderのライブラリに同じ名前(shCore.js)のファイルがありました

  • 他に同じようなエラーがあるか、検索してみたが、答えはありませんでした
  • ソースコードを読んで自力で解決するしかないですね。幸い、複雑なモジュールではなく、SyntaxHighlighterのjsファイルをページロード時にクライアント側に渡すプログラムです
  • 最初は sites/all/modules/syntaxhighlighter/syntaxhighlighter.install をチェックしました。44行目にあるライブラリパス取得関数:sntaxhighlighter_get_lib_location()を注目しました
  • 関数(_syntaxhighlighter_get_lib_location())は sites/all/modules/syntaxhighlighter/syntaxhighlighter.module にあります。さらに、ライブラリパス取得ロジックを探してみました
  • syntaxhighlighter.moduleの377行あたりにあるライブラリフォルダスキャン関数:_syntaxhighlighter_scan_lib_location()があります
    • ライブラリフォルダスキャンの原理:shCore.jsが含まれているフォルダを取得します
  • _syntaxhighlighter_scan_lib_location()にwatchdogを入れて、取得したフォルダをログとして出力しました。
  • 結果として、このパス「sites/all/libraries/flexslider/demo/js/shCore.jssites/all/libraries/flexslider/demo/js/shCore.js」を取得しました。
  • flexSlider/demoの下に同じ名前(shCore.js)のファイルがあるため、flexsliderライブラリに関連づけられました。

解決:demoフォルダ(「sites/all/libraries/flexslider/demo」)を消して、再インストールします

  • flexsliderのdemoフォルダが邪魔にになってるため、またライブラリにdemoプログラムを使用しないため、demoフォルダを消しました
  • SyntaxHighlighterモジュールをアンインストールして、再インストールしたら、機能正常に戻りました
drupal
customization
development
module usage

やりたいこと:一つDrupalのソースで複数のサイト(複数のドメイン)を構築したいです

  • Drupalを用いて複数のサイト(ドメイン)を構築する場合、一つサイト(ドメイン)ごとに一つのDrupalソースで構築することがもちろん問題はありません
  • Drupalソースが分散すると、バージョンアップ、バグ管理などの作業が大変になります
  • 当然一つのDrupalソースの元で複数のサイト(ドメイン)の構築が必要となります
    • 一ドメイン ⇒ Drupalソース ⇒ 共有DB
    • 一ドメイン ⇒ Drupalソース ⇒ 独立DB
  • Drupalでは複数のサイト(ドメイン)への対応をしています

sitesディレクトリの下にドメインごとの子ディレクトリを作成してマルティサイトを構築します

  • 複数のドメイン名をDrupalのルートディレクトリに同期します(例:シンボリックリンクでドメイン名をディレクトリと同期します)
    • 例: old-pine.net をDrupalのルートディレクトリにシンボリックリンクで同期します
  • Drupalのルートディレクトリの下に sites ディレクトリがあります。sitesの下に各メイン名に同期したいディレクトリを作成します
    • 例:sites/pine を作成します
  • sites/sites.phpファイルでドメイン名をディレクトと同期設定を行います
    • 例: 'old-pine.net' => 'pine'  (書き方: ドメイン名 => ディレクトリ名)
       $sites = array(
          'old-pine.net' => 'pine',
       );
      
  • 新規作成したディレクトの下にサイトのインストール設定ファイル(settings.php)の作成
    • 例:sites/pine/settings.phpを作成します
    • settings.phpの内容はsites/pine/default.settings.phpのコピーで良いです(サイト新規作成する場合)
  • 追加したドメイン名でサイトをアクセスして、新規サイトができたことを確認します
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
php
development
bug
syntax highlighter

別々のDrupal(バージョン7)ソースのサイトを一つ共有ソースのところにサイト移行

  • 複数のDrupalソースで構築した複数のウェブサイトがありまして、Drupalソースのバージョンアップ、バグ管理などに手間がかかり、一つのDrupal共有ソールの元で複数のサイトを構築しました。
  • 今回は一つのサイトを共有ソースのところに移行を行いました
  • 移行をシンプルにするため、事前に不必要ないくつかモジュール(SyntaxHighlighter含め)をアンインストールしました
  • 移行後に再度モジュール(SyntaxHighlighter含め)をインストールし直します

モジュール(SyntaxHighlighter)インストール後にSyntaxHighlighterライブラリが見つからないエラー

  • まずSyntaxHighlighterのライブラリ(3.0.83)をダウンロードしてsites/all/libraies/syntaxhighlighter_3.0.83に展開しました
  • 通常の方法でSyntaxHighlighterモジュール(7.x-2.0)をインストールして有効化しました
  • 以前のサイトになっかたエラーメッセージ:
    Warning: file_get_contents(sites/all/libraries/flexslider/scripts/shCore.js): failed to open stream: No such file or directory _locale_parse_js_file() (/virtual/drills/public_html/drupal7/includes/locale.inc ファイル 1527行).
    Warning: file_get_contents(sites/all/libraries/flexslider/scripts/shBrushPhp.js): failed to open stream: No such file or directory _locale_parse_js_file() (/virtual/drills/public_html/drupal7/includes/locale.inc ファイル 1527行)
    
  • shCore.jsがSyntaxHighlighterのライブラリにあるはずなのに、なぜかflexsliderライブラリに関連付けられました(不思議なエラー)

問題:flexsliderのライブラリに同じ名前(shCore.js)のファイルがありました

  • 他に同じようなエラーがあるか、検索してみたが、答えはありませんでした
  • ソースコードを読んで自力で解決するしかないですね。幸い、複雑なモジュールではなく、SyntaxHighlighterのjsファイルをページロード時にクライアント側に渡すプログラムです
  • 最初は sites/all/modules/syntaxhighlighter/syntaxhighlighter.install をチェックしました。44行目にあるライブラリパス取得関数:sntaxhighlighter_get_lib_location()を注目しました
  • 関数(_syntaxhighlighter_get_lib_location())は sites/all/modules/syntaxhighlighter/syntaxhighlighter.module にあります。さらに、ライブラリパス取得ロジックを探してみました
  • syntaxhighlighter.moduleの377行あたりにあるライブラリフォルダスキャン関数:_syntaxhighlighter_scan_lib_location()があります
    • ライブラリフォルダスキャンの原理:shCore.jsが含まれているフォルダを取得します
  • _syntaxhighlighter_scan_lib_location()にwatchdogを入れて、取得したフォルダをログとして出力しました。
  • 結果として、このパス「sites/all/libraries/flexslider/demo/js/shCore.jssites/all/libraries/flexslider/demo/js/shCore.js」を取得しました。
  • flexSlider/demoの下に同じ名前(shCore.js)のファイルがあるため、flexsliderライブラリに関連づけられました。

解決:demoフォルダ(「sites/all/libraries/flexslider/demo」)を消して、再インストールします

  • flexsliderのdemoフォルダが邪魔にになってるため、またライブラリにdemoプログラムを使用しないため、demoフォルダを消しました
  • SyntaxHighlighterモジュールをアンインストールして、再インストールしたら、機能正常に戻りました
drupal
customization
development
module usage

やりたいこと:一つDrupalのソースで複数のサイト(複数のドメイン)を構築したいです

  • Drupalを用いて複数のサイト(ドメイン)を構築する場合、一つサイト(ドメイン)ごとに一つのDrupalソースで構築することがもちろん問題はありません
  • Drupalソースが分散すると、バージョンアップ、バグ管理などの作業が大変になります
  • 当然一つのDrupalソースの元で複数のサイト(ドメイン)の構築が必要となります
    • 一ドメイン ⇒ Drupalソース ⇒ 共有DB
    • 一ドメイン ⇒ Drupalソース ⇒ 独立DB
  • Drupalでは複数のサイト(ドメイン)への対応をしています

sitesディレクトリの下にドメインごとの子ディレクトリを作成してマルティサイトを構築します

  • 複数のドメイン名をDrupalのルートディレクトリに同期します(例:シンボリックリンクでドメイン名をディレクトリと同期します)
    • 例: old-pine.net をDrupalのルートディレクトリにシンボリックリンクで同期します
  • Drupalのルートディレクトリの下に sites ディレクトリがあります。sitesの下に各メイン名に同期したいディレクトリを作成します
    • 例:sites/pine を作成します
  • sites/sites.phpファイルでドメイン名をディレクトと同期設定を行います
    • 例: 'old-pine.net' => 'pine'  (書き方: ドメイン名 => ディレクトリ名)
       $sites = array(
          'old-pine.net' => 'pine',
       );
      
  • 新規作成したディレクトの下にサイトのインストール設定ファイル(settings.php)の作成
    • 例:sites/pine/settings.phpを作成します
    • settings.phpの内容はsites/pine/default.settings.phpのコピーで良いです(サイト新規作成する場合)
  • 追加したドメイン名でサイトをアクセスして、新規サイトができたことを確認します
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
php
development
bug
syntax highlighter

別々のDrupal(バージョン7)ソースのサイトを一つ共有ソースのところにサイト移行

  • 複数のDrupalソースで構築した複数のウェブサイトがありまして、Drupalソースのバージョンアップ、バグ管理などに手間がかかり、一つのDrupal共有ソールの元で複数のサイトを構築しました。
  • 今回は一つのサイトを共有ソースのところに移行を行いました
  • 移行をシンプルにするため、事前に不必要ないくつかモジュール(SyntaxHighlighter含め)をアンインストールしました
  • 移行後に再度モジュール(SyntaxHighlighter含め)をインストールし直します

モジュール(SyntaxHighlighter)インストール後にSyntaxHighlighterライブラリが見つからないエラー

  • まずSyntaxHighlighterのライブラリ(3.0.83)をダウンロードしてsites/all/libraies/syntaxhighlighter_3.0.83に展開しました
  • 通常の方法でSyntaxHighlighterモジュール(7.x-2.0)をインストールして有効化しました
  • 以前のサイトになっかたエラーメッセージ:
    Warning: file_get_contents(sites/all/libraries/flexslider/scripts/shCore.js): failed to open stream: No such file or directory _locale_parse_js_file() (/virtual/drills/public_html/drupal7/includes/locale.inc ファイル 1527行).
    Warning: file_get_contents(sites/all/libraries/flexslider/scripts/shBrushPhp.js): failed to open stream: No such file or directory _locale_parse_js_file() (/virtual/drills/public_html/drupal7/includes/locale.inc ファイル 1527行)
    
  • shCore.jsがSyntaxHighlighterのライブラリにあるはずなのに、なぜかflexsliderライブラリに関連付けられました(不思議なエラー)

問題:flexsliderのライブラリに同じ名前(shCore.js)のファイルがありました

  • 他に同じようなエラーがあるか、検索してみたが、答えはありませんでした
  • ソースコードを読んで自力で解決するしかないですね。幸い、複雑なモジュールではなく、SyntaxHighlighterのjsファイルをページロード時にクライアント側に渡すプログラムです
  • 最初は sites/all/modules/syntaxhighlighter/syntaxhighlighter.install をチェックしました。44行目にあるライブラリパス取得関数:sntaxhighlighter_get_lib_location()を注目しました
  • 関数(_syntaxhighlighter_get_lib_location())は sites/all/modules/syntaxhighlighter/syntaxhighlighter.module にあります。さらに、ライブラリパス取得ロジックを探してみました
  • syntaxhighlighter.moduleの377行あたりにあるライブラリフォルダスキャン関数:_syntaxhighlighter_scan_lib_location()があります
    • ライブラリフォルダスキャンの原理:shCore.jsが含まれているフォルダを取得します
  • _syntaxhighlighter_scan_lib_location()にwatchdogを入れて、取得したフォルダをログとして出力しました。
  • 結果として、このパス「sites/all/libraries/flexslider/demo/js/shCore.jssites/all/libraries/flexslider/demo/js/shCore.js」を取得しました。
  • flexSlider/demoの下に同じ名前(shCore.js)のファイルがあるため、flexsliderライブラリに関連づけられました。

解決:demoフォルダ(「sites/all/libraries/flexslider/demo」)を消して、再インストールします

  • flexsliderのdemoフォルダが邪魔にになってるため、またライブラリにdemoプログラムを使用しないため、demoフォルダを消しました
  • SyntaxHighlighterモジュールをアンインストールして、再インストールしたら、機能正常に戻りました
drupal
customization
development
module usage

やりたいこと:一つDrupalのソースで複数のサイト(複数のドメイン)を構築したいです

  • Drupalを用いて複数のサイト(ドメイン)を構築する場合、一つサイト(ドメイン)ごとに一つのDrupalソースで構築することがもちろん問題はありません
  • Drupalソースが分散すると、バージョンアップ、バグ管理などの作業が大変になります
  • 当然一つのDrupalソースの元で複数のサイト(ドメイン)の構築が必要となります
    • 一ドメイン ⇒ Drupalソース ⇒ 共有DB
    • 一ドメイン ⇒ Drupalソース ⇒ 独立DB
  • Drupalでは複数のサイト(ドメイン)への対応をしています

sitesディレクトリの下にドメインごとの子ディレクトリを作成してマルティサイトを構築します

  • 複数のドメイン名をDrupalのルートディレクトリに同期します(例:シンボリックリンクでドメイン名をディレクトリと同期します)
    • 例: old-pine.net をDrupalのルートディレクトリにシンボリックリンクで同期します
  • Drupalのルートディレクトリの下に sites ディレクトリがあります。sitesの下に各メイン名に同期したいディレクトリを作成します
    • 例:sites/pine を作成します
  • sites/sites.phpファイルでドメイン名をディレクトと同期設定を行います
    • 例: 'old-pine.net' => 'pine'  (書き方: ドメイン名 => ディレクトリ名)
       $sites = array(
          'old-pine.net' => 'pine',
       );
      
  • 新規作成したディレクトの下にサイトのインストール設定ファイル(settings.php)の作成
    • 例:sites/pine/settings.phpを作成します
    • settings.phpの内容はsites/pine/default.settings.phpのコピーで良いです(サイト新規作成する場合)
  • 追加したドメイン名でサイトをアクセスして、新規サイトができたことを確認します
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
php
development
bug
syntax highlighter

別々のDrupal(バージョン7)ソースのサイトを一つ共有ソースのところにサイト移行

  • 複数のDrupalソースで構築した複数のウェブサイトがありまして、Drupalソースのバージョンアップ、バグ管理などに手間がかかり、一つのDrupal共有ソールの元で複数のサイトを構築しました。
  • 今回は一つのサイトを共有ソースのところに移行を行いました
  • 移行をシンプルにするため、事前に不必要ないくつかモジュール(SyntaxHighlighter含め)をアンインストールしました
  • 移行後に再度モジュール(SyntaxHighlighter含め)をインストールし直します

モジュール(SyntaxHighlighter)インストール後にSyntaxHighlighterライブラリが見つからないエラー

  • まずSyntaxHighlighterのライブラリ(3.0.83)をダウンロードしてsites/all/libraies/syntaxhighlighter_3.0.83に展開しました
  • 通常の方法でSyntaxHighlighterモジュール(7.x-2.0)をインストールして有効化しました
  • 以前のサイトになっかたエラーメッセージ:
    Warning: file_get_contents(sites/all/libraries/flexslider/scripts/shCore.js): failed to open stream: No such file or directory _locale_parse_js_file() (/virtual/drills/public_html/drupal7/includes/locale.inc ファイル 1527行).
    Warning: file_get_contents(sites/all/libraries/flexslider/scripts/shBrushPhp.js): failed to open stream: No such file or directory _locale_parse_js_file() (/virtual/drills/public_html/drupal7/includes/locale.inc ファイル 1527行)
    
  • shCore.jsがSyntaxHighlighterのライブラリにあるはずなのに、なぜかflexsliderライブラリに関連付けられました(不思議なエラー)

問題:flexsliderのライブラリに同じ名前(shCore.js)のファイルがありました

  • 他に同じようなエラーがあるか、検索してみたが、答えはありませんでした
  • ソースコードを読んで自力で解決するしかないですね。幸い、複雑なモジュールではなく、SyntaxHighlighterのjsファイルをページロード時にクライアント側に渡すプログラムです
  • 最初は sites/all/modules/syntaxhighlighter/syntaxhighlighter.install をチェックしました。44行目にあるライブラリパス取得関数:sntaxhighlighter_get_lib_location()を注目しました
  • 関数(_syntaxhighlighter_get_lib_location())は sites/all/modules/syntaxhighlighter/syntaxhighlighter.module にあります。さらに、ライブラリパス取得ロジックを探してみました
  • syntaxhighlighter.moduleの377行あたりにあるライブラリフォルダスキャン関数:_syntaxhighlighter_scan_lib_location()があります
    • ライブラリフォルダスキャンの原理:shCore.jsが含まれているフォルダを取得します
  • _syntaxhighlighter_scan_lib_location()にwatchdogを入れて、取得したフォルダをログとして出力しました。
  • 結果として、このパス「sites/all/libraries/flexslider/demo/js/shCore.jssites/all/libraries/flexslider/demo/js/shCore.js」を取得しました。
  • flexSlider/demoの下に同じ名前(shCore.js)のファイルがあるため、flexsliderライブラリに関連づけられました。

解決:demoフォルダ(「sites/all/libraries/flexslider/demo」)を消して、再インストールします

  • flexsliderのdemoフォルダが邪魔にになってるため、またライブラリにdemoプログラムを使用しないため、demoフォルダを消しました
  • SyntaxHighlighterモジュールをアンインストールして、再インストールしたら、機能正常に戻りました
drupal
customization
development
module usage

やりたいこと:一つDrupalのソースで複数のサイト(複数のドメイン)を構築したいです

  • Drupalを用いて複数のサイト(ドメイン)を構築する場合、一つサイト(ドメイン)ごとに一つのDrupalソースで構築することがもちろん問題はありません
  • Drupalソースが分散すると、バージョンアップ、バグ管理などの作業が大変になります
  • 当然一つのDrupalソースの元で複数のサイト(ドメイン)の構築が必要となります
    • 一ドメイン ⇒ Drupalソース ⇒ 共有DB
    • 一ドメイン ⇒ Drupalソース ⇒ 独立DB
  • Drupalでは複数のサイト(ドメイン)への対応をしています

sitesディレクトリの下にドメインごとの子ディレクトリを作成してマルティサイトを構築します

  • 複数のドメイン名をDrupalのルートディレクトリに同期します(例:シンボリックリンクでドメイン名をディレクトリと同期します)
    • 例: old-pine.net をDrupalのルートディレクトリにシンボリックリンクで同期します
  • Drupalのルートディレクトリの下に sites ディレクトリがあります。sitesの下に各メイン名に同期したいディレクトリを作成します
    • 例:sites/pine を作成します
  • sites/sites.phpファイルでドメイン名をディレクトと同期設定を行います
    • 例: 'old-pine.net' => 'pine'  (書き方: ドメイン名 => ディレクトリ名)
       $sites = array(
          'old-pine.net' => 'pine',
       );
      
  • 新規作成したディレクトの下にサイトのインストール設定ファイル(settings.php)の作成
    • 例:sites/pine/settings.phpを作成します
    • settings.phpの内容はsites/pine/default.settings.phpのコピーで良いです(サイト新規作成する場合)
  • 追加したドメイン名でサイトをアクセスして、新規サイトができたことを確認します
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
php
development
bug
syntax highlighter

別々のDrupal(バージョン7)ソースのサイトを一つ共有ソースのところにサイト移行

  • 複数のDrupalソースで構築した複数のウェブサイトがありまして、Drupalソースのバージョンアップ、バグ管理などに手間がかかり、一つのDrupal共有ソールの元で複数のサイトを構築しました。
  • 今回は一つのサイトを共有ソースのところに移行を行いました
  • 移行をシンプルにするため、事前に不必要ないくつかモジュール(SyntaxHighlighter含め)をアンインストールしました
  • 移行後に再度モジュール(SyntaxHighlighter含め)をインストールし直します

モジュール(SyntaxHighlighter)インストール後にSyntaxHighlighterライブラリが見つからないエラー

  • まずSyntaxHighlighterのライブラリ(3.0.83)をダウンロードしてsites/all/libraies/syntaxhighlighter_3.0.83に展開しました
  • 通常の方法でSyntaxHighlighterモジュール(7.x-2.0)をインストールして有効化しました
  • 以前のサイトになっかたエラーメッセージ:
    Warning: file_get_contents(sites/all/libraries/flexslider/scripts/shCore.js): failed to open stream: No such file or directory _locale_parse_js_file() (/virtual/drills/public_html/drupal7/includes/locale.inc ファイル 1527行).
    Warning: file_get_contents(sites/all/libraries/flexslider/scripts/shBrushPhp.js): failed to open stream: No such file or directory _locale_parse_js_file() (/virtual/drills/public_html/drupal7/includes/locale.inc ファイル 1527行)
    
  • shCore.jsがSyntaxHighlighterのライブラリにあるはずなのに、なぜかflexsliderライブラリに関連付けられました(不思議なエラー)

問題:flexsliderのライブラリに同じ名前(shCore.js)のファイルがありました

  • 他に同じようなエラーがあるか、検索してみたが、答えはありませんでした
  • ソースコードを読んで自力で解決するしかないですね。幸い、複雑なモジュールではなく、SyntaxHighlighterのjsファイルをページロード時にクライアント側に渡すプログラムです
  • 最初は sites/all/modules/syntaxhighlighter/syntaxhighlighter.install をチェックしました。44行目にあるライブラリパス取得関数:sntaxhighlighter_get_lib_location()を注目しました
  • 関数(_syntaxhighlighter_get_lib_location())は sites/all/modules/syntaxhighlighter/syntaxhighlighter.module にあります。さらに、ライブラリパス取得ロジックを探してみました
  • syntaxhighlighter.moduleの377行あたりにあるライブラリフォルダスキャン関数:_syntaxhighlighter_scan_lib_location()があります
    • ライブラリフォルダスキャンの原理:shCore.jsが含まれているフォルダを取得します
  • _syntaxhighlighter_scan_lib_location()にwatchdogを入れて、取得したフォルダをログとして出力しました。
  • 結果として、このパス「sites/all/libraries/flexslider/demo/js/shCore.jssites/all/libraries/flexslider/demo/js/shCore.js」を取得しました。
  • flexSlider/demoの下に同じ名前(shCore.js)のファイルがあるため、flexsliderライブラリに関連づけられました。

解決:demoフォルダ(「sites/all/libraries/flexslider/demo」)を消して、再インストールします

  • flexsliderのdemoフォルダが邪魔にになってるため、またライブラリにdemoプログラムを使用しないため、demoフォルダを消しました
  • SyntaxHighlighterモジュールをアンインストールして、再インストールしたら、機能正常に戻りました
drupal
customization
development
module usage

やりたいこと:一つDrupalのソースで複数のサイト(複数のドメイン)を構築したいです

  • Drupalを用いて複数のサイト(ドメイン)を構築する場合、一つサイト(ドメイン)ごとに一つのDrupalソースで構築することがもちろん問題はありません
  • Drupalソースが分散すると、バージョンアップ、バグ管理などの作業が大変になります
  • 当然一つのDrupalソースの元で複数のサイト(ドメイン)の構築が必要となります
    • 一ドメイン ⇒ Drupalソース ⇒ 共有DB
    • 一ドメイン ⇒ Drupalソース ⇒ 独立DB
  • Drupalでは複数のサイト(ドメイン)への対応をしています

sitesディレクトリの下にドメインごとの子ディレクトリを作成してマルティサイトを構築します

  • 複数のドメイン名をDrupalのルートディレクトリに同期します(例:シンボリックリンクでドメイン名をディレクトリと同期します)
    • 例: old-pine.net をDrupalのルートディレクトリにシンボリックリンクで同期します
  • Drupalのルートディレクトリの下に sites ディレクトリがあります。sitesの下に各メイン名に同期したいディレクトリを作成します
    • 例:sites/pine を作成します
  • sites/sites.phpファイルでドメイン名をディレクトと同期設定を行います
    • 例: 'old-pine.net' => 'pine'  (書き方: ドメイン名 => ディレクトリ名)
       $sites = array(
          'old-pine.net' => 'pine',
       );
      
  • 新規作成したディレクトの下にサイトのインストール設定ファイル(settings.php)の作成
    • 例:sites/pine/settings.phpを作成します
    • settings.phpの内容はsites/pine/default.settings.phpのコピーで良いです(サイト新規作成する場合)
  • 追加したドメイン名でサイトをアクセスして、新規サイトができたことを確認します
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
php
development
bug
syntax highlighter

別々のDrupal(バージョン7)ソースのサイトを一つ共有ソースのところにサイト移行

  • 複数のDrupalソースで構築した複数のウェブサイトがありまして、Drupalソースのバージョンアップ、バグ管理などに手間がかかり、一つのDrupal共有ソールの元で複数のサイトを構築しました。
  • 今回は一つのサイトを共有ソースのところに移行を行いました
  • 移行をシンプルにするため、事前に不必要ないくつかモジュール(SyntaxHighlighter含め)をアンインストールしました
  • 移行後に再度モジュール(SyntaxHighlighter含め)をインストールし直します

モジュール(SyntaxHighlighter)インストール後にSyntaxHighlighterライブラリが見つからないエラー

  • まずSyntaxHighlighterのライブラリ(3.0.83)をダウンロードしてsites/all/libraies/syntaxhighlighter_3.0.83に展開しました
  • 通常の方法でSyntaxHighlighterモジュール(7.x-2.0)をインストールして有効化しました
  • 以前のサイトになっかたエラーメッセージ:
    Warning: file_get_contents(sites/all/libraries/flexslider/scripts/shCore.js): failed to open stream: No such file or directory _locale_parse_js_file() (/virtual/drills/public_html/drupal7/includes/locale.inc ファイル 1527行).
    Warning: file_get_contents(sites/all/libraries/flexslider/scripts/shBrushPhp.js): failed to open stream: No such file or directory _locale_parse_js_file() (/virtual/drills/public_html/drupal7/includes/locale.inc ファイル 1527行)
    
  • shCore.jsがSyntaxHighlighterのライブラリにあるはずなのに、なぜかflexsliderライブラリに関連付けられました(不思議なエラー)

問題:flexsliderのライブラリに同じ名前(shCore.js)のファイルがありました

  • 他に同じようなエラーがあるか、検索してみたが、答えはありませんでした
  • ソースコードを読んで自力で解決するしかないですね。幸い、複雑なモジュールではなく、SyntaxHighlighterのjsファイルをページロード時にクライアント側に渡すプログラムです
  • 最初は sites/all/modules/syntaxhighlighter/syntaxhighlighter.install をチェックしました。44行目にあるライブラリパス取得関数:sntaxhighlighter_get_lib_location()を注目しました
  • 関数(_syntaxhighlighter_get_lib_location())は sites/all/modules/syntaxhighlighter/syntaxhighlighter.module にあります。さらに、ライブラリパス取得ロジックを探してみました
  • syntaxhighlighter.moduleの377行あたりにあるライブラリフォルダスキャン関数:_syntaxhighlighter_scan_lib_location()があります
    • ライブラリフォルダスキャンの原理:shCore.jsが含まれているフォルダを取得します
  • _syntaxhighlighter_scan_lib_location()にwatchdogを入れて、取得したフォルダをログとして出力しました。
  • 結果として、このパス「sites/all/libraries/flexslider/demo/js/shCore.jssites/all/libraries/flexslider/demo/js/shCore.js」を取得しました。
  • flexSlider/demoの下に同じ名前(shCore.js)のファイルがあるため、flexsliderライブラリに関連づけられました。

解決:demoフォルダ(「sites/all/libraries/flexslider/demo」)を消して、再インストールします

  • flexsliderのdemoフォルダが邪魔にになってるため、またライブラリにdemoプログラムを使用しないため、demoフォルダを消しました
  • SyntaxHighlighterモジュールをアンインストールして、再インストールしたら、機能正常に戻りました
drupal
customization
development
module usage

やりたいこと:一つDrupalのソースで複数のサイト(複数のドメイン)を構築したいです

  • Drupalを用いて複数のサイト(ドメイン)を構築する場合、一つサイト(ドメイン)ごとに一つのDrupalソースで構築することがもちろん問題はありません
  • Drupalソースが分散すると、バージョンアップ、バグ管理などの作業が大変になります
  • 当然一つのDrupalソースの元で複数のサイト(ドメイン)の構築が必要となります
    • 一ドメイン ⇒ Drupalソース ⇒ 共有DB
    • 一ドメイン ⇒ Drupalソース ⇒ 独立DB
  • Drupalでは複数のサイト(ドメイン)への対応をしています

sitesディレクトリの下にドメインごとの子ディレクトリを作成してマルティサイトを構築します

  • 複数のドメイン名をDrupalのルートディレクトリに同期します(例:シンボリックリンクでドメイン名をディレクトリと同期します)
    • 例: old-pine.net をDrupalのルートディレクトリにシンボリックリンクで同期します
  • Drupalのルートディレクトリの下に sites ディレクトリがあります。sitesの下に各メイン名に同期したいディレクトリを作成します
    • 例:sites/pine を作成します
  • sites/sites.phpファイルでドメイン名をディレクトと同期設定を行います
    • 例: 'old-pine.net' => 'pine'  (書き方: ドメイン名 => ディレクトリ名)
       $sites = array(
          'old-pine.net' => 'pine',
       );
      
  • 新規作成したディレクトの下にサイトのインストール設定ファイル(settings.php)の作成
    • 例:sites/pine/settings.phpを作成します
    • settings.phpの内容はsites/pine/default.settings.phpのコピーで良いです(サイト新規作成する場合)
  • 追加したドメイン名でサイトをアクセスして、新規サイトができたことを確認します
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
php
development
bug
syntax highlighter

別々のDrupal(バージョン7)ソースのサイトを一つ共有ソースのところにサイト移行

  • 複数のDrupalソースで構築した複数のウェブサイトがありまして、Drupalソースのバージョンアップ、バグ管理などに手間がかかり、一つのDrupal共有ソールの元で複数のサイトを構築しました。
  • 今回は一つのサイトを共有ソースのところに移行を行いました
  • 移行をシンプルにするため、事前に不必要ないくつかモジュール(SyntaxHighlighter含め)をアンインストールしました
  • 移行後に再度モジュール(SyntaxHighlighter含め)をインストールし直します

モジュール(SyntaxHighlighter)インストール後にSyntaxHighlighterライブラリが見つからないエラー

  • まずSyntaxHighlighterのライブラリ(3.0.83)をダウンロードしてsites/all/libraies/syntaxhighlighter_3.0.83に展開しました
  • 通常の方法でSyntaxHighlighterモジュール(7.x-2.0)をインストールして有効化しました
  • 以前のサイトになっかたエラーメッセージ:
    Warning: file_get_contents(sites/all/libraries/flexslider/scripts/shCore.js): failed to open stream: No such file or directory _locale_parse_js_file() (/virtual/drills/public_html/drupal7/includes/locale.inc ファイル 1527行).
    Warning: file_get_contents(sites/all/libraries/flexslider/scripts/shBrushPhp.js): failed to open stream: No such file or directory _locale_parse_js_file() (/virtual/drills/public_html/drupal7/includes/locale.inc ファイル 1527行)
    
  • shCore.jsがSyntaxHighlighterのライブラリにあるはずなのに、なぜかflexsliderライブラリに関連付けられました(不思議なエラー)

問題:flexsliderのライブラリに同じ名前(shCore.js)のファイルがありました

  • 他に同じようなエラーがあるか、検索してみたが、答えはありませんでした
  • ソースコードを読んで自力で解決するしかないですね。幸い、複雑なモジュールではなく、SyntaxHighlighterのjsファイルをページロード時にクライアント側に渡すプログラムです
  • 最初は sites/all/modules/syntaxhighlighter/syntaxhighlighter.install をチェックしました。44行目にあるライブラリパス取得関数:sntaxhighlighter_get_lib_location()を注目しました
  • 関数(_syntaxhighlighter_get_lib_location())は sites/all/modules/syntaxhighlighter/syntaxhighlighter.module にあります。さらに、ライブラリパス取得ロジックを探してみました
  • syntaxhighlighter.moduleの377行あたりにあるライブラリフォルダスキャン関数:_syntaxhighlighter_scan_lib_location()があります
    • ライブラリフォルダスキャンの原理:shCore.jsが含まれているフォルダを取得します
  • _syntaxhighlighter_scan_lib_location()にwatchdogを入れて、取得したフォルダをログとして出力しました。
  • 結果として、このパス「sites/all/libraries/flexslider/demo/js/shCore.jssites/all/libraries/flexslider/demo/js/shCore.js」を取得しました。
  • flexSlider/demoの下に同じ名前(shCore.js)のファイルがあるため、flexsliderライブラリに関連づけられました。

解決:demoフォルダ(「sites/all/libraries/flexslider/demo」)を消して、再インストールします

  • flexsliderのdemoフォルダが邪魔にになってるため、またライブラリにdemoプログラムを使用しないため、demoフォルダを消しました
  • SyntaxHighlighterモジュールをアンインストールして、再インストールしたら、機能正常に戻りました
drupal
customization
development
module usage

やりたいこと:一つDrupalのソースで複数のサイト(複数のドメイン)を構築したいです

  • Drupalを用いて複数のサイト(ドメイン)を構築する場合、一つサイト(ドメイン)ごとに一つのDrupalソースで構築することがもちろん問題はありません
  • Drupalソースが分散すると、バージョンアップ、バグ管理などの作業が大変になります
  • 当然一つのDrupalソースの元で複数のサイト(ドメイン)の構築が必要となります
    • 一ドメイン ⇒ Drupalソース ⇒ 共有DB
    • 一ドメイン ⇒ Drupalソース ⇒ 独立DB
  • Drupalでは複数のサイト(ドメイン)への対応をしています

sitesディレクトリの下にドメインごとの子ディレクトリを作成してマルティサイトを構築します

  • 複数のドメイン名をDrupalのルートディレクトリに同期します(例:シンボリックリンクでドメイン名をディレクトリと同期します)
    • 例: old-pine.net をDrupalのルートディレクトリにシンボリックリンクで同期します
  • Drupalのルートディレクトリの下に sites ディレクトリがあります。sitesの下に各メイン名に同期したいディレクトリを作成します
    • 例:sites/pine を作成します
  • sites/sites.phpファイルでドメイン名をディレクトと同期設定を行います
    • 例: 'old-pine.net' => 'pine'  (書き方: ドメイン名 => ディレクトリ名)
       $sites = array(
          'old-pine.net' => 'pine',
       );
      
  • 新規作成したディレクトの下にサイトのインストール設定ファイル(settings.php)の作成
    • 例:sites/pine/settings.phpを作成します
    • settings.phpの内容はsites/pine/default.settings.phpのコピーで良いです(サイト新規作成する場合)
  • 追加したドメイン名でサイトをアクセスして、新規サイトができたことを確認します
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
php
development
bug
syntax highlighter

別々のDrupal(バージョン7)ソースのサイトを一つ共有ソースのところにサイト移行

  • 複数のDrupalソースで構築した複数のウェブサイトがありまして、Drupalソースのバージョンアップ、バグ管理などに手間がかかり、一つのDrupal共有ソールの元で複数のサイトを構築しました。
  • 今回は一つのサイトを共有ソースのところに移行を行いました
  • 移行をシンプルにするため、事前に不必要ないくつかモジュール(SyntaxHighlighter含め)をアンインストールしました
  • 移行後に再度モジュール(SyntaxHighlighter含め)をインストールし直します

モジュール(SyntaxHighlighter)インストール後にSyntaxHighlighterライブラリが見つからないエラー

  • まずSyntaxHighlighterのライブラリ(3.0.83)をダウンロードしてsites/all/libraies/syntaxhighlighter_3.0.83に展開しました
  • 通常の方法でSyntaxHighlighterモジュール(7.x-2.0)をインストールして有効化しました
  • 以前のサイトになっかたエラーメッセージ:
    Warning: file_get_contents(sites/all/libraries/flexslider/scripts/shCore.js): failed to open stream: No such file or directory _locale_parse_js_file() (/virtual/drills/public_html/drupal7/includes/locale.inc ファイル 1527行).
    Warning: file_get_contents(sites/all/libraries/flexslider/scripts/shBrushPhp.js): failed to open stream: No such file or directory _locale_parse_js_file() (/virtual/drills/public_html/drupal7/includes/locale.inc ファイル 1527行)
    
  • shCore.jsがSyntaxHighlighterのライブラリにあるはずなのに、なぜかflexsliderライブラリに関連付けられました(不思議なエラー)

問題:flexsliderのライブラリに同じ名前(shCore.js)のファイルがありました

  • 他に同じようなエラーがあるか、検索してみたが、答えはありませんでした
  • ソースコードを読んで自力で解決するしかないですね。幸い、複雑なモジュールではなく、SyntaxHighlighterのjsファイルをページロード時にクライアント側に渡すプログラムです
  • 最初は sites/all/modules/syntaxhighlighter/syntaxhighlighter.install をチェックしました。44行目にあるライブラリパス取得関数:sntaxhighlighter_get_lib_location()を注目しました
  • 関数(_syntaxhighlighter_get_lib_location())は sites/all/modules/syntaxhighlighter/syntaxhighlighter.module にあります。さらに、ライブラリパス取得ロジックを探してみました
  • syntaxhighlighter.moduleの377行あたりにあるライブラリフォルダスキャン関数:_syntaxhighlighter_scan_lib_location()があります
    • ライブラリフォルダスキャンの原理:shCore.jsが含まれているフォルダを取得します
  • _syntaxhighlighter_scan_lib_location()にwatchdogを入れて、取得したフォルダをログとして出力しました。
  • 結果として、このパス「sites/all/libraries/flexslider/demo/js/shCore.jssites/all/libraries/flexslider/demo/js/shCore.js」を取得しました。
  • flexSlider/demoの下に同じ名前(shCore.js)のファイルがあるため、flexsliderライブラリに関連づけられました。

解決:demoフォルダ(「sites/all/libraries/flexslider/demo」)を消して、再インストールします

  • flexsliderのdemoフォルダが邪魔にになってるため、またライブラリにdemoプログラムを使用しないため、demoフォルダを消しました
  • SyntaxHighlighterモジュールをアンインストールして、再インストールしたら、機能正常に戻りました
drupal
customization
development
module usage

やりたいこと:一つDrupalのソースで複数のサイト(複数のドメイン)を構築したいです

  • Drupalを用いて複数のサイト(ドメイン)を構築する場合、一つサイト(ドメイン)ごとに一つのDrupalソースで構築することがもちろん問題はありません
  • Drupalソースが分散すると、バージョンアップ、バグ管理などの作業が大変になります
  • 当然一つのDrupalソースの元で複数のサイト(ドメイン)の構築が必要となります
    • 一ドメイン ⇒ Drupalソース ⇒ 共有DB
    • 一ドメイン ⇒ Drupalソース ⇒ 独立DB
  • Drupalでは複数のサイト(ドメイン)への対応をしています

sitesディレクトリの下にドメインごとの子ディレクトリを作成してマルティサイトを構築します

  • 複数のドメイン名をDrupalのルートディレクトリに同期します(例:シンボリックリンクでドメイン名をディレクトリと同期します)
    • 例: old-pine.net をDrupalのルートディレクトリにシンボリックリンクで同期します
  • Drupalのルートディレクトリの下に sites ディレクトリがあります。sitesの下に各メイン名に同期したいディレクトリを作成します
    • 例:sites/pine を作成します
  • sites/sites.phpファイルでドメイン名をディレクトと同期設定を行います
    • 例: 'old-pine.net' => 'pine'  (書き方: ドメイン名 => ディレクトリ名)
       $sites = array(
          'old-pine.net' => 'pine',
       );
      
  • 新規作成したディレクトの下にサイトのインストール設定ファイル(settings.php)の作成
    • 例:sites/pine/settings.phpを作成します
    • settings.phpの内容はsites/pine/default.settings.phpのコピーで良いです(サイト新規作成する場合)
  • 追加したドメイン名でサイトをアクセスして、新規サイトができたことを確認します
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
php
development
bug
syntax highlighter

別々のDrupal(バージョン7)ソースのサイトを一つ共有ソースのところにサイト移行

  • 複数のDrupalソースで構築した複数のウェブサイトがありまして、Drupalソースのバージョンアップ、バグ管理などに手間がかかり、一つのDrupal共有ソールの元で複数のサイトを構築しました。
  • 今回は一つのサイトを共有ソースのところに移行を行いました
  • 移行をシンプルにするため、事前に不必要ないくつかモジュール(SyntaxHighlighter含め)をアンインストールしました
  • 移行後に再度モジュール(SyntaxHighlighter含め)をインストールし直します

モジュール(SyntaxHighlighter)インストール後にSyntaxHighlighterライブラリが見つからないエラー

  • まずSyntaxHighlighterのライブラリ(3.0.83)をダウンロードしてsites/all/libraies/syntaxhighlighter_3.0.83に展開しました
  • 通常の方法でSyntaxHighlighterモジュール(7.x-2.0)をインストールして有効化しました
  • 以前のサイトになっかたエラーメッセージ:
    Warning: file_get_contents(sites/all/libraries/flexslider/scripts/shCore.js): failed to open stream: No such file or directory _locale_parse_js_file() (/virtual/drills/public_html/drupal7/includes/locale.inc ファイル 1527行).
    Warning: file_get_contents(sites/all/libraries/flexslider/scripts/shBrushPhp.js): failed to open stream: No such file or directory _locale_parse_js_file() (/virtual/drills/public_html/drupal7/includes/locale.inc ファイル 1527行)
    
  • shCore.jsがSyntaxHighlighterのライブラリにあるはずなのに、なぜかflexsliderライブラリに関連付けられました(不思議なエラー)

問題:flexsliderのライブラリに同じ名前(shCore.js)のファイルがありました

  • 他に同じようなエラーがあるか、検索してみたが、答えはありませんでした
  • ソースコードを読んで自力で解決するしかないですね。幸い、複雑なモジュールではなく、SyntaxHighlighterのjsファイルをページロード時にクライアント側に渡すプログラムです
  • 最初は sites/all/modules/syntaxhighlighter/syntaxhighlighter.install をチェックしました。44行目にあるライブラリパス取得関数:sntaxhighlighter_get_lib_location()を注目しました
  • 関数(_syntaxhighlighter_get_lib_location())は sites/all/modules/syntaxhighlighter/syntaxhighlighter.module にあります。さらに、ライブラリパス取得ロジックを探してみました
  • syntaxhighlighter.moduleの377行あたりにあるライブラリフォルダスキャン関数:_syntaxhighlighter_scan_lib_location()があります
    • ライブラリフォルダスキャンの原理:shCore.jsが含まれているフォルダを取得します
  • _syntaxhighlighter_scan_lib_location()にwatchdogを入れて、取得したフォルダをログとして出力しました。
  • 結果として、このパス「sites/all/libraries/flexslider/demo/js/shCore.jssites/all/libraries/flexslider/demo/js/shCore.js」を取得しました。
  • flexSlider/demoの下に同じ名前(shCore.js)のファイルがあるため、flexsliderライブラリに関連づけられました。

解決:demoフォルダ(「sites/all/libraries/flexslider/demo」)を消して、再インストールします

  • flexsliderのdemoフォルダが邪魔にになってるため、またライブラリにdemoプログラムを使用しないため、demoフォルダを消しました
  • SyntaxHighlighterモジュールをアンインストールして、再インストールしたら、機能正常に戻りました
drupal
customization
development
module usage

やりたいこと:一つDrupalのソースで複数のサイト(複数のドメイン)を構築したいです

  • Drupalを用いて複数のサイト(ドメイン)を構築する場合、一つサイト(ドメイン)ごとに一つのDrupalソースで構築することがもちろん問題はありません
  • Drupalソースが分散すると、バージョンアップ、バグ管理などの作業が大変になります
  • 当然一つのDrupalソースの元で複数のサイト(ドメイン)の構築が必要となります
    • 一ドメイン ⇒ Drupalソース ⇒ 共有DB
    • 一ドメイン ⇒ Drupalソース ⇒ 独立DB
  • Drupalでは複数のサイト(ドメイン)への対応をしています

sitesディレクトリの下にドメインごとの子ディレクトリを作成してマルティサイトを構築します

  • 複数のドメイン名をDrupalのルートディレクトリに同期します(例:シンボリックリンクでドメイン名をディレクトリと同期します)
    • 例: old-pine.net をDrupalのルートディレクトリにシンボリックリンクで同期します
  • Drupalのルートディレクトリの下に sites ディレクトリがあります。sitesの下に各メイン名に同期したいディレクトリを作成します
    • 例:sites/pine を作成します
  • sites/sites.phpファイルでドメイン名をディレクトと同期設定を行います
    • 例: 'old-pine.net' => 'pine'  (書き方: ドメイン名 => ディレクトリ名)
       $sites = array(
          'old-pine.net' => 'pine',
       );
      
  • 新規作成したディレクトの下にサイトのインストール設定ファイル(settings.php)の作成
    • 例:sites/pine/settings.phpを作成します
    • settings.phpの内容はsites/pine/default.settings.phpのコピーで良いです(サイト新規作成する場合)
  • 追加したドメイン名でサイトをアクセスして、新規サイトができたことを確認します
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
development
module usage

エラー:モジュール(Twitter)をバージョンアップしてフロントページに開くと「EntityFieldQueryException」が発生

  • モジュール(Twitter)のバージョン:7.x-5.11 ⇒ 7.x-6.2 にアップデートしました(新モジュールから旧モジュールを上書き)
  • フロントページを開いてみたらエラーが発生し:
    EntityFieldQueryException: エンティティー <em class="placeholder">twitter_account</em> にはベーステーブルがありません。 EntityFieldQuery->propertyQuery() (/virtual/drills/public_html/drupal7/includes/entity.inc ファイル 1271行).
  • 画面にエラーしか表示されていないです

原因:Twitter7.x-5.11⇒7.x-6.2にアップデートする場合DBのテーブルが追加されたので、DB更新が必要

  • 原因は比較的に単純的で、Twitter7.x-6.2(7.x-6.0以上になるとデータ構造が変わった)が7.x-5.11よりデータテーブルが追加されました
  • 管理者権限でupdate.phpを実行してデータテーブルを追加します
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
customization
development
module usage

やりたいこと:一つDrupalのソースで複数のサイト(複数のドメイン)を構築したいです

  • Drupalを用いて複数のサイト(ドメイン)を構築する場合、一つサイト(ドメイン)ごとに一つのDrupalソースで構築することがもちろん問題はありません
  • Drupalソースが分散すると、バージョンアップ、バグ管理などの作業が大変になります
  • 当然一つのDrupalソースの元で複数のサイト(ドメイン)の構築が必要となります
    • 一ドメイン ⇒ Drupalソース ⇒ 共有DB
    • 一ドメイン ⇒ Drupalソース ⇒ 独立DB
  • Drupalでは複数のサイト(ドメイン)への対応をしています

sitesディレクトリの下にドメインごとの子ディレクトリを作成してマルティサイトを構築します

  • 複数のドメイン名をDrupalのルートディレクトリに同期します(例:シンボリックリンクでドメイン名をディレクトリと同期します)
    • 例: old-pine.net をDrupalのルートディレクトリにシンボリックリンクで同期します
  • Drupalのルートディレクトリの下に sites ディレクトリがあります。sitesの下に各メイン名に同期したいディレクトリを作成します
    • 例:sites/pine を作成します
  • sites/sites.phpファイルでドメイン名をディレクトと同期設定を行います
    • 例: 'old-pine.net' => 'pine'  (書き方: ドメイン名 => ディレクトリ名)
       $sites = array(
          'old-pine.net' => 'pine',
       );
      
  • 新規作成したディレクトの下にサイトのインストール設定ファイル(settings.php)の作成
    • 例:sites/pine/settings.phpを作成します
    • settings.phpの内容はsites/pine/default.settings.phpのコピーで良いです(サイト新規作成する場合)
  • 追加したドメイン名でサイトをアクセスして、新規サイトができたことを確認します
apache
linux
command

やりたいこと:レンタルサーバーで申請したドメイン名を特定なディレクトリに同期するシンボリックリンク作成したいです

  • レンタルサーバー(例:valueserver)で申請したドメイン名を特定なディレクトに同期するツールが提供されています
  • 同期ツールを利用するのは便利だが、設定が誤ると同期先のディレクトリのファイルがすべて削除されてします危険があります
  • 特に、この操作がよく行うことではなく、誤って設定する確率は実は高そうです(実際に設定を誤って、同期先のファイルが消されてしまう事項がありました)

安全のため、シンボリックリンク作成コマンドでディレクト同期をしたほうがよいです

  • シンボリックリンク作成:
    • public_htmlディレクトリ(apacheではdocument root)に入ります
    • コマンド: ln -s [ディレクト名] [ドメイン名] (例:ln -s drupal7 old-pine.net)
    • コマンド: ls -l で生成したシンボリックリンクを確認します(例: old-pine.net -> pine)
  • シンボリックリンクの削除
    • コマンド:unlink [ドメイン名] (例:unlink old-pine.net)
    • コマンド:ls -l でドメイン名の同期先が消えたことを確認します

安全のため、コマンド(rm)でシンボリックリンクを削除しないこと

  • シンボリックリンクを削除するのはコマンド(rm)できますが、誤って指定すると、同期先のディレクトリの内容を削除していまう危険があります
  • シンボリックリンクを削除するには、コマンド(unlink)を使用すべきです
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
drupal
development
module usage

エラー:モジュール(Twitter)をバージョンアップしてフロントページに開くと「EntityFieldQueryException」が発生

  • モジュール(Twitter)のバージョン:7.x-5.11 ⇒ 7.x-6.2 にアップデートしました(新モジュールから旧モジュールを上書き)
  • フロントページを開いてみたらエラーが発生し:
    EntityFieldQueryException: エンティティー <em class="placeholder">twitter_account</em> にはベーステーブルがありません。 EntityFieldQuery->propertyQuery() (/virtual/drills/public_html/drupal7/includes/entity.inc ファイル 1271行).
  • 画面にエラーしか表示されていないです

原因:Twitter7.x-5.11⇒7.x-6.2にアップデートする場合DBのテーブルが追加されたので、DB更新が必要

  • 原因は比較的に単純的で、Twitter7.x-6.2(7.x-6.0以上になるとデータ構造が変わった)が7.x-5.11よりデータテーブルが追加されました
  • 管理者権限でupdate.phpを実行してデータテーブルを追加します
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
customization
development
module usage

やりたいこと:一つDrupalのソースで複数のサイト(複数のドメイン)を構築したいです

  • Drupalを用いて複数のサイト(ドメイン)を構築する場合、一つサイト(ドメイン)ごとに一つのDrupalソースで構築することがもちろん問題はありません
  • Drupalソースが分散すると、バージョンアップ、バグ管理などの作業が大変になります
  • 当然一つのDrupalソースの元で複数のサイト(ドメイン)の構築が必要となります
    • 一ドメイン ⇒ Drupalソース ⇒ 共有DB
    • 一ドメイン ⇒ Drupalソース ⇒ 独立DB
  • Drupalでは複数のサイト(ドメイン)への対応をしています

sitesディレクトリの下にドメインごとの子ディレクトリを作成してマルティサイトを構築します

  • 複数のドメイン名をDrupalのルートディレクトリに同期します(例:シンボリックリンクでドメイン名をディレクトリと同期します)
    • 例: old-pine.net をDrupalのルートディレクトリにシンボリックリンクで同期します
  • Drupalのルートディレクトリの下に sites ディレクトリがあります。sitesの下に各メイン名に同期したいディレクトリを作成します
    • 例:sites/pine を作成します
  • sites/sites.phpファイルでドメイン名をディレクトと同期設定を行います
    • 例: 'old-pine.net' => 'pine'  (書き方: ドメイン名 => ディレクトリ名)
       $sites = array(
          'old-pine.net' => 'pine',
       );
      
  • 新規作成したディレクトの下にサイトのインストール設定ファイル(settings.php)の作成
    • 例:sites/pine/settings.phpを作成します
    • settings.phpの内容はsites/pine/default.settings.phpのコピーで良いです(サイト新規作成する場合)
  • 追加したドメイン名でサイトをアクセスして、新規サイトができたことを確認します
apache
linux
command

やりたいこと:レンタルサーバーで申請したドメイン名を特定なディレクトリに同期するシンボリックリンク作成したいです

  • レンタルサーバー(例:valueserver)で申請したドメイン名を特定なディレクトに同期するツールが提供されています
  • 同期ツールを利用するのは便利だが、設定が誤ると同期先のディレクトリのファイルがすべて削除されてします危険があります
  • 特に、この操作がよく行うことではなく、誤って設定する確率は実は高そうです(実際に設定を誤って、同期先のファイルが消されてしまう事項がありました)

安全のため、シンボリックリンク作成コマンドでディレクト同期をしたほうがよいです

  • シンボリックリンク作成:
    • public_htmlディレクトリ(apacheではdocument root)に入ります
    • コマンド: ln -s [ディレクト名] [ドメイン名] (例:ln -s drupal7 old-pine.net)
    • コマンド: ls -l で生成したシンボリックリンクを確認します(例: old-pine.net -> pine)
  • シンボリックリンクの削除
    • コマンド:unlink [ドメイン名] (例:unlink old-pine.net)
    • コマンド:ls -l でドメイン名の同期先が消えたことを確認します

安全のため、コマンド(rm)でシンボリックリンクを削除しないこと

  • シンボリックリンクを削除するのはコマンド(rm)できますが、誤って指定すると、同期先のディレクトリの内容を削除していまう危険があります
  • シンボリックリンクを削除するには、コマンド(unlink)を使用すべきです
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
drupal
development
module usage

エラー:モジュール(Twitter)をバージョンアップしてフロントページに開くと「EntityFieldQueryException」が発生

  • モジュール(Twitter)のバージョン:7.x-5.11 ⇒ 7.x-6.2 にアップデートしました(新モジュールから旧モジュールを上書き)
  • フロントページを開いてみたらエラーが発生し:
    EntityFieldQueryException: エンティティー <em class="placeholder">twitter_account</em> にはベーステーブルがありません。 EntityFieldQuery->propertyQuery() (/virtual/drills/public_html/drupal7/includes/entity.inc ファイル 1271行).
  • 画面にエラーしか表示されていないです

原因:Twitter7.x-5.11⇒7.x-6.2にアップデートする場合DBのテーブルが追加されたので、DB更新が必要

  • 原因は比較的に単純的で、Twitter7.x-6.2(7.x-6.0以上になるとデータ構造が変わった)が7.x-5.11よりデータテーブルが追加されました
  • 管理者権限でupdate.phpを実行してデータテーブルを追加します
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
customization
development
module usage

やりたいこと:一つDrupalのソースで複数のサイト(複数のドメイン)を構築したいです

  • Drupalを用いて複数のサイト(ドメイン)を構築する場合、一つサイト(ドメイン)ごとに一つのDrupalソースで構築することがもちろん問題はありません
  • Drupalソースが分散すると、バージョンアップ、バグ管理などの作業が大変になります
  • 当然一つのDrupalソースの元で複数のサイト(ドメイン)の構築が必要となります
    • 一ドメイン ⇒ Drupalソース ⇒ 共有DB
    • 一ドメイン ⇒ Drupalソース ⇒ 独立DB
  • Drupalでは複数のサイト(ドメイン)への対応をしています

sitesディレクトリの下にドメインごとの子ディレクトリを作成してマルティサイトを構築します

  • 複数のドメイン名をDrupalのルートディレクトリに同期します(例:シンボリックリンクでドメイン名をディレクトリと同期します)
    • 例: old-pine.net をDrupalのルートディレクトリにシンボリックリンクで同期します
  • Drupalのルートディレクトリの下に sites ディレクトリがあります。sitesの下に各メイン名に同期したいディレクトリを作成します
    • 例:sites/pine を作成します
  • sites/sites.phpファイルでドメイン名をディレクトと同期設定を行います
    • 例: 'old-pine.net' => 'pine'  (書き方: ドメイン名 => ディレクトリ名)
       $sites = array(
          'old-pine.net' => 'pine',
       );
      
  • 新規作成したディレクトの下にサイトのインストール設定ファイル(settings.php)の作成
    • 例:sites/pine/settings.phpを作成します
    • settings.phpの内容はsites/pine/default.settings.phpのコピーで良いです(サイト新規作成する場合)
  • 追加したドメイン名でサイトをアクセスして、新規サイトができたことを確認します
apache
linux
command

やりたいこと:レンタルサーバーで申請したドメイン名を特定なディレクトリに同期するシンボリックリンク作成したいです

  • レンタルサーバー(例:valueserver)で申請したドメイン名を特定なディレクトに同期するツールが提供されています
  • 同期ツールを利用するのは便利だが、設定が誤ると同期先のディレクトリのファイルがすべて削除されてします危険があります
  • 特に、この操作がよく行うことではなく、誤って設定する確率は実は高そうです(実際に設定を誤って、同期先のファイルが消されてしまう事項がありました)

安全のため、シンボリックリンク作成コマンドでディレクト同期をしたほうがよいです

  • シンボリックリンク作成:
    • public_htmlディレクトリ(apacheではdocument root)に入ります
    • コマンド: ln -s [ディレクト名] [ドメイン名] (例:ln -s drupal7 old-pine.net)
    • コマンド: ls -l で生成したシンボリックリンクを確認します(例: old-pine.net -> pine)
  • シンボリックリンクの削除
    • コマンド:unlink [ドメイン名] (例:unlink old-pine.net)
    • コマンド:ls -l でドメイン名の同期先が消えたことを確認します

安全のため、コマンド(rm)でシンボリックリンクを削除しないこと

  • シンボリックリンクを削除するのはコマンド(rm)できますが、誤って指定すると、同期先のディレクトリの内容を削除していまう危険があります
  • シンボリックリンクを削除するには、コマンド(unlink)を使用すべきです
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
drupal
development
module usage

エラー:モジュール(Twitter)をバージョンアップしてフロントページに開くと「EntityFieldQueryException」が発生

  • モジュール(Twitter)のバージョン:7.x-5.11 ⇒ 7.x-6.2 にアップデートしました(新モジュールから旧モジュールを上書き)
  • フロントページを開いてみたらエラーが発生し:
    EntityFieldQueryException: エンティティー <em class="placeholder">twitter_account</em> にはベーステーブルがありません。 EntityFieldQuery->propertyQuery() (/virtual/drills/public_html/drupal7/includes/entity.inc ファイル 1271行).
  • 画面にエラーしか表示されていないです

原因:Twitter7.x-5.11⇒7.x-6.2にアップデートする場合DBのテーブルが追加されたので、DB更新が必要

  • 原因は比較的に単純的で、Twitter7.x-6.2(7.x-6.0以上になるとデータ構造が変わった)が7.x-5.11よりデータテーブルが追加されました
  • 管理者権限でupdate.phpを実行してデータテーブルを追加します
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
customization
development
module usage

やりたいこと:一つDrupalのソースで複数のサイト(複数のドメイン)を構築したいです

  • Drupalを用いて複数のサイト(ドメイン)を構築する場合、一つサイト(ドメイン)ごとに一つのDrupalソースで構築することがもちろん問題はありません
  • Drupalソースが分散すると、バージョンアップ、バグ管理などの作業が大変になります
  • 当然一つのDrupalソースの元で複数のサイト(ドメイン)の構築が必要となります
    • 一ドメイン ⇒ Drupalソース ⇒ 共有DB
    • 一ドメイン ⇒ Drupalソース ⇒ 独立DB
  • Drupalでは複数のサイト(ドメイン)への対応をしています

sitesディレクトリの下にドメインごとの子ディレクトリを作成してマルティサイトを構築します

  • 複数のドメイン名をDrupalのルートディレクトリに同期します(例:シンボリックリンクでドメイン名をディレクトリと同期します)
    • 例: old-pine.net をDrupalのルートディレクトリにシンボリックリンクで同期します
  • Drupalのルートディレクトリの下に sites ディレクトリがあります。sitesの下に各メイン名に同期したいディレクトリを作成します
    • 例:sites/pine を作成します
  • sites/sites.phpファイルでドメイン名をディレクトと同期設定を行います
    • 例: 'old-pine.net' => 'pine'  (書き方: ドメイン名 => ディレクトリ名)
       $sites = array(
          'old-pine.net' => 'pine',
       );
      
  • 新規作成したディレクトの下にサイトのインストール設定ファイル(settings.php)の作成
    • 例:sites/pine/settings.phpを作成します
    • settings.phpの内容はsites/pine/default.settings.phpのコピーで良いです(サイト新規作成する場合)
  • 追加したドメイン名でサイトをアクセスして、新規サイトができたことを確認します
apache
linux
command

やりたいこと:レンタルサーバーで申請したドメイン名を特定なディレクトリに同期するシンボリックリンク作成したいです

  • レンタルサーバー(例:valueserver)で申請したドメイン名を特定なディレクトに同期するツールが提供されています
  • 同期ツールを利用するのは便利だが、設定が誤ると同期先のディレクトリのファイルがすべて削除されてします危険があります
  • 特に、この操作がよく行うことではなく、誤って設定する確率は実は高そうです(実際に設定を誤って、同期先のファイルが消されてしまう事項がありました)

安全のため、シンボリックリンク作成コマンドでディレクト同期をしたほうがよいです

  • シンボリックリンク作成:
    • public_htmlディレクトリ(apacheではdocument root)に入ります
    • コマンド: ln -s [ディレクト名] [ドメイン名] (例:ln -s drupal7 old-pine.net)
    • コマンド: ls -l で生成したシンボリックリンクを確認します(例: old-pine.net -> pine)
  • シンボリックリンクの削除
    • コマンド:unlink [ドメイン名] (例:unlink old-pine.net)
    • コマンド:ls -l でドメイン名の同期先が消えたことを確認します

安全のため、コマンド(rm)でシンボリックリンクを削除しないこと

  • シンボリックリンクを削除するのはコマンド(rm)できますが、誤って指定すると、同期先のディレクトリの内容を削除していまう危険があります
  • シンボリックリンクを削除するには、コマンド(unlink)を使用すべきです
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
drupal
development
module usage

エラー:モジュール(Twitter)をバージョンアップしてフロントページに開くと「EntityFieldQueryException」が発生

  • モジュール(Twitter)のバージョン:7.x-5.11 ⇒ 7.x-6.2 にアップデートしました(新モジュールから旧モジュールを上書き)
  • フロントページを開いてみたらエラーが発生し:
    EntityFieldQueryException: エンティティー <em class="placeholder">twitter_account</em> にはベーステーブルがありません。 EntityFieldQuery->propertyQuery() (/virtual/drills/public_html/drupal7/includes/entity.inc ファイル 1271行).
  • 画面にエラーしか表示されていないです

原因:Twitter7.x-5.11⇒7.x-6.2にアップデートする場合DBのテーブルが追加されたので、DB更新が必要

  • 原因は比較的に単純的で、Twitter7.x-6.2(7.x-6.0以上になるとデータ構造が変わった)が7.x-5.11よりデータテーブルが追加されました
  • 管理者権限でupdate.phpを実行してデータテーブルを追加します
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
customization
development
module usage

やりたいこと:一つDrupalのソースで複数のサイト(複数のドメイン)を構築したいです

  • Drupalを用いて複数のサイト(ドメイン)を構築する場合、一つサイト(ドメイン)ごとに一つのDrupalソースで構築することがもちろん問題はありません
  • Drupalソースが分散すると、バージョンアップ、バグ管理などの作業が大変になります
  • 当然一つのDrupalソースの元で複数のサイト(ドメイン)の構築が必要となります
    • 一ドメイン ⇒ Drupalソース ⇒ 共有DB
    • 一ドメイン ⇒ Drupalソース ⇒ 独立DB
  • Drupalでは複数のサイト(ドメイン)への対応をしています

sitesディレクトリの下にドメインごとの子ディレクトリを作成してマルティサイトを構築します

  • 複数のドメイン名をDrupalのルートディレクトリに同期します(例:シンボリックリンクでドメイン名をディレクトリと同期します)
    • 例: old-pine.net をDrupalのルートディレクトリにシンボリックリンクで同期します
  • Drupalのルートディレクトリの下に sites ディレクトリがあります。sitesの下に各メイン名に同期したいディレクトリを作成します
    • 例:sites/pine を作成します
  • sites/sites.phpファイルでドメイン名をディレクトと同期設定を行います
    • 例: 'old-pine.net' => 'pine'  (書き方: ドメイン名 => ディレクトリ名)
       $sites = array(
          'old-pine.net' => 'pine',
       );
      
  • 新規作成したディレクトの下にサイトのインストール設定ファイル(settings.php)の作成
    • 例:sites/pine/settings.phpを作成します
    • settings.phpの内容はsites/pine/default.settings.phpのコピーで良いです(サイト新規作成する場合)
  • 追加したドメイン名でサイトをアクセスして、新規サイトができたことを確認します
apache
linux
command

やりたいこと:レンタルサーバーで申請したドメイン名を特定なディレクトリに同期するシンボリックリンク作成したいです

  • レンタルサーバー(例:valueserver)で申請したドメイン名を特定なディレクトに同期するツールが提供されています
  • 同期ツールを利用するのは便利だが、設定が誤ると同期先のディレクトリのファイルがすべて削除されてします危険があります
  • 特に、この操作がよく行うことではなく、誤って設定する確率は実は高そうです(実際に設定を誤って、同期先のファイルが消されてしまう事項がありました)

安全のため、シンボリックリンク作成コマンドでディレクト同期をしたほうがよいです

  • シンボリックリンク作成:
    • public_htmlディレクトリ(apacheではdocument root)に入ります
    • コマンド: ln -s [ディレクト名] [ドメイン名] (例:ln -s drupal7 old-pine.net)
    • コマンド: ls -l で生成したシンボリックリンクを確認します(例: old-pine.net -> pine)
  • シンボリックリンクの削除
    • コマンド:unlink [ドメイン名] (例:unlink old-pine.net)
    • コマンド:ls -l でドメイン名の同期先が消えたことを確認します

安全のため、コマンド(rm)でシンボリックリンクを削除しないこと

  • シンボリックリンクを削除するのはコマンド(rm)できますが、誤って指定すると、同期先のディレクトリの内容を削除していまう危険があります
  • シンボリックリンクを削除するには、コマンド(unlink)を使用すべきです
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
drupal
development
module usage

エラー:モジュール(Twitter)をバージョンアップしてフロントページに開くと「EntityFieldQueryException」が発生

  • モジュール(Twitter)のバージョン:7.x-5.11 ⇒ 7.x-6.2 にアップデートしました(新モジュールから旧モジュールを上書き)
  • フロントページを開いてみたらエラーが発生し:
    EntityFieldQueryException: エンティティー <em class="placeholder">twitter_account</em> にはベーステーブルがありません。 EntityFieldQuery->propertyQuery() (/virtual/drills/public_html/drupal7/includes/entity.inc ファイル 1271行).
  • 画面にエラーしか表示されていないです

原因:Twitter7.x-5.11⇒7.x-6.2にアップデートする場合DBのテーブルが追加されたので、DB更新が必要

  • 原因は比較的に単純的で、Twitter7.x-6.2(7.x-6.0以上になるとデータ構造が変わった)が7.x-5.11よりデータテーブルが追加されました
  • 管理者権限でupdate.phpを実行してデータテーブルを追加します
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
customization
development
module usage

やりたいこと:一つDrupalのソースで複数のサイト(複数のドメイン)を構築したいです

  • Drupalを用いて複数のサイト(ドメイン)を構築する場合、一つサイト(ドメイン)ごとに一つのDrupalソースで構築することがもちろん問題はありません
  • Drupalソースが分散すると、バージョンアップ、バグ管理などの作業が大変になります
  • 当然一つのDrupalソースの元で複数のサイト(ドメイン)の構築が必要となります
    • 一ドメイン ⇒ Drupalソース ⇒ 共有DB
    • 一ドメイン ⇒ Drupalソース ⇒ 独立DB
  • Drupalでは複数のサイト(ドメイン)への対応をしています

sitesディレクトリの下にドメインごとの子ディレクトリを作成してマルティサイトを構築します

  • 複数のドメイン名をDrupalのルートディレクトリに同期します(例:シンボリックリンクでドメイン名をディレクトリと同期します)
    • 例: old-pine.net をDrupalのルートディレクトリにシンボリックリンクで同期します
  • Drupalのルートディレクトリの下に sites ディレクトリがあります。sitesの下に各メイン名に同期したいディレクトリを作成します
    • 例:sites/pine を作成します
  • sites/sites.phpファイルでドメイン名をディレクトと同期設定を行います
    • 例: 'old-pine.net' => 'pine'  (書き方: ドメイン名 => ディレクトリ名)
       $sites = array(
          'old-pine.net' => 'pine',
       );
      
  • 新規作成したディレクトの下にサイトのインストール設定ファイル(settings.php)の作成
    • 例:sites/pine/settings.phpを作成します
    • settings.phpの内容はsites/pine/default.settings.phpのコピーで良いです(サイト新規作成する場合)
  • 追加したドメイン名でサイトをアクセスして、新規サイトができたことを確認します
apache
linux
command

やりたいこと:レンタルサーバーで申請したドメイン名を特定なディレクトリに同期するシンボリックリンク作成したいです

  • レンタルサーバー(例:valueserver)で申請したドメイン名を特定なディレクトに同期するツールが提供されています
  • 同期ツールを利用するのは便利だが、設定が誤ると同期先のディレクトリのファイルがすべて削除されてします危険があります
  • 特に、この操作がよく行うことではなく、誤って設定する確率は実は高そうです(実際に設定を誤って、同期先のファイルが消されてしまう事項がありました)

安全のため、シンボリックリンク作成コマンドでディレクト同期をしたほうがよいです

  • シンボリックリンク作成:
    • public_htmlディレクトリ(apacheではdocument root)に入ります
    • コマンド: ln -s [ディレクト名] [ドメイン名] (例:ln -s drupal7 old-pine.net)
    • コマンド: ls -l で生成したシンボリックリンクを確認します(例: old-pine.net -> pine)
  • シンボリックリンクの削除
    • コマンド:unlink [ドメイン名] (例:unlink old-pine.net)
    • コマンド:ls -l でドメイン名の同期先が消えたことを確認します

安全のため、コマンド(rm)でシンボリックリンクを削除しないこと

  • シンボリックリンクを削除するのはコマンド(rm)できますが、誤って指定すると、同期先のディレクトリの内容を削除していまう危険があります
  • シンボリックリンクを削除するには、コマンド(unlink)を使用すべきです
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
drupal
development
module usage

エラー:モジュール(Twitter)をバージョンアップしてフロントページに開くと「EntityFieldQueryException」が発生

  • モジュール(Twitter)のバージョン:7.x-5.11 ⇒ 7.x-6.2 にアップデートしました(新モジュールから旧モジュールを上書き)
  • フロントページを開いてみたらエラーが発生し:
    EntityFieldQueryException: エンティティー <em class="placeholder">twitter_account</em> にはベーステーブルがありません。 EntityFieldQuery->propertyQuery() (/virtual/drills/public_html/drupal7/includes/entity.inc ファイル 1271行).
  • 画面にエラーしか表示されていないです

原因:Twitter7.x-5.11⇒7.x-6.2にアップデートする場合DBのテーブルが追加されたので、DB更新が必要

  • 原因は比較的に単純的で、Twitter7.x-6.2(7.x-6.0以上になるとデータ構造が変わった)が7.x-5.11よりデータテーブルが追加されました
  • 管理者権限でupdate.phpを実行してデータテーブルを追加します
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
customization
development
module usage

やりたいこと:一つDrupalのソースで複数のサイト(複数のドメイン)を構築したいです

  • Drupalを用いて複数のサイト(ドメイン)を構築する場合、一つサイト(ドメイン)ごとに一つのDrupalソースで構築することがもちろん問題はありません
  • Drupalソースが分散すると、バージョンアップ、バグ管理などの作業が大変になります
  • 当然一つのDrupalソースの元で複数のサイト(ドメイン)の構築が必要となります
    • 一ドメイン ⇒ Drupalソース ⇒ 共有DB
    • 一ドメイン ⇒ Drupalソース ⇒ 独立DB
  • Drupalでは複数のサイト(ドメイン)への対応をしています

sitesディレクトリの下にドメインごとの子ディレクトリを作成してマルティサイトを構築します

  • 複数のドメイン名をDrupalのルートディレクトリに同期します(例:シンボリックリンクでドメイン名をディレクトリと同期します)
    • 例: old-pine.net をDrupalのルートディレクトリにシンボリックリンクで同期します
  • Drupalのルートディレクトリの下に sites ディレクトリがあります。sitesの下に各メイン名に同期したいディレクトリを作成します
    • 例:sites/pine を作成します
  • sites/sites.phpファイルでドメイン名をディレクトと同期設定を行います
    • 例: 'old-pine.net' => 'pine'  (書き方: ドメイン名 => ディレクトリ名)
       $sites = array(
          'old-pine.net' => 'pine',
       );
      
  • 新規作成したディレクトの下にサイトのインストール設定ファイル(settings.php)の作成
    • 例:sites/pine/settings.phpを作成します
    • settings.phpの内容はsites/pine/default.settings.phpのコピーで良いです(サイト新規作成する場合)
  • 追加したドメイン名でサイトをアクセスして、新規サイトができたことを確認します
apache
linux
command

やりたいこと:レンタルサーバーで申請したドメイン名を特定なディレクトリに同期するシンボリックリンク作成したいです

  • レンタルサーバー(例:valueserver)で申請したドメイン名を特定なディレクトに同期するツールが提供されています
  • 同期ツールを利用するのは便利だが、設定が誤ると同期先のディレクトリのファイルがすべて削除されてします危険があります
  • 特に、この操作がよく行うことではなく、誤って設定する確率は実は高そうです(実際に設定を誤って、同期先のファイルが消されてしまう事項がありました)

安全のため、シンボリックリンク作成コマンドでディレクト同期をしたほうがよいです

  • シンボリックリンク作成:
    • public_htmlディレクトリ(apacheではdocument root)に入ります
    • コマンド: ln -s [ディレクト名] [ドメイン名] (例:ln -s drupal7 old-pine.net)
    • コマンド: ls -l で生成したシンボリックリンクを確認します(例: old-pine.net -> pine)
  • シンボリックリンクの削除
    • コマンド:unlink [ドメイン名] (例:unlink old-pine.net)
    • コマンド:ls -l でドメイン名の同期先が消えたことを確認します

安全のため、コマンド(rm)でシンボリックリンクを削除しないこと

  • シンボリックリンクを削除するのはコマンド(rm)できますが、誤って指定すると、同期先のディレクトリの内容を削除していまう危険があります
  • シンボリックリンクを削除するには、コマンド(unlink)を使用すべきです
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
drupal
development
module usage

エラー:モジュール(Twitter)をバージョンアップしてフロントページに開くと「EntityFieldQueryException」が発生

  • モジュール(Twitter)のバージョン:7.x-5.11 ⇒ 7.x-6.2 にアップデートしました(新モジュールから旧モジュールを上書き)
  • フロントページを開いてみたらエラーが発生し:
    EntityFieldQueryException: エンティティー <em class="placeholder">twitter_account</em> にはベーステーブルがありません。 EntityFieldQuery->propertyQuery() (/virtual/drills/public_html/drupal7/includes/entity.inc ファイル 1271行).
  • 画面にエラーしか表示されていないです

原因:Twitter7.x-5.11⇒7.x-6.2にアップデートする場合DBのテーブルが追加されたので、DB更新が必要

  • 原因は比較的に単純的で、Twitter7.x-6.2(7.x-6.0以上になるとデータ構造が変わった)が7.x-5.11よりデータテーブルが追加されました
  • 管理者権限でupdate.phpを実行してデータテーブルを追加します
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
customization
development
module usage

やりたいこと:一つDrupalのソースで複数のサイト(複数のドメイン)を構築したいです

  • Drupalを用いて複数のサイト(ドメイン)を構築する場合、一つサイト(ドメイン)ごとに一つのDrupalソースで構築することがもちろん問題はありません
  • Drupalソースが分散すると、バージョンアップ、バグ管理などの作業が大変になります
  • 当然一つのDrupalソースの元で複数のサイト(ドメイン)の構築が必要となります
    • 一ドメイン ⇒ Drupalソース ⇒ 共有DB
    • 一ドメイン ⇒ Drupalソース ⇒ 独立DB
  • Drupalでは複数のサイト(ドメイン)への対応をしています

sitesディレクトリの下にドメインごとの子ディレクトリを作成してマルティサイトを構築します

  • 複数のドメイン名をDrupalのルートディレクトリに同期します(例:シンボリックリンクでドメイン名をディレクトリと同期します)
    • 例: old-pine.net をDrupalのルートディレクトリにシンボリックリンクで同期します
  • Drupalのルートディレクトリの下に sites ディレクトリがあります。sitesの下に各メイン名に同期したいディレクトリを作成します
    • 例:sites/pine を作成します
  • sites/sites.phpファイルでドメイン名をディレクトと同期設定を行います
    • 例: 'old-pine.net' => 'pine'  (書き方: ドメイン名 => ディレクトリ名)
       $sites = array(
          'old-pine.net' => 'pine',
       );
      
  • 新規作成したディレクトの下にサイトのインストール設定ファイル(settings.php)の作成
    • 例:sites/pine/settings.phpを作成します
    • settings.phpの内容はsites/pine/default.settings.phpのコピーで良いです(サイト新規作成する場合)
  • 追加したドメイン名でサイトをアクセスして、新規サイトができたことを確認します
apache
linux
command

やりたいこと:レンタルサーバーで申請したドメイン名を特定なディレクトリに同期するシンボリックリンク作成したいです

  • レンタルサーバー(例:valueserver)で申請したドメイン名を特定なディレクトに同期するツールが提供されています
  • 同期ツールを利用するのは便利だが、設定が誤ると同期先のディレクトリのファイルがすべて削除されてします危険があります
  • 特に、この操作がよく行うことではなく、誤って設定する確率は実は高そうです(実際に設定を誤って、同期先のファイルが消されてしまう事項がありました)

安全のため、シンボリックリンク作成コマンドでディレクト同期をしたほうがよいです

  • シンボリックリンク作成:
    • public_htmlディレクトリ(apacheではdocument root)に入ります
    • コマンド: ln -s [ディレクト名] [ドメイン名] (例:ln -s drupal7 old-pine.net)
    • コマンド: ls -l で生成したシンボリックリンクを確認します(例: old-pine.net -> pine)
  • シンボリックリンクの削除
    • コマンド:unlink [ドメイン名] (例:unlink old-pine.net)
    • コマンド:ls -l でドメイン名の同期先が消えたことを確認します

安全のため、コマンド(rm)でシンボリックリンクを削除しないこと

  • シンボリックリンクを削除するのはコマンド(rm)できますが、誤って指定すると、同期先のディレクトリの内容を削除していまう危険があります
  • シンボリックリンクを削除するには、コマンド(unlink)を使用すべきです
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
drupal
development
module usage

エラー:モジュール(Twitter)をバージョンアップしてフロントページに開くと「EntityFieldQueryException」が発生

  • モジュール(Twitter)のバージョン:7.x-5.11 ⇒ 7.x-6.2 にアップデートしました(新モジュールから旧モジュールを上書き)
  • フロントページを開いてみたらエラーが発生し:
    EntityFieldQueryException: エンティティー <em class="placeholder">twitter_account</em> にはベーステーブルがありません。 EntityFieldQuery->propertyQuery() (/virtual/drills/public_html/drupal7/includes/entity.inc ファイル 1271行).
  • 画面にエラーしか表示されていないです

原因:Twitter7.x-5.11⇒7.x-6.2にアップデートする場合DBのテーブルが追加されたので、DB更新が必要

  • 原因は比較的に単純的で、Twitter7.x-6.2(7.x-6.0以上になるとデータ構造が変わった)が7.x-5.11よりデータテーブルが追加されました
  • 管理者権限でupdate.phpを実行してデータテーブルを追加します
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
customization
development
module usage

やりたいこと:一つDrupalのソースで複数のサイト(複数のドメイン)を構築したいです

  • Drupalを用いて複数のサイト(ドメイン)を構築する場合、一つサイト(ドメイン)ごとに一つのDrupalソースで構築することがもちろん問題はありません
  • Drupalソースが分散すると、バージョンアップ、バグ管理などの作業が大変になります
  • 当然一つのDrupalソースの元で複数のサイト(ドメイン)の構築が必要となります
    • 一ドメイン ⇒ Drupalソース ⇒ 共有DB
    • 一ドメイン ⇒ Drupalソース ⇒ 独立DB
  • Drupalでは複数のサイト(ドメイン)への対応をしています

sitesディレクトリの下にドメインごとの子ディレクトリを作成してマルティサイトを構築します

  • 複数のドメイン名をDrupalのルートディレクトリに同期します(例:シンボリックリンクでドメイン名をディレクトリと同期します)
    • 例: old-pine.net をDrupalのルートディレクトリにシンボリックリンクで同期します
  • Drupalのルートディレクトリの下に sites ディレクトリがあります。sitesの下に各メイン名に同期したいディレクトリを作成します
    • 例:sites/pine を作成します
  • sites/sites.phpファイルでドメイン名をディレクトと同期設定を行います
    • 例: 'old-pine.net' => 'pine'  (書き方: ドメイン名 => ディレクトリ名)
       $sites = array(
          'old-pine.net' => 'pine',
       );
      
  • 新規作成したディレクトの下にサイトのインストール設定ファイル(settings.php)の作成
    • 例:sites/pine/settings.phpを作成します
    • settings.phpの内容はsites/pine/default.settings.phpのコピーで良いです(サイト新規作成する場合)
  • 追加したドメイン名でサイトをアクセスして、新規サイトができたことを確認します
apache
linux
command

やりたいこと:レンタルサーバーで申請したドメイン名を特定なディレクトリに同期するシンボリックリンク作成したいです

  • レンタルサーバー(例:valueserver)で申請したドメイン名を特定なディレクトに同期するツールが提供されています
  • 同期ツールを利用するのは便利だが、設定が誤ると同期先のディレクトリのファイルがすべて削除されてします危険があります
  • 特に、この操作がよく行うことではなく、誤って設定する確率は実は高そうです(実際に設定を誤って、同期先のファイルが消されてしまう事項がありました)

安全のため、シンボリックリンク作成コマンドでディレクト同期をしたほうがよいです

  • シンボリックリンク作成:
    • public_htmlディレクトリ(apacheではdocument root)に入ります
    • コマンド: ln -s [ディレクト名] [ドメイン名] (例:ln -s drupal7 old-pine.net)
    • コマンド: ls -l で生成したシンボリックリンクを確認します(例: old-pine.net -> pine)
  • シンボリックリンクの削除
    • コマンド:unlink [ドメイン名] (例:unlink old-pine.net)
    • コマンド:ls -l でドメイン名の同期先が消えたことを確認します

安全のため、コマンド(rm)でシンボリックリンクを削除しないこと

  • シンボリックリンクを削除するのはコマンド(rm)できますが、誤って指定すると、同期先のディレクトリの内容を削除していまう危険があります
  • シンボリックリンクを削除するには、コマンド(unlink)を使用すべきです
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
drupal
development
module usage

エラー:モジュール(Twitter)をバージョンアップしてフロントページに開くと「EntityFieldQueryException」が発生

  • モジュール(Twitter)のバージョン:7.x-5.11 ⇒ 7.x-6.2 にアップデートしました(新モジュールから旧モジュールを上書き)
  • フロントページを開いてみたらエラーが発生し:
    EntityFieldQueryException: エンティティー <em class="placeholder">twitter_account</em> にはベーステーブルがありません。 EntityFieldQuery->propertyQuery() (/virtual/drills/public_html/drupal7/includes/entity.inc ファイル 1271行).
  • 画面にエラーしか表示されていないです

原因:Twitter7.x-5.11⇒7.x-6.2にアップデートする場合DBのテーブルが追加されたので、DB更新が必要

  • 原因は比較的に単純的で、Twitter7.x-6.2(7.x-6.0以上になるとデータ構造が変わった)が7.x-5.11よりデータテーブルが追加されました
  • 管理者権限でupdate.phpを実行してデータテーブルを追加します
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
customization
development
module usage

やりたいこと:一つDrupalのソースで複数のサイト(複数のドメイン)を構築したいです

  • Drupalを用いて複数のサイト(ドメイン)を構築する場合、一つサイト(ドメイン)ごとに一つのDrupalソースで構築することがもちろん問題はありません
  • Drupalソースが分散すると、バージョンアップ、バグ管理などの作業が大変になります
  • 当然一つのDrupalソースの元で複数のサイト(ドメイン)の構築が必要となります
    • 一ドメイン ⇒ Drupalソース ⇒ 共有DB
    • 一ドメイン ⇒ Drupalソース ⇒ 独立DB
  • Drupalでは複数のサイト(ドメイン)への対応をしています

sitesディレクトリの下にドメインごとの子ディレクトリを作成してマルティサイトを構築します

  • 複数のドメイン名をDrupalのルートディレクトリに同期します(例:シンボリックリンクでドメイン名をディレクトリと同期します)
    • 例: old-pine.net をDrupalのルートディレクトリにシンボリックリンクで同期します
  • Drupalのルートディレクトリの下に sites ディレクトリがあります。sitesの下に各メイン名に同期したいディレクトリを作成します
    • 例:sites/pine を作成します
  • sites/sites.phpファイルでドメイン名をディレクトと同期設定を行います
    • 例: 'old-pine.net' => 'pine'  (書き方: ドメイン名 => ディレクトリ名)
       $sites = array(
          'old-pine.net' => 'pine',
       );
      
  • 新規作成したディレクトの下にサイトのインストール設定ファイル(settings.php)の作成
    • 例:sites/pine/settings.phpを作成します
    • settings.phpの内容はsites/pine/default.settings.phpのコピーで良いです(サイト新規作成する場合)
  • 追加したドメイン名でサイトをアクセスして、新規サイトができたことを確認します
apache
linux
command

やりたいこと:レンタルサーバーで申請したドメイン名を特定なディレクトリに同期するシンボリックリンク作成したいです

  • レンタルサーバー(例:valueserver)で申請したドメイン名を特定なディレクトに同期するツールが提供されています
  • 同期ツールを利用するのは便利だが、設定が誤ると同期先のディレクトリのファイルがすべて削除されてします危険があります
  • 特に、この操作がよく行うことではなく、誤って設定する確率は実は高そうです(実際に設定を誤って、同期先のファイルが消されてしまう事項がありました)

安全のため、シンボリックリンク作成コマンドでディレクト同期をしたほうがよいです

  • シンボリックリンク作成:
    • public_htmlディレクトリ(apacheではdocument root)に入ります
    • コマンド: ln -s [ディレクト名] [ドメイン名] (例:ln -s drupal7 old-pine.net)
    • コマンド: ls -l で生成したシンボリックリンクを確認します(例: old-pine.net -> pine)
  • シンボリックリンクの削除
    • コマンド:unlink [ドメイン名] (例:unlink old-pine.net)
    • コマンド:ls -l でドメイン名の同期先が消えたことを確認します

安全のため、コマンド(rm)でシンボリックリンクを削除しないこと

  • シンボリックリンクを削除するのはコマンド(rm)できますが、誤って指定すると、同期先のディレクトリの内容を削除していまう危険があります
  • シンボリックリンクを削除するには、コマンド(unlink)を使用すべきです
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
drupal
development
module usage

エラー:モジュール(Twitter)をバージョンアップしてフロントページに開くと「EntityFieldQueryException」が発生

  • モジュール(Twitter)のバージョン:7.x-5.11 ⇒ 7.x-6.2 にアップデートしました(新モジュールから旧モジュールを上書き)
  • フロントページを開いてみたらエラーが発生し:
    EntityFieldQueryException: エンティティー <em class="placeholder">twitter_account</em> にはベーステーブルがありません。 EntityFieldQuery->propertyQuery() (/virtual/drills/public_html/drupal7/includes/entity.inc ファイル 1271行).
  • 画面にエラーしか表示されていないです

原因:Twitter7.x-5.11⇒7.x-6.2にアップデートする場合DBのテーブルが追加されたので、DB更新が必要

  • 原因は比較的に単純的で、Twitter7.x-6.2(7.x-6.0以上になるとデータ構造が変わった)が7.x-5.11よりデータテーブルが追加されました
  • 管理者権限でupdate.phpを実行してデータテーブルを追加します
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
customization
development
module usage

やりたいこと:一つDrupalのソースで複数のサイト(複数のドメイン)を構築したいです

  • Drupalを用いて複数のサイト(ドメイン)を構築する場合、一つサイト(ドメイン)ごとに一つのDrupalソースで構築することがもちろん問題はありません
  • Drupalソースが分散すると、バージョンアップ、バグ管理などの作業が大変になります
  • 当然一つのDrupalソースの元で複数のサイト(ドメイン)の構築が必要となります
    • 一ドメイン ⇒ Drupalソース ⇒ 共有DB
    • 一ドメイン ⇒ Drupalソース ⇒ 独立DB
  • Drupalでは複数のサイト(ドメイン)への対応をしています

sitesディレクトリの下にドメインごとの子ディレクトリを作成してマルティサイトを構築します

  • 複数のドメイン名をDrupalのルートディレクトリに同期します(例:シンボリックリンクでドメイン名をディレクトリと同期します)
    • 例: old-pine.net をDrupalのルートディレクトリにシンボリックリンクで同期します
  • Drupalのルートディレクトリの下に sites ディレクトリがあります。sitesの下に各メイン名に同期したいディレクトリを作成します
    • 例:sites/pine を作成します
  • sites/sites.phpファイルでドメイン名をディレクトと同期設定を行います
    • 例: 'old-pine.net' => 'pine'  (書き方: ドメイン名 => ディレクトリ名)
       $sites = array(
          'old-pine.net' => 'pine',
       );
      
  • 新規作成したディレクトの下にサイトのインストール設定ファイル(settings.php)の作成
    • 例:sites/pine/settings.phpを作成します
    • settings.phpの内容はsites/pine/default.settings.phpのコピーで良いです(サイト新規作成する場合)
  • 追加したドメイン名でサイトをアクセスして、新規サイトができたことを確認します
apache
linux
command

やりたいこと:レンタルサーバーで申請したドメイン名を特定なディレクトリに同期するシンボリックリンク作成したいです

  • レンタルサーバー(例:valueserver)で申請したドメイン名を特定なディレクトに同期するツールが提供されています
  • 同期ツールを利用するのは便利だが、設定が誤ると同期先のディレクトリのファイルがすべて削除されてします危険があります
  • 特に、この操作がよく行うことではなく、誤って設定する確率は実は高そうです(実際に設定を誤って、同期先のファイルが消されてしまう事項がありました)

安全のため、シンボリックリンク作成コマンドでディレクト同期をしたほうがよいです

  • シンボリックリンク作成:
    • public_htmlディレクトリ(apacheではdocument root)に入ります
    • コマンド: ln -s [ディレクト名] [ドメイン名] (例:ln -s drupal7 old-pine.net)
    • コマンド: ls -l で生成したシンボリックリンクを確認します(例: old-pine.net -> pine)
  • シンボリックリンクの削除
    • コマンド:unlink [ドメイン名] (例:unlink old-pine.net)
    • コマンド:ls -l でドメイン名の同期先が消えたことを確認します

安全のため、コマンド(rm)でシンボリックリンクを削除しないこと

  • シンボリックリンクを削除するのはコマンド(rm)できますが、誤って指定すると、同期先のディレクトリの内容を削除していまう危険があります
  • シンボリックリンクを削除するには、コマンド(unlink)を使用すべきです
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
drupal
development
module usage

エラー:モジュール(Twitter)をバージョンアップしてフロントページに開くと「EntityFieldQueryException」が発生

  • モジュール(Twitter)のバージョン:7.x-5.11 ⇒ 7.x-6.2 にアップデートしました(新モジュールから旧モジュールを上書き)
  • フロントページを開いてみたらエラーが発生し:
    EntityFieldQueryException: エンティティー <em class="placeholder">twitter_account</em> にはベーステーブルがありません。 EntityFieldQuery->propertyQuery() (/virtual/drills/public_html/drupal7/includes/entity.inc ファイル 1271行).
  • 画面にエラーしか表示されていないです

原因:Twitter7.x-5.11⇒7.x-6.2にアップデートする場合DBのテーブルが追加されたので、DB更新が必要

  • 原因は比較的に単純的で、Twitter7.x-6.2(7.x-6.0以上になるとデータ構造が変わった)が7.x-5.11よりデータテーブルが追加されました
  • 管理者権限でupdate.phpを実行してデータテーブルを追加します
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
customization
development
module usage

やりたいこと:一つDrupalのソースで複数のサイト(複数のドメイン)を構築したいです

  • Drupalを用いて複数のサイト(ドメイン)を構築する場合、一つサイト(ドメイン)ごとに一つのDrupalソースで構築することがもちろん問題はありません
  • Drupalソースが分散すると、バージョンアップ、バグ管理などの作業が大変になります
  • 当然一つのDrupalソースの元で複数のサイト(ドメイン)の構築が必要となります
    • 一ドメイン ⇒ Drupalソース ⇒ 共有DB
    • 一ドメイン ⇒ Drupalソース ⇒ 独立DB
  • Drupalでは複数のサイト(ドメイン)への対応をしています

sitesディレクトリの下にドメインごとの子ディレクトリを作成してマルティサイトを構築します

  • 複数のドメイン名をDrupalのルートディレクトリに同期します(例:シンボリックリンクでドメイン名をディレクトリと同期します)
    • 例: old-pine.net をDrupalのルートディレクトリにシンボリックリンクで同期します
  • Drupalのルートディレクトリの下に sites ディレクトリがあります。sitesの下に各メイン名に同期したいディレクトリを作成します
    • 例:sites/pine を作成します
  • sites/sites.phpファイルでドメイン名をディレクトと同期設定を行います
    • 例: 'old-pine.net' => 'pine'  (書き方: ドメイン名 => ディレクトリ名)
       $sites = array(
          'old-pine.net' => 'pine',
       );
      
  • 新規作成したディレクトの下にサイトのインストール設定ファイル(settings.php)の作成
    • 例:sites/pine/settings.phpを作成します
    • settings.phpの内容はsites/pine/default.settings.phpのコピーで良いです(サイト新規作成する場合)
  • 追加したドメイン名でサイトをアクセスして、新規サイトができたことを確認します
apache
linux
command

やりたいこと:レンタルサーバーで申請したドメイン名を特定なディレクトリに同期するシンボリックリンク作成したいです

  • レンタルサーバー(例:valueserver)で申請したドメイン名を特定なディレクトに同期するツールが提供されています
  • 同期ツールを利用するのは便利だが、設定が誤ると同期先のディレクトリのファイルがすべて削除されてします危険があります
  • 特に、この操作がよく行うことではなく、誤って設定する確率は実は高そうです(実際に設定を誤って、同期先のファイルが消されてしまう事項がありました)

安全のため、シンボリックリンク作成コマンドでディレクト同期をしたほうがよいです

  • シンボリックリンク作成:
    • public_htmlディレクトリ(apacheではdocument root)に入ります
    • コマンド: ln -s [ディレクト名] [ドメイン名] (例:ln -s drupal7 old-pine.net)
    • コマンド: ls -l で生成したシンボリックリンクを確認します(例: old-pine.net -> pine)
  • シンボリックリンクの削除
    • コマンド:unlink [ドメイン名] (例:unlink old-pine.net)
    • コマンド:ls -l でドメイン名の同期先が消えたことを確認します

安全のため、コマンド(rm)でシンボリックリンクを削除しないこと

  • シンボリックリンクを削除するのはコマンド(rm)できますが、誤って指定すると、同期先のディレクトリの内容を削除していまう危険があります
  • シンボリックリンクを削除するには、コマンド(unlink)を使用すべきです
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
drupal
development
module usage

エラー:モジュール(Twitter)をバージョンアップしてフロントページに開くと「EntityFieldQueryException」が発生

  • モジュール(Twitter)のバージョン:7.x-5.11 ⇒ 7.x-6.2 にアップデートしました(新モジュールから旧モジュールを上書き)
  • フロントページを開いてみたらエラーが発生し:
    EntityFieldQueryException: エンティティー <em class="placeholder">twitter_account</em> にはベーステーブルがありません。 EntityFieldQuery->propertyQuery() (/virtual/drills/public_html/drupal7/includes/entity.inc ファイル 1271行).
  • 画面にエラーしか表示されていないです

原因:Twitter7.x-5.11⇒7.x-6.2にアップデートする場合DBのテーブルが追加されたので、DB更新が必要

  • 原因は比較的に単純的で、Twitter7.x-6.2(7.x-6.0以上になるとデータ構造が変わった)が7.x-5.11よりデータテーブルが追加されました
  • 管理者権限でupdate.phpを実行してデータテーブルを追加します
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
customization
development
module usage

やりたいこと:一つDrupalのソースで複数のサイト(複数のドメイン)を構築したいです

  • Drupalを用いて複数のサイト(ドメイン)を構築する場合、一つサイト(ドメイン)ごとに一つのDrupalソースで構築することがもちろん問題はありません
  • Drupalソースが分散すると、バージョンアップ、バグ管理などの作業が大変になります
  • 当然一つのDrupalソースの元で複数のサイト(ドメイン)の構築が必要となります
    • 一ドメイン ⇒ Drupalソース ⇒ 共有DB
    • 一ドメイン ⇒ Drupalソース ⇒ 独立DB
  • Drupalでは複数のサイト(ドメイン)への対応をしています

sitesディレクトリの下にドメインごとの子ディレクトリを作成してマルティサイトを構築します

  • 複数のドメイン名をDrupalのルートディレクトリに同期します(例:シンボリックリンクでドメイン名をディレクトリと同期します)
    • 例: old-pine.net をDrupalのルートディレクトリにシンボリックリンクで同期します
  • Drupalのルートディレクトリの下に sites ディレクトリがあります。sitesの下に各メイン名に同期したいディレクトリを作成します
    • 例:sites/pine を作成します
  • sites/sites.phpファイルでドメイン名をディレクトと同期設定を行います
    • 例: 'old-pine.net' => 'pine'  (書き方: ドメイン名 => ディレクトリ名)
       $sites = array(
          'old-pine.net' => 'pine',
       );
      
  • 新規作成したディレクトの下にサイトのインストール設定ファイル(settings.php)の作成
    • 例:sites/pine/settings.phpを作成します
    • settings.phpの内容はsites/pine/default.settings.phpのコピーで良いです(サイト新規作成する場合)
  • 追加したドメイン名でサイトをアクセスして、新規サイトができたことを確認します
apache
linux
command

やりたいこと:レンタルサーバーで申請したドメイン名を特定なディレクトリに同期するシンボリックリンク作成したいです

  • レンタルサーバー(例:valueserver)で申請したドメイン名を特定なディレクトに同期するツールが提供されています
  • 同期ツールを利用するのは便利だが、設定が誤ると同期先のディレクトリのファイルがすべて削除されてします危険があります
  • 特に、この操作がよく行うことではなく、誤って設定する確率は実は高そうです(実際に設定を誤って、同期先のファイルが消されてしまう事項がありました)

安全のため、シンボリックリンク作成コマンドでディレクト同期をしたほうがよいです

  • シンボリックリンク作成:
    • public_htmlディレクトリ(apacheではdocument root)に入ります
    • コマンド: ln -s [ディレクト名] [ドメイン名] (例:ln -s drupal7 old-pine.net)
    • コマンド: ls -l で生成したシンボリックリンクを確認します(例: old-pine.net -> pine)
  • シンボリックリンクの削除
    • コマンド:unlink [ドメイン名] (例:unlink old-pine.net)
    • コマンド:ls -l でドメイン名の同期先が消えたことを確認します

安全のため、コマンド(rm)でシンボリックリンクを削除しないこと

  • シンボリックリンクを削除するのはコマンド(rm)できますが、誤って指定すると、同期先のディレクトリの内容を削除していまう危険があります
  • シンボリックリンクを削除するには、コマンド(unlink)を使用すべきです
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
drupal
development
module usage

エラー:モジュール(Twitter)をバージョンアップしてフロントページに開くと「EntityFieldQueryException」が発生

  • モジュール(Twitter)のバージョン:7.x-5.11 ⇒ 7.x-6.2 にアップデートしました(新モジュールから旧モジュールを上書き)
  • フロントページを開いてみたらエラーが発生し:
    EntityFieldQueryException: エンティティー <em class="placeholder">twitter_account</em> にはベーステーブルがありません。 EntityFieldQuery->propertyQuery() (/virtual/drills/public_html/drupal7/includes/entity.inc ファイル 1271行).
  • 画面にエラーしか表示されていないです

原因:Twitter7.x-5.11⇒7.x-6.2にアップデートする場合DBのテーブルが追加されたので、DB更新が必要

  • 原因は比較的に単純的で、Twitter7.x-6.2(7.x-6.0以上になるとデータ構造が変わった)が7.x-5.11よりデータテーブルが追加されました
  • 管理者権限でupdate.phpを実行してデータテーブルを追加します
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
customization
development
module usage

やりたいこと:一つDrupalのソースで複数のサイト(複数のドメイン)を構築したいです

  • Drupalを用いて複数のサイト(ドメイン)を構築する場合、一つサイト(ドメイン)ごとに一つのDrupalソースで構築することがもちろん問題はありません
  • Drupalソースが分散すると、バージョンアップ、バグ管理などの作業が大変になります
  • 当然一つのDrupalソースの元で複数のサイト(ドメイン)の構築が必要となります
    • 一ドメイン ⇒ Drupalソース ⇒ 共有DB
    • 一ドメイン ⇒ Drupalソース ⇒ 独立DB
  • Drupalでは複数のサイト(ドメイン)への対応をしています

sitesディレクトリの下にドメインごとの子ディレクトリを作成してマルティサイトを構築します

  • 複数のドメイン名をDrupalのルートディレクトリに同期します(例:シンボリックリンクでドメイン名をディレクトリと同期します)
    • 例: old-pine.net をDrupalのルートディレクトリにシンボリックリンクで同期します
  • Drupalのルートディレクトリの下に sites ディレクトリがあります。sitesの下に各メイン名に同期したいディレクトリを作成します
    • 例:sites/pine を作成します
  • sites/sites.phpファイルでドメイン名をディレクトと同期設定を行います
    • 例: 'old-pine.net' => 'pine'  (書き方: ドメイン名 => ディレクトリ名)
       $sites = array(
          'old-pine.net' => 'pine',
       );
      
  • 新規作成したディレクトの下にサイトのインストール設定ファイル(settings.php)の作成
    • 例:sites/pine/settings.phpを作成します
    • settings.phpの内容はsites/pine/default.settings.phpのコピーで良いです(サイト新規作成する場合)
  • 追加したドメイン名でサイトをアクセスして、新規サイトができたことを確認します
apache
linux
command

やりたいこと:レンタルサーバーで申請したドメイン名を特定なディレクトリに同期するシンボリックリンク作成したいです

  • レンタルサーバー(例:valueserver)で申請したドメイン名を特定なディレクトに同期するツールが提供されています
  • 同期ツールを利用するのは便利だが、設定が誤ると同期先のディレクトリのファイルがすべて削除されてします危険があります
  • 特に、この操作がよく行うことではなく、誤って設定する確率は実は高そうです(実際に設定を誤って、同期先のファイルが消されてしまう事項がありました)

安全のため、シンボリックリンク作成コマンドでディレクト同期をしたほうがよいです

  • シンボリックリンク作成:
    • public_htmlディレクトリ(apacheではdocument root)に入ります
    • コマンド: ln -s [ディレクト名] [ドメイン名] (例:ln -s drupal7 old-pine.net)
    • コマンド: ls -l で生成したシンボリックリンクを確認します(例: old-pine.net -> pine)
  • シンボリックリンクの削除
    • コマンド:unlink [ドメイン名] (例:unlink old-pine.net)
    • コマンド:ls -l でドメイン名の同期先が消えたことを確認します

安全のため、コマンド(rm)でシンボリックリンクを削除しないこと

  • シンボリックリンクを削除するのはコマンド(rm)できますが、誤って指定すると、同期先のディレクトリの内容を削除していまう危険があります
  • シンボリックリンクを削除するには、コマンド(unlink)を使用すべきです
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
drupal
development
module usage

エラー:モジュール(Twitter)をバージョンアップしてフロントページに開くと「EntityFieldQueryException」が発生

  • モジュール(Twitter)のバージョン:7.x-5.11 ⇒ 7.x-6.2 にアップデートしました(新モジュールから旧モジュールを上書き)
  • フロントページを開いてみたらエラーが発生し:
    EntityFieldQueryException: エンティティー <em class="placeholder">twitter_account</em> にはベーステーブルがありません。 EntityFieldQuery->propertyQuery() (/virtual/drills/public_html/drupal7/includes/entity.inc ファイル 1271行).
  • 画面にエラーしか表示されていないです

原因:Twitter7.x-5.11⇒7.x-6.2にアップデートする場合DBのテーブルが追加されたので、DB更新が必要

  • 原因は比較的に単純的で、Twitter7.x-6.2(7.x-6.0以上になるとデータ構造が変わった)が7.x-5.11よりデータテーブルが追加されました
  • 管理者権限でupdate.phpを実行してデータテーブルを追加します
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
customization
development
module usage

やりたいこと:一つDrupalのソースで複数のサイト(複数のドメイン)を構築したいです

  • Drupalを用いて複数のサイト(ドメイン)を構築する場合、一つサイト(ドメイン)ごとに一つのDrupalソースで構築することがもちろん問題はありません
  • Drupalソースが分散すると、バージョンアップ、バグ管理などの作業が大変になります
  • 当然一つのDrupalソースの元で複数のサイト(ドメイン)の構築が必要となります
    • 一ドメイン ⇒ Drupalソース ⇒ 共有DB
    • 一ドメイン ⇒ Drupalソース ⇒ 独立DB
  • Drupalでは複数のサイト(ドメイン)への対応をしています

sitesディレクトリの下にドメインごとの子ディレクトリを作成してマルティサイトを構築します

  • 複数のドメイン名をDrupalのルートディレクトリに同期します(例:シンボリックリンクでドメイン名をディレクトリと同期します)
    • 例: old-pine.net をDrupalのルートディレクトリにシンボリックリンクで同期します
  • Drupalのルートディレクトリの下に sites ディレクトリがあります。sitesの下に各メイン名に同期したいディレクトリを作成します
    • 例:sites/pine を作成します
  • sites/sites.phpファイルでドメイン名をディレクトと同期設定を行います
    • 例: 'old-pine.net' => 'pine'  (書き方: ドメイン名 => ディレクトリ名)
       $sites = array(
          'old-pine.net' => 'pine',
       );
      
  • 新規作成したディレクトの下にサイトのインストール設定ファイル(settings.php)の作成
    • 例:sites/pine/settings.phpを作成します
    • settings.phpの内容はsites/pine/default.settings.phpのコピーで良いです(サイト新規作成する場合)
  • 追加したドメイン名でサイトをアクセスして、新規サイトができたことを確認します
apache
linux
command

やりたいこと:レンタルサーバーで申請したドメイン名を特定なディレクトリに同期するシンボリックリンク作成したいです

  • レンタルサーバー(例:valueserver)で申請したドメイン名を特定なディレクトに同期するツールが提供されています
  • 同期ツールを利用するのは便利だが、設定が誤ると同期先のディレクトリのファイルがすべて削除されてします危険があります
  • 特に、この操作がよく行うことではなく、誤って設定する確率は実は高そうです(実際に設定を誤って、同期先のファイルが消されてしまう事項がありました)

安全のため、シンボリックリンク作成コマンドでディレクト同期をしたほうがよいです

  • シンボリックリンク作成:
    • public_htmlディレクトリ(apacheではdocument root)に入ります
    • コマンド: ln -s [ディレクト名] [ドメイン名] (例:ln -s drupal7 old-pine.net)
    • コマンド: ls -l で生成したシンボリックリンクを確認します(例: old-pine.net -> pine)
  • シンボリックリンクの削除
    • コマンド:unlink [ドメイン名] (例:unlink old-pine.net)
    • コマンド:ls -l でドメイン名の同期先が消えたことを確認します

安全のため、コマンド(rm)でシンボリックリンクを削除しないこと

  • シンボリックリンクを削除するのはコマンド(rm)できますが、誤って指定すると、同期先のディレクトリの内容を削除していまう危険があります
  • シンボリックリンクを削除するには、コマンド(unlink)を使用すべきです
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
drupal
development
module usage

エラー:モジュール(Twitter)をバージョンアップしてフロントページに開くと「EntityFieldQueryException」が発生

  • モジュール(Twitter)のバージョン:7.x-5.11 ⇒ 7.x-6.2 にアップデートしました(新モジュールから旧モジュールを上書き)
  • フロントページを開いてみたらエラーが発生し:
    EntityFieldQueryException: エンティティー <em class="placeholder">twitter_account</em> にはベーステーブルがありません。 EntityFieldQuery->propertyQuery() (/virtual/drills/public_html/drupal7/includes/entity.inc ファイル 1271行).
  • 画面にエラーしか表示されていないです

原因:Twitter7.x-5.11⇒7.x-6.2にアップデートする場合DBのテーブルが追加されたので、DB更新が必要

  • 原因は比較的に単純的で、Twitter7.x-6.2(7.x-6.0以上になるとデータ構造が変わった)が7.x-5.11よりデータテーブルが追加されました
  • 管理者権限でupdate.phpを実行してデータテーブルを追加します
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
customization
development
module usage

やりたいこと:一つDrupalのソースで複数のサイト(複数のドメイン)を構築したいです

  • Drupalを用いて複数のサイト(ドメイン)を構築する場合、一つサイト(ドメイン)ごとに一つのDrupalソースで構築することがもちろん問題はありません
  • Drupalソースが分散すると、バージョンアップ、バグ管理などの作業が大変になります
  • 当然一つのDrupalソースの元で複数のサイト(ドメイン)の構築が必要となります
    • 一ドメイン ⇒ Drupalソース ⇒ 共有DB
    • 一ドメイン ⇒ Drupalソース ⇒ 独立DB
  • Drupalでは複数のサイト(ドメイン)への対応をしています

sitesディレクトリの下にドメインごとの子ディレクトリを作成してマルティサイトを構築します

  • 複数のドメイン名をDrupalのルートディレクトリに同期します(例:シンボリックリンクでドメイン名をディレクトリと同期します)
    • 例: old-pine.net をDrupalのルートディレクトリにシンボリックリンクで同期します
  • Drupalのルートディレクトリの下に sites ディレクトリがあります。sitesの下に各メイン名に同期したいディレクトリを作成します
    • 例:sites/pine を作成します
  • sites/sites.phpファイルでドメイン名をディレクトと同期設定を行います
    • 例: 'old-pine.net' => 'pine'  (書き方: ドメイン名 => ディレクトリ名)
       $sites = array(
          'old-pine.net' => 'pine',
       );
      
  • 新規作成したディレクトの下にサイトのインストール設定ファイル(settings.php)の作成
    • 例:sites/pine/settings.phpを作成します
    • settings.phpの内容はsites/pine/default.settings.phpのコピーで良いです(サイト新規作成する場合)
  • 追加したドメイン名でサイトをアクセスして、新規サイトができたことを確認します
apache
linux
command

やりたいこと:レンタルサーバーで申請したドメイン名を特定なディレクトリに同期するシンボリックリンク作成したいです

  • レンタルサーバー(例:valueserver)で申請したドメイン名を特定なディレクトに同期するツールが提供されています
  • 同期ツールを利用するのは便利だが、設定が誤ると同期先のディレクトリのファイルがすべて削除されてします危険があります
  • 特に、この操作がよく行うことではなく、誤って設定する確率は実は高そうです(実際に設定を誤って、同期先のファイルが消されてしまう事項がありました)

安全のため、シンボリックリンク作成コマンドでディレクト同期をしたほうがよいです

  • シンボリックリンク作成:
    • public_htmlディレクトリ(apacheではdocument root)に入ります
    • コマンド: ln -s [ディレクト名] [ドメイン名] (例:ln -s drupal7 old-pine.net)
    • コマンド: ls -l で生成したシンボリックリンクを確認します(例: old-pine.net -> pine)
  • シンボリックリンクの削除
    • コマンド:unlink [ドメイン名] (例:unlink old-pine.net)
    • コマンド:ls -l でドメイン名の同期先が消えたことを確認します

安全のため、コマンド(rm)でシンボリックリンクを削除しないこと

  • シンボリックリンクを削除するのはコマンド(rm)できますが、誤って指定すると、同期先のディレクトリの内容を削除していまう危険があります
  • シンボリックリンクを削除するには、コマンド(unlink)を使用すべきです
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
drupal
development
module usage

エラー:モジュール(Twitter)をバージョンアップしてフロントページに開くと「EntityFieldQueryException」が発生

  • モジュール(Twitter)のバージョン:7.x-5.11 ⇒ 7.x-6.2 にアップデートしました(新モジュールから旧モジュールを上書き)
  • フロントページを開いてみたらエラーが発生し:
    EntityFieldQueryException: エンティティー <em class="placeholder">twitter_account</em> にはベーステーブルがありません。 EntityFieldQuery->propertyQuery() (/virtual/drills/public_html/drupal7/includes/entity.inc ファイル 1271行).
  • 画面にエラーしか表示されていないです

原因:Twitter7.x-5.11⇒7.x-6.2にアップデートする場合DBのテーブルが追加されたので、DB更新が必要

  • 原因は比較的に単純的で、Twitter7.x-6.2(7.x-6.0以上になるとデータ構造が変わった)が7.x-5.11よりデータテーブルが追加されました
  • 管理者権限でupdate.phpを実行してデータテーブルを追加します
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
customization
development
module usage

やりたいこと:一つDrupalのソースで複数のサイト(複数のドメイン)を構築したいです

  • Drupalを用いて複数のサイト(ドメイン)を構築する場合、一つサイト(ドメイン)ごとに一つのDrupalソースで構築することがもちろん問題はありません
  • Drupalソースが分散すると、バージョンアップ、バグ管理などの作業が大変になります
  • 当然一つのDrupalソースの元で複数のサイト(ドメイン)の構築が必要となります
    • 一ドメイン ⇒ Drupalソース ⇒ 共有DB
    • 一ドメイン ⇒ Drupalソース ⇒ 独立DB
  • Drupalでは複数のサイト(ドメイン)への対応をしています

sitesディレクトリの下にドメインごとの子ディレクトリを作成してマルティサイトを構築します

  • 複数のドメイン名をDrupalのルートディレクトリに同期します(例:シンボリックリンクでドメイン名をディレクトリと同期します)
    • 例: old-pine.net をDrupalのルートディレクトリにシンボリックリンクで同期します
  • Drupalのルートディレクトリの下に sites ディレクトリがあります。sitesの下に各メイン名に同期したいディレクトリを作成します
    • 例:sites/pine を作成します
  • sites/sites.phpファイルでドメイン名をディレクトと同期設定を行います
    • 例: 'old-pine.net' => 'pine'  (書き方: ドメイン名 => ディレクトリ名)
       $sites = array(
          'old-pine.net' => 'pine',
       );
      
  • 新規作成したディレクトの下にサイトのインストール設定ファイル(settings.php)の作成
    • 例:sites/pine/settings.phpを作成します
    • settings.phpの内容はsites/pine/default.settings.phpのコピーで良いです(サイト新規作成する場合)
  • 追加したドメイン名でサイトをアクセスして、新規サイトができたことを確認します
apache
linux
command

やりたいこと:レンタルサーバーで申請したドメイン名を特定なディレクトリに同期するシンボリックリンク作成したいです

  • レンタルサーバー(例:valueserver)で申請したドメイン名を特定なディレクトに同期するツールが提供されています
  • 同期ツールを利用するのは便利だが、設定が誤ると同期先のディレクトリのファイルがすべて削除されてします危険があります
  • 特に、この操作がよく行うことではなく、誤って設定する確率は実は高そうです(実際に設定を誤って、同期先のファイルが消されてしまう事項がありました)

安全のため、シンボリックリンク作成コマンドでディレクト同期をしたほうがよいです

  • シンボリックリンク作成:
    • public_htmlディレクトリ(apacheではdocument root)に入ります
    • コマンド: ln -s [ディレクト名] [ドメイン名] (例:ln -s drupal7 old-pine.net)
    • コマンド: ls -l で生成したシンボリックリンクを確認します(例: old-pine.net -> pine)
  • シンボリックリンクの削除
    • コマンド:unlink [ドメイン名] (例:unlink old-pine.net)
    • コマンド:ls -l でドメイン名の同期先が消えたことを確認します

安全のため、コマンド(rm)でシンボリックリンクを削除しないこと

  • シンボリックリンクを削除するのはコマンド(rm)できますが、誤って指定すると、同期先のディレクトリの内容を削除していまう危険があります
  • シンボリックリンクを削除するには、コマンド(unlink)を使用すべきです
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
drupal
development
module usage

エラー:モジュール(Twitter)をバージョンアップしてフロントページに開くと「EntityFieldQueryException」が発生

  • モジュール(Twitter)のバージョン:7.x-5.11 ⇒ 7.x-6.2 にアップデートしました(新モジュールから旧モジュールを上書き)
  • フロントページを開いてみたらエラーが発生し:
    EntityFieldQueryException: エンティティー <em class="placeholder">twitter_account</em> にはベーステーブルがありません。 EntityFieldQuery->propertyQuery() (/virtual/drills/public_html/drupal7/includes/entity.inc ファイル 1271行).
  • 画面にエラーしか表示されていないです

原因:Twitter7.x-5.11⇒7.x-6.2にアップデートする場合DBのテーブルが追加されたので、DB更新が必要

  • 原因は比較的に単純的で、Twitter7.x-6.2(7.x-6.0以上になるとデータ構造が変わった)が7.x-5.11よりデータテーブルが追加されました
  • 管理者権限でupdate.phpを実行してデータテーブルを追加します
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
customization
development
module usage

やりたいこと:一つDrupalのソースで複数のサイト(複数のドメイン)を構築したいです

  • Drupalを用いて複数のサイト(ドメイン)を構築する場合、一つサイト(ドメイン)ごとに一つのDrupalソースで構築することがもちろん問題はありません
  • Drupalソースが分散すると、バージョンアップ、バグ管理などの作業が大変になります
  • 当然一つのDrupalソースの元で複数のサイト(ドメイン)の構築が必要となります
    • 一ドメイン ⇒ Drupalソース ⇒ 共有DB
    • 一ドメイン ⇒ Drupalソース ⇒ 独立DB
  • Drupalでは複数のサイト(ドメイン)への対応をしています

sitesディレクトリの下にドメインごとの子ディレクトリを作成してマルティサイトを構築します

  • 複数のドメイン名をDrupalのルートディレクトリに同期します(例:シンボリックリンクでドメイン名をディレクトリと同期します)
    • 例: old-pine.net をDrupalのルートディレクトリにシンボリックリンクで同期します
  • Drupalのルートディレクトリの下に sites ディレクトリがあります。sitesの下に各メイン名に同期したいディレクトリを作成します
    • 例:sites/pine を作成します
  • sites/sites.phpファイルでドメイン名をディレクトと同期設定を行います
    • 例: 'old-pine.net' => 'pine'  (書き方: ドメイン名 => ディレクトリ名)
       $sites = array(
          'old-pine.net' => 'pine',
       );
      
  • 新規作成したディレクトの下にサイトのインストール設定ファイル(settings.php)の作成
    • 例:sites/pine/settings.phpを作成します
    • settings.phpの内容はsites/pine/default.settings.phpのコピーで良いです(サイト新規作成する場合)
  • 追加したドメイン名でサイトをアクセスして、新規サイトができたことを確認します
apache
linux
command

やりたいこと:レンタルサーバーで申請したドメイン名を特定なディレクトリに同期するシンボリックリンク作成したいです

  • レンタルサーバー(例:valueserver)で申請したドメイン名を特定なディレクトに同期するツールが提供されています
  • 同期ツールを利用するのは便利だが、設定が誤ると同期先のディレクトリのファイルがすべて削除されてします危険があります
  • 特に、この操作がよく行うことではなく、誤って設定する確率は実は高そうです(実際に設定を誤って、同期先のファイルが消されてしまう事項がありました)

安全のため、シンボリックリンク作成コマンドでディレクト同期をしたほうがよいです

  • シンボリックリンク作成:
    • public_htmlディレクトリ(apacheではdocument root)に入ります
    • コマンド: ln -s [ディレクト名] [ドメイン名] (例:ln -s drupal7 old-pine.net)
    • コマンド: ls -l で生成したシンボリックリンクを確認します(例: old-pine.net -> pine)
  • シンボリックリンクの削除
    • コマンド:unlink [ドメイン名] (例:unlink old-pine.net)
    • コマンド:ls -l でドメイン名の同期先が消えたことを確認します

安全のため、コマンド(rm)でシンボリックリンクを削除しないこと

  • シンボリックリンクを削除するのはコマンド(rm)できますが、誤って指定すると、同期先のディレクトリの内容を削除していまう危険があります
  • シンボリックリンクを削除するには、コマンド(unlink)を使用すべきです
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
drupal
development
module usage

エラー:モジュール(Twitter)をバージョンアップしてフロントページに開くと「EntityFieldQueryException」が発生

  • モジュール(Twitter)のバージョン:7.x-5.11 ⇒ 7.x-6.2 にアップデートしました(新モジュールから旧モジュールを上書き)
  • フロントページを開いてみたらエラーが発生し:
    EntityFieldQueryException: エンティティー <em class="placeholder">twitter_account</em> にはベーステーブルがありません。 EntityFieldQuery->propertyQuery() (/virtual/drills/public_html/drupal7/includes/entity.inc ファイル 1271行).
  • 画面にエラーしか表示されていないです

原因:Twitter7.x-5.11⇒7.x-6.2にアップデートする場合DBのテーブルが追加されたので、DB更新が必要

  • 原因は比較的に単純的で、Twitter7.x-6.2(7.x-6.0以上になるとデータ構造が変わった)が7.x-5.11よりデータテーブルが追加されました
  • 管理者権限でupdate.phpを実行してデータテーブルを追加します
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
customization
development
module usage

やりたいこと:一つDrupalのソースで複数のサイト(複数のドメイン)を構築したいです

  • Drupalを用いて複数のサイト(ドメイン)を構築する場合、一つサイト(ドメイン)ごとに一つのDrupalソースで構築することがもちろん問題はありません
  • Drupalソースが分散すると、バージョンアップ、バグ管理などの作業が大変になります
  • 当然一つのDrupalソースの元で複数のサイト(ドメイン)の構築が必要となります
    • 一ドメイン ⇒ Drupalソース ⇒ 共有DB
    • 一ドメイン ⇒ Drupalソース ⇒ 独立DB
  • Drupalでは複数のサイト(ドメイン)への対応をしています

sitesディレクトリの下にドメインごとの子ディレクトリを作成してマルティサイトを構築します

  • 複数のドメイン名をDrupalのルートディレクトリに同期します(例:シンボリックリンクでドメイン名をディレクトリと同期します)
    • 例: old-pine.net をDrupalのルートディレクトリにシンボリックリンクで同期します
  • Drupalのルートディレクトリの下に sites ディレクトリがあります。sitesの下に各メイン名に同期したいディレクトリを作成します
    • 例:sites/pine を作成します
  • sites/sites.phpファイルでドメイン名をディレクトと同期設定を行います
    • 例: 'old-pine.net' => 'pine'  (書き方: ドメイン名 => ディレクトリ名)
       $sites = array(
          'old-pine.net' => 'pine',
       );
      
  • 新規作成したディレクトの下にサイトのインストール設定ファイル(settings.php)の作成
    • 例:sites/pine/settings.phpを作成します
    • settings.phpの内容はsites/pine/default.settings.phpのコピーで良いです(サイト新規作成する場合)
  • 追加したドメイン名でサイトをアクセスして、新規サイトができたことを確認します
apache
linux
command

やりたいこと:レンタルサーバーで申請したドメイン名を特定なディレクトリに同期するシンボリックリンク作成したいです

  • レンタルサーバー(例:valueserver)で申請したドメイン名を特定なディレクトに同期するツールが提供されています
  • 同期ツールを利用するのは便利だが、設定が誤ると同期先のディレクトリのファイルがすべて削除されてします危険があります
  • 特に、この操作がよく行うことではなく、誤って設定する確率は実は高そうです(実際に設定を誤って、同期先のファイルが消されてしまう事項がありました)

安全のため、シンボリックリンク作成コマンドでディレクト同期をしたほうがよいです

  • シンボリックリンク作成:
    • public_htmlディレクトリ(apacheではdocument root)に入ります
    • コマンド: ln -s [ディレクト名] [ドメイン名] (例:ln -s drupal7 old-pine.net)
    • コマンド: ls -l で生成したシンボリックリンクを確認します(例: old-pine.net -> pine)
  • シンボリックリンクの削除
    • コマンド:unlink [ドメイン名] (例:unlink old-pine.net)
    • コマンド:ls -l でドメイン名の同期先が消えたことを確認します

安全のため、コマンド(rm)でシンボリックリンクを削除しないこと

  • シンボリックリンクを削除するのはコマンド(rm)できますが、誤って指定すると、同期先のディレクトリの内容を削除していまう危険があります
  • シンボリックリンクを削除するには、コマンド(unlink)を使用すべきです
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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)