序文の代わりに
コンテンツをサブスクライブする機能は、Web業界で最も要求されている機能の1つです。 多くのサイトが同様のものを誇っています。 そして、私たちのプロジェクトも例外ではありませんでした。 指定:
Drupal 7サイト。 必要なもの:必要なすべての機能を実装するモジュールを検索または作成します。 どのオプションが選択され、どのオプションが提供されたかについては、先を読むことができます。

適切なモジュールを検索
最も明白で予測可能なオプションは、
サブスクリプションモジュールです。 このモジュールを使用すると、ユーザーはノードおよび分類法の変更(コンテンツに関する新しいコメントを含む)にサブスクライブできます。 このオプションを拒否する主な理由は、ページをリロードせずにサブスクライブする機能がないことと、主に
電子メールニュースレターでのモジュールのオリエンテーションです。
別のオプションは、
通知モジュールです。 原則として、その拡張性と拡張性は(私たちのタイプのサブスクリプションを作成するために)私たちに適していましたが、7.xの安定したバージョンがないため、それを使用できませんでした。
そのため、モジュールを自分で作成するという1つの解決策しかありませんでした。
初期設定
モジュール全体を完全に説明するのは意味がありません(これは間違いなく記事の範囲を超えます)。そのため、主な機能について説明し、主なポイントである管理設定から始めます。 最初に、特定の数のフィールドを持つコンテンツタイプ(この例では
Item )を作成する必要があります。 以下、
タイトル 、
ボディ 、
画像の各フィールドに主な注意が払われます。

第二に、次のステップは、このタイプのノードを表示する
ビューを作成することです。 たとえば、次の図のように:

この
ビューの前述のフィールドに加えて
、 Nidも表示されます。 なぜこれが必要なのですか? このフィールド(サブスクリプションイベントが後で添付される)を一時的に整理した後、裁量でその出力を構成できます。
モジュールファイルとその説明
モジュール開発を開始するには、
sites / all / modulesに custom_subscriptionsフォルダーを作成し
ます 。 4つのファイルが必要になります:
custom_subscriptions.info (モジュールに関する基本情報)、
custom_subscriptions.install (インストール設定)、
custom_subscriptions.module (実際にはモジュールファイル自体)、
custom_subscriptions.js (スクリプトはページをリロードせずにサブスクリプションメカニズムを実装します)。 次に、それぞれについて詳しく説明します。
情報ファイル
custom_subscriptions.infoファイルの内容:
name = "Custom Subscriptions" description = "Allows users to follow content" core = 7.x version = 7.x-1.0 php = 5.1 scripts[] = custom_subscriptions.js
ご覧のとおり、スクリプトファイルはここに含まれています。
インストールファイル
ここに投稿されている例では、データベース内の1つのテーブルで十分であり、フィールド
uid (ユーザー識別子)と
nid (ユーザーがサブスクライブしているノードの識別子)が含まれています。
custom_subscriptions.installファイルの内容:
<?php function custom_subscriptions_schema() { $schema['custom_subscriptions'] = array( 'description' => t('The base table for subscriptions'), 'fields' => array( 'sid' => array( 'type' => 'serial', 'unsigned' => TRUE, 'not null' => TRUE, ), 'uid' => array( 'type' => 'int', 'length' => 10, 'not null' => TRUE, ), 'nid' => array( 'type' => 'int', 'length' => 10, 'not null' => TRUE, ), ), 'primary key' => array('sid'), ); return $schema; }
インストール後、テーブルは次の構造になります。

