ブロックを作成し、無効なPHPコードを挿入すると、サイト全体にまったくアクセスできなくなりました。
私はDrupalにかなり慣れており、私もバックエンドプログラマではありません。その特定のブロックを直接削除する方法について明確なステップバイステップガイドを提供できれば非常に感謝しますデータベース(PhpMyAdmin)から。
Database APIを使用してプログラムでブロックを削除するには、次のことを試してください。
$module = 'block';
$delta = 1;
// Get the block id (bid) required to delete the correct block from table 'block_custom'
$result = db_select('block', 'b')
->fields('b', array('bid'))
->condition('module', $module)
->condition('delta', $delta)
->execute();
$bid = $result->fetchField();
db_delete('block_custom')
->condition('bid', $bid)
->execute();
db_delete('block')
->condition('module', $module)
->condition('delta', $delta)
->execute();
db_delete('block_role')
->condition('module', $module)
->condition('delta', $delta)
->execute();
DrupalブロックUIを使用してカスタムブロックを作成する場合、モジュール名はblock
で、delta
値は整数です。必ず正しいデルタ値を使用してください目的のブロックを削除します。
この単純なクエリを使用して、ブロックを削除します。
delete from block where module = 'MODULE' and title = 'TITLE'
[〜#〜] module [〜#〜]をブロックを作成するモジュールの名前に置き換え、[〜#〜] title [〜#〜]をブロックタイトル。
ブロックにタイトルがない場合は、delete from block where module = 'MODULE'
。
Eriksの例に答えて、私はそれが機能するためにここで配列を使わなければなりませんでした:
$result = db_select('block', 'b')
->fields('b', array('bid'))
->condition('module', $module)
->condition('delta', $delta)
->execute();
delta = 'DELTA'のブロックから削除します。
プログラムでブロックを作成した場合は、作成に使用したのと同じロジックでデルタ値を再作成できるはずです。これは、KEYとしてブロック配列に渡した値です(例:$ blocks ['myblock']-myblockは、デルタに格納されている値です)。
余談ですが、個人的には、この名前の前にモジュールの接頭辞を付けることをお勧めします。ブロックテーブルを確認すると、デルタのmymodule_myblockがあり、あいまいさはありません。