ノードに接続されたnode/cckフィールドの表示をフィルタリングしようとしているので、カスタムのhook_nodeapi関数を記述し、ユーザーに権限がない場合はフィールドの値を編集しています(編集)。問題は、cronが実行され、apachesolrが同じコンテンツのインデックスを作成しようとすると、cronに「権限」が関連付けられていないため、編集されたコンテンツのインデックスが作成されることです。
Cronによって関数が呼び出された場合にブール値を返す簡単なテストが必要です。何か案は?私はcronコード(Drupal 6)を調べ始めましたが、bootstrapはデフォルトの匿名ユーザーアカウントの詳細でcronを設定します...
Cronはどのように実行されていますか?のようにcrontabを介して行われた場合
0 1 * * * /usr/bin/wget -O - -q -t 1 http://my.site.com/cron.php
それから私はそれを疑っています
function hook_whatever () {
global $user;
if (strpos(request_uri(), "/cron.php") === 0 && $user->uid == 0) {
// from crontab
} else {
// from somewhere else
}
}
うまくいくでしょう。
管理ページの1つから手動で実行するのは難しいかもしれませんが、$user->uid
その場合、チェックで十分です。
問題は、それほど多くのcronではなく、apachsolr自体のインデックス作成である可能性があります。
コードを見る here いくつかのオプションがあるようです。
モジュールをapachesolrインデックスから除外します。 UIがどこにあるのかはわかりませんが、コンテンツがインデックスに登録されているときは具体的に呼び出せないようです。
または、op 'update index
'をチェックするnodeapiフックにカスタムコードを配置することもできます。
または、nodeapi op = view
フックで$ node-> build_mode == NODE_BUILD_SEARCH_INDEXを確認できます。
問題が発生するのは、nodeapi op = load
に物事を入れている場合のみですが、op = view
を説明するのに適しています。
Drupal 7の場合、以下のコードは、有効なcronキーが使用されているかどうかをcronが確認する方法です。cronが同時に実行されている場合、これが誤ったアクセス許可を与えるとは思わない$ _GET変数はそのスクリプトからのみアクセス可能なスーパーグローバルであるため、リクエストを送信します。間違っている場合は修正してください。
if (isset($_GET['cron_key']) && variable_get('cron_key', 'drupal') == $_GET['cron_key']) {
//do my fancy cron stuff here
}
関数がcron経由で実行されているかどうかは、 drupal_cron_run
はあなたの中にあります debug_backtrace
。
これはひどい解決策なので、他の解決策が出てきたらそれをしないでください。