テーマ設定
まず、
ビューに Nidを表示するためのテンプレートを作成します。 私たちの場合、
views-view-field-items-page-nid.tpl.phpという名前があります(テンプレートの名前は、
Viewの設定の
Advance d /
Themeセクションで取得できます)。 テンプレートファイルは、
テンプレートフォルダのテーマ(
STARTERKITと呼ばれる
Zen サブトピックが使用された)に
配置されます。
ファイル
views-view-field-items-page-nid.tpl.phpの内容 :
<?php global $user; ?> <?php if ($user->uid != 0): ?> <?php $following = db_select('custom_subscriptions', 'cs') ->fields('cs') ->condition('uid', $user->uid) ->condition('nid', $output) ->execute() ->rowCount(); ?> <?php if ($following == 0):?> <?php print('<a href="follow/' . $output . '" class="follow">FOLLOW</a>'); ?> <?php else:?> <?php print('<a href="unfollow/' . $output . '" class="following">FOLLOWING</a>'); ?> <?php endif; ?> <?php endif; ?>
提示されたコードからわかるように、サブスクリプションフィールドは承認されたユーザーのみが使用できます。 さらに、
custom_subscriptionsテーブルのエントリの可用性に応じて、フィールドタイトルは
FOLLOW (ユーザーがまだノードにサブスクライブしていない場合)から
FOLLOWING (既にサブスクリプションがある場合)に変わります。 コミットされたアクション(
follow / unfollow )に関する情報と
ni dノードの識別子は
href属性に保存されます。
サブスクリプションメカニズムの開発
モジュールファイルとスクリプトの機能は相互接続されているため、それらは一緒に考慮されます。
視覚効果から始めましょう:スクリプトファイルに、コンテンツに
カーソルを
合わせるためのサブスクリプションのフィールドの外観を追加し、このフィールドに
カーソルを
合わせたときに碑文のテキストを
FOLLOWINGから
UNFOLLOWに変更します(
Twitterで行ったのと同じです)。
ファイル
custom_subscriptions.jの内容:
(function ($) { Drupal.behaviors.collectiveMove = { attach: function(context, settings) {
これで、楽しい部分が始まります-モジュールファイルとスクリプト間のデータ転送。 主なアイデアは次のとおりです
。FOLLOW ポストをクリックする
と、リクエストはアクションに関するデータ(
'follow' )とノード識別子をモジュールに送信し、受信したデータがデータベースに書き込まれます。
UNFOLLOWの場合、メカニズムは似ていますが、アクションは異なり(
「unfollow 」)、受信したデータはデータベーステーブルから削除されます。
最初に、
hook_men uを使用してリクエストの送信先のページを作成します。
custom_subscriptions.moduleファイルの内容:
<?php function custom_subscriptions_menu() { $items = array(); $items['custom_subscriptions_ajax'] = array( 'title' => 'Ajax callback', 'page callback' => 'custom_subscriptions_ajax', 'access callback' => TRUE, 'type' => MENU_CALLBACK, ); return $items; }
Drupalモジュールのコードを記述するための規則に従って、開始
phpタグのみが設定されていることを思い出してください。
ページの準備ができました-機能を追加します。
custom_subscriptions.moduleファイルの内容:
<?php function custom_subscriptions_menu() { ... } function custom_subscriptions_ajax() { global $user; if($_POST['type'] == 'follow') { if ($_POST['nid']) { db_insert('custom_subscriptions') ->fields(array( 'uid' => $user->uid, 'nid' => $_POST['nid'], )) ->execute(); print(1); } } else if($_POST['type'] == 'unfollow') { if ($_POST['nid']) { db_delete('custom_subscriptions') ->condition('uid', $user->uid) ->condition('nid', $_POST['nid']) ->execute(); print(1); } } else { print(0); } }
ポストリクエストから受け取ったアクション(
follow / unfollow )に応じて、テーブルにレコードを追加または削除します。 各エントリは、
uid (グローバルユーザーの識別子を取得)と
nidによって識別され
ます 。 成功した場合、「1」を印刷します。
最も重要なことは、
ビューを使用して形成されたページの
nidフィールドをクリックしてデータを転送することです。
custom_subscriptions.jsファイルの内容:
(function ($) { Drupal.behaviors.collectiveMove = { attach: function(context, settings) { ...
nidフィールドのリンクをクリックすると、次の手順が実行されます。
- デフォルトのアクションの禁止(ページの再読み込みを防ぐため);
- テンプレートで記述されたhref属性からアクションとnidを取得します。
- 受信したデータをモジュールで準備されたページに転送します。
- 成功した結果を受け取ったら、表示されたリンクの名前といくつかの属性を変更します。
あとがきの代わりに
この記事では、
Drupal 7でノードサブスクリプションの最も単純なモジュールを作成するプロセスについて説明しました。 主なポイントは、
ポストリクエストを使用してページをリロードせずにサブスクリプションを実装することです。
ここで完成したモジュールを見ることができます:
github.com/Sacret/custom_subscriptions