Drupalでフィールド単位で公開・非公開を設定する

概要 Omeka Sではフィールド単位で公開・非公開を設定することができます。これをDrupalで実現する方法のメモです。 インストール c o m v p e o n s d e o r r . / p b h i a n r / d r r e u q s u h i r e e n ' f d i r e u l p d a _ l p / e f r i m e i l s d s _ i p o e n r s m i s s i o n s : ^ 1 . 4 ' 設定 以下のような、あるコンテンツタイプのあるフィールドの編集画面に遷移します。 ...

2024年8月16日 · 2 分 · Nakamura

Drupal:

概要 Drupalでキャッシュを削除した際、以下のようなエラーが発生することがありました。 I n v T e e C h n n h e t d e o c s s r k e e / E r r b x v v i c i i n e c c / p e e d t r i " " u o a u s n c s h O c e n e r c I s . r n s d v _ a a c t l h a i e " d c . R k e . f c e o r n e t n a c c e t B _ e p h e a r v s i o o n r a P l a " s s h . a p s h p a l d i e n p e e n 8 d 8 e : n c y o n a n o n - e x i s t 本エラーへの対応方法に関する備忘録です。 ...

2024年8月16日 · 1 分 · Nakamura

DrupalのREST APIを使って、複数のコンテンツを一括削除する

概要 DrupalのREST APIを使って、複数のコンテンツを一括削除する機会がありましたので、備忘録です。 参考 REST APIを使用せずにコンテンツを一括削除する方法として、以下も参考にしてください。 準備 まず、HTTP Basic AuthenticationモジュールとJSON:APIモジュールを有効化します。 さらに、REST resourcesにおいて、DELETEを有効化します。 /admin/config/services/rest 実行例 以下の自作ライブラリを使用します。 https://github.com/nakamura196/drupal_tools 以下でも処理内容をご確認いただけます。 https://nakamura196.github.io/drupal_tools/ インストール p i p i n s t a l l g i t + h t t p s : / / g i t h u b . c o m / n a k a m u r a 1 9 6 / d r u p a l _ t o o l s .envの準備 D D D R R R U U U P P P A A A L L L _ _ _ U U P R S A L E S = R S h N W t A O t M R p E D : = = / u p / s a e e s x r s a n w m a o p m r l e d e . o r g / d r u p a l 実行 以下のように実行します。 ...

2024年7月14日 · 4 分 · Nakamura

Docker + Traefikで運用するDrupalのリバースプロキシ設定

概要 以下の記事で紹介したDocker + Traefikを用いて、HTTPS化したDrupalを運用していました。 この時、Drupalのデフォルト設定の場合、以下のように、httpのURLが設定されていました。 この問題として、以下の記事になるように、例えばGoogleアカウントでログインするようにした際、リダイレクトURLがhttpから始まるURLとなり、Google Cloud コンソールにはhttpsから始まるURLを入力する必要があり、この齟齬によって、認証ができないケースなどがありました。 https://drupalfan.com/【drupal】googleアカウントでログインできるようにする/ 本記事では、この問題に対処するための方法についてメモします。 方法 以下の記事が参考になりました。 https://www.58bits.com/blog/canonical-urls-https-and-drupal-89-reverse-proxy-settings 以下の3行を追加することで、Drupalの内部的にもhttpsから始まるURLに設定されました。 $ $ $ s s s e e e t t t t t t i i i n n n g g g s s s [ [ [ ' ' ' r r r e e e v v v e e e r r r s s s e e e _ _ _ p p p r r r o o o x x x y y y ' _ _ ] a t d r = d u r s T e t R s e U s d E e _ ; s h ' e ] a d = e r a s r ' r ] a y = ( $ \ _ S S y E m R f V o E n R y [ \ ' C R o E m M p O o T n E e _ n A t D \ D H R t ' t ] p ) F ; o u n d a t i o n \ R e q u e s t : : H E A D E R _ X _ F O R W A R D E D _ F O R | \ S y m f o n y \ C o m p o n e n t \ H t t p F o u n d a t i o n \ R e q u e s t : : H E A D E R _ X _ F O R W A R D E D _ P R O T O | \ S y m f o n y \ C o m p o n e n t \ H t t p F o u n d a t i o n \ R e q u e s t : : H E A D E R _ X _ F O R W A R D E D _ P O R T ; まとめ 考慮不足の点があるかもしれませんが、参考になりましたら幸いです。 ...

2024年7月4日 · 2 分 · Nakamura

Drupal: Prepopulateモジュールを使って、事前に入力する値を設定する

概要 Drupalのコンテンツ作成画面にアクセスする際、クエリパラメータを指定することにより、事前に入力する値を設定することができましたので、備忘録です。以下のモジュールを使用します。 https://www.drupal.org/project/prepopulate 使い方 例えば、poemsというコンテンツタイプに新規のコンテンツを追加する際、以下のように、クエリパラメータを追加します。 </node/add/poems?edit[field_spot][widget][0][target_id]=1&edit[title][widget][0][value]=テスト> その結果、以下のように、初期値が入力された状態の登録画面が表示されます。 まとめ 参考になりましたら幸いです。

2024年6月12日 · 1 分 · Nakamura

プログラムを使ってDrupalにログインする

プログラムを使ってDrupalにログインする方法に関する備忘録です。 以下の記事が参考になりました。 https://drupal.stackexchange.com/questions/185494/how-do-i-programmatically-log-in-a-user-with-a-post-request c } u - - ' r h d l e a a t " " d a n p - e a a l r ' m s o { e s c ' " " a C : : t o i n " " o t a a n e d d n m m ' t i i h - n n t T " " t y , p p : e / : / d a r p u p p l a i l c . a d t 8 i / o u n s / e j r s / o l n o ' g i n ? _ f o r m a t = j s o n ' 上記のようなリクエストをおくることで、以下のようなレスポンスを取得できました。 ...

2024年5月31日 · 2 分 · Nakamura

Drupalで登録済みのコンテンツをCSV形式で一括エクスポートする

概要 Drupalで登録済みのコンテンツをCSV形式でエクスポートする機会があり、その備忘録です。 以下のモジュールを使用しました。 https://www.drupal.org/project/content_export_csv インストール 通常の方法でインストールできました。 c o m v p e o n s d e o r r / r b e i q n u / i d r r e u s ' h d r e u n p a c l n c t o e n n t t e _ n e t x _ p e o x r p t o _ r c t s _ v c s v : ^ 4 . 7 ' 使い方 インストール後、Administration > Content > Content にアクセスすると、「Export Content」ボタンが表示されます。 ...

2024年5月30日 · 1 分 · Nakamura

Drupalのイベントをトリガーとして、GitHub Actionsを起動する

概要 Drupalのイベントをトリガーとして、GitHub Actionsを起動する方法の備忘録です。 以下のサイトが参考になりました。 https://qiita.com/hmaruyama/items/3d47efde4720d357a39e pipedreamの設定 triggerとcustom_requestを含むワークフローを作成します。 triggerについては、以下を参考にしてください。 https://qiita.com/hmaruyama/items/3d47efde4720d357a39e#pipedream側の設定 custom_requestにおいて、dispatchに関する設定を行います。 https://docs.github.com/ja/rest/repos/repos?apiVersion=2022-11-28#create-a-repository-dispatch-event 以下のような設定を行います。 c u r - - - - h - l X H H H t d t - P " " " p ' L O A A X s { S c u - : " \ T c t G / e e h i / v \ p o t a e t r H p n : i u i t z b . _ a a - g t p t A i y p i p t p l o i h e i n - u " c : V b : a e . " t B r c w i e s o e o a i m b n r o / h / e n r o v r : e o n p k d < 2 o " . Y 0 s } g O 2 / ' i U 2 O t R - W h - 1 N u T 1 E b O - R + K 2 / j E 8 R s N " E o > P n " \ O " / \ d \ i s p a t c h e s \ ...

2024年5月28日 · 3 分 · Nakamura

Drupalで翻訳がないノードの一覧を取得する

概要 Drupalで翻訳がないノードの一覧を取得する機会がありましたので、備忘録です。 方法 色々とやり方があるかと思いますが、今回はjsonapiを使用します。 マスタ言語が日本語(ja)、追加したい翻訳言語を英語(en)とします。 jsonapiによって、例えばcollectionというタクソノミーであれば、以下で取得できます。 https://xxx/jsonapi/taxonomy_term/collection また、以下のように/enを追加することで、翻訳ノードがある場合には、その情報が返却されます。 https://xxx/en/jsonapi/taxonomy_term/collection この時、翻訳ノードがある場合には、attributes/langcodeがenになりますが、翻訳がないノードについては、jaのままとなりました。 { " " " " " " } } } } " { " " " " " } } " " " " " " j v m l s h , d t i l s h , a d d l r r s e e i e r a y d i e r t r r a e e o r t n l e t p " n l e t u u n v v n s a k f f a e : k f f r p p g i i a i " s " " " " s " " i a a c s s p o : " : : : : " " : : b l l o i i i n : 1 : u _ _ d o o " " { { " [ " e { " t i i e n n : : { h t 3 { h e n n " _ _ t a d t s t t : c l { " t x 1 t " e e r o 1 p o e p : r r " e g . : n 6 s n n e a _ 0 / o f : { a a n t m " / m - / l l " e e , j y 5 / _ _ , d s s _ 1 x _ _ " s o t 7 x t r : a n e 8 x i e g a r - / d v n e p m 4 e " i u " i - 9 n : s l : . - 8 / i l o c 0 j 1 o , n r o - s 9 n u g l 9 o , _ l / l 6 n i l f e b a d , o c d p " r t - i : m i 7 / a o b t 1 t n 0 a 9 / " 4 x , 1 , 5 o . f n 0 2 o / c m " c y 6 _ 6 t e e " r , m / c o l l e c t i o n / 1 e 3 d 1 e 6 f - 5 1 7 8 - 4 9 8 0 - 9 6 b d - 7 b 0 4 5 f 2 c c 6 6 e ? r e s o u r c e V e r s i o n = i d % 3 A 1 9 " この性質を利用して、指定した言語と異なる言語コードがlangcodeに含まれた場合、その言語に対する翻訳がないノードとして抽出できそうです。 ...

2024年5月22日 · 3 分 · Nakamura

DrupalのSearch APIにおいて、大文字・小文字を無視して検索する

概要 DrupalのSearch APIを用いた検索において、大文字・小文字を無視した検索を行うための備忘録です。 方法 以下にアクセスして、Ignore caseにチェックを入れます。 /admin/config/search/search-api/index/<コンテンツタイプ>/processors さらに画面下部のProcessor settings において、本処理を適用したいフィールドを選択します。以下のように、すべてのフィールドを選択することもできました。 再インデックスを行うことで、上記の設定が反映されます。 まとめ 参考になりましたら幸いです。

2024年5月6日 · 1 分 · Nakamura

Input value "page" contains a non-scalar value.への対処

概要 以下の記事で、同エラーへの対応を行いました。 ただし、上記の対応を行なっても、エラーを解決することができないケースがありましたので、追加の対応を記載します。 エラーの内容 エラーの内容は以下です。特に、jsonapi_search_api_facetsを有効化した際に発生しました。 { " " " " " " } } } } " { " " " " " " } " " } } " " " } " " j v m l s h , e t s d l v h , i h , s f l , m e s e e i e r r i t e i i r n r o i i e x o r t n l e r t a t n a e f e u l n t c n s a k f f o l t a k " f o f r e e a e a i " s " " r e u i s : " " " c " " " p p o : " : : s " s l " : : : e : : : t i n : " : " " : { " i " " { { " : : : " { " : " 8 { o : : { h " { h h / 3 n t [ B " " t t { a " { " t a 4 I t t p : 1 p d 0 n p p p . : 0 p : : / " 0 / R " u / / v S " / e , t / / e y , j q l w n m s u v o w d f o e a c w o o n s l a . r n a t u l w / y p " e h 3 s \ i , o . y \ . \ s o m C o " t r f o r p : g o m g a 6 / n p / g 1 P y o f e 1 r / n o \ 1 o h e r " 7 t t n m / o t t a c w c p \ t o e o - \ / n b l k H 1 t / s e t . a j / r t 0 i s r n p / n o f e F " s n c l o a 2 / u a p 6 H n i 1 t d n / 6 t a o i / p t n n r K i - d f e o s e c r n c x 2 n \ a / 6 e \ l d 1 l E a o 6 . x r c - p c u s h e v m e p p a e c " t l n 1 , i u t 0 o e ? . n . p h \ " a t \ , g m B e l a % # d 5 s R B e e l c q i 1 u m 0 e i . s t 4 t % . E 5 1 x D " c = e 2 p 4 t & i s o o n r : t = I f n i p e u l t d _ v i a d l " u e \ " p a g e \ " c o n t a i n s a n o n - s c a l a r v a l u e . i n / a p p / v e n d o r / s y m f o n y / h t t p - f o u n d a t i o n / I n p u t B a g . p h p : 3 8 \ n S t a c k t r a c e : \ n # 0 / a p p / w e b / m o d u l e s / c o n t r i b / f a c e t s / s r c / P l u g i n / f a c e t s / u r l _ p r o c e s s o r / Q u e r y S t r i n g . p h p ( 9 2 ) : S y m f o n y \ \ C o m p o n e n t \ \ H t t p F o u n d a t i o n \ \ I n p u t B a g - > g e t ( ' p a g e ' ) \ n # 1 / a p p / w e b / m o d u l e s / c o n t r i b / f a c e t s / s r c / P l u g i n / f a c e t s / p r o c e s s o r / U r l P r o c e s s o r H a n d l e r . p h p ( 7 6 ) : D r u p a l \ \ f a c e t s \ \ P l u g i n \ \ f a c e t s \ \ u r l _ p r o c e s s o r \ \ Q u e r y S t r i n g - > b u i l d U r l s ( O b j e c t ( D r u p a l \ \ f a c e t s \ \ E n t i t y \ \ F a c e t ) , A r r a y ) \ n # 2 / a p p / w e b / m o d u l e s / c o n t r i b / f a c e t s / s r c / F a c e t M a n a g e r / D e f a u l t F a c e t M a n a g e r . p h p ( 3 3 9 ) : 対応 そこで、上記で言及されている以下のファイルについて、buildUrlsを修正しました。 ...

2024年4月30日 · 13 分 · Nakamura

DrupalのSimple OAuthとPostmanを使ったOAuth認証の確認

概要 DrupalのSimple OAuthとPostmanを使ったOAuth認証の確認を行います。 以前に以下の記事を書きましたが、もう少し掘り下げてみます。 DrupalでSimple OAuthの設定を行う 以下を参考にしてください。 /ja/posts/e4ce978db12227/#oauthクライアントの作成 Postman グラントタイプがpasswordの場合 /oauth/token に対して、Body > x-www-form-urlencoded に以下を指定しました。 キー 値 grant_type password client_id {作成したCLIENT_ID。例:gt8UKlKltI4qs1XP5KLucIXiYw9ulGb0xS4RyO437dc} client_secret {作成したCLIENT_SECRET。例:test} username {ユーザ名。例:yamato} password {パスワード。例:yamato} 結果、以下のようなJSONが返却されました。 { } " " " " t e a r o x c e k p c f e i e r n r s e _ e s s t s _ h y _ t _ p i o t e n k o " " e k : : n e " n " 3 : " B 0 : e 0 " a , e " r y d e J e r 0 f " e 5 , X 0 A 2 i 0 O 0 i 2 J 9 K 5 V e 1 4 Q 1 i 2 L f C . J . h . b " G c i O i J S . . . " , jwt.ioで確認したところ、以下のようにデコードされました。 ...

2024年3月2日 · 6 分 · Nakamura

Drupal: FeedsモジュールでURLからファイルを登録する

概要 Feedsモジュールを使って、URLからファイルを登録する方法です。以下が参考になりました。 https://www.drupal.org/docs/contributed-modules/feeds/feeds-howtos/importing-files 方法 ドロップダウン リストからファイル フィールドを見つけて、ファイルまたは画像フィールドのマッピング ターゲットを作成します。 「ファイルID」には、完全な URL (http/https プレフィックスを含む) へのマッピングを指定します。 「Reference by」で「ファイルID」を選択します。 フィードが既存のファイルを処理するようにアクションを構成します。 これらの変更を構成した後、マッピングを保存します。 CSV 以下のようなCSVファイルを用意して登録します。 title url オタクのイラスト https://1.bp.blogspot.com/-EGQiXxfkfQA/U5gFr1g8qHI/AAAAAAAAhDM/17wwYnxWmHE/s800/otaku.png 結果、以下のように登録されました。 まとめ Feedsモジュールを用いたファイルの登録にあたり、参考になりましたら幸いです。

2024年1月23日 · 1 分 · Nakamura

Drupalでファイルを一括削除する方法

Drupalでファイルを一括削除する方法のメモです。以下が参考になりました。 https://www.drush.org/12.x/commands/entity_delete/ d r u s h e n t i t y : d e l e t e f i l e Drupal\Core\File\Exception\InvalidStreamWrapperExceptionなどが発生し、ファイルが閲覧できなくなってしまった際などの対処法として参考になりましたら幸いです。

2024年1月23日 · 1 分 · Nakamura

Omeka Sで非公開ファイルを扱う

概要 Omeka Sでは、リソース(アイテムセット、アイテム、メディアなど)単位で公開/非公開の設定を行うことができますが、メディア等に紐づけられた画像などのファイルについては、非公開の設定が適用されていても、ファイルのURLを知っていれば誰でもアクセスすることができます。通常、以下のようなURLになります。 <Omekaのインストールディレクトリ>/files/original/<ハッシュ値>.jpg メディアに非公開の設定が適用されていれば、このファイルのURLが知られることは稀かと思いますが、「リンクを知っている全員」がアクセスできてしまう状況を避けたいケースがあります。 上記に対応するモジュールとして、「Access」がありました。 https://omeka.org/s/modules/Access/ 本記事では、本モジュールについて簡単に紹介します。 参考: Drupalの場合 Drupalにおいては、Private filesを使って、上記の問題に対応することができました。この実現にあたっては、以下の記事が参考になりました。 https://wheelercreek.com/blog/how-configure-private-files-directory-drupal-9-10 ファイルをPrivate filesとして登録し、 Access Content や Field Permissions モジュールと組み合わせて、匿名ユーザによるPrivate filesへのアクセスを制限することができました。 Accessモジュールの使い方 本モジュールはIPアドレスによるアクセス制御や Guest モジュールとの組み合わせによる匿名ユーザによるアクセス制御など、多様な設定を行うことができるようです。 今回は、単純な設定として、original(オリジナル)およびlarge(オリジナルより小さいサイズの画像)、medium(ラージよりも小さい画像)などについて、匿名ユーザはoriginalおよびlargeの画像は閲覧できないが、medium以下の画像は閲覧できるようにしてみます。 つまり、非ログインユーザは、大きな画像は閲覧できないが、比較的小さな画像のみ閲覧できる環境を構築します。 インストール 通常の方法でインストールできます。 ウェブサーバの設定 この点が少し面倒かもしれません。以下に記載があります。 https://github.com/Daniel-KM/Omeka-S-module-Access?tab=readme-ov-file#configuration-of-the-web-server 以下、Apacheの例ですが、.htaccessファイルのRewriteEngine Onに後に、以下を追記します。 # R e S w e r t i t r e u R l u e l e f o " r ^ f o i r l i e g s i / n ( a o l r i a g n i d n a s l e | l l e a c r t g e e d ) / d ( e . r * i ) v $ a " t i " v / e a c f c i e l s e s s / f ( i u l s e u s a / l $ l 1 y / $ a 2 t " l [ e P a ] s t l a r g e t h u m b n a i l s ) . 上記は、ドメインまたはサブドメインのルートにOmeka Sがインストールされている場合です。その他の方法でインストールされた場合の設定例についても、上記のマニュアルに記載されています。 ...

2024年1月14日 · 1 分 · Nakamura

Drupalのsimple_oauthモジュールを用いたRESTリソースのoauth2認証を試す

概要 DrupalのSimple OAuth (OAuth2) & OpenID ConnectモジュールはOAuth 2.0認証フレームワークRFCの実装と説明されています。 https://www.drupal.org/project/simple_oauth 関連する記事として、cookie認証の例や、jwt認証の例も参考にしてください。 インストール simple_oauthモジュールには、5系と6系があるようですが、今回は5系を使用します。以下でインストールします。 c o m p o s e r . p h a r r e q u i r e ' d r u p a l / s i m p l e _ o a u t h : ^ 5 . 2 ' ただし、さくらレンタルサーバを使用している場合、以下のエラーが発生しました。PHP's sodium extensionが必要でした。 ...

2024年1月2日 · 17 分 · Nakamura

DrupalのSocial Auth GitHubモジュールを試す

概要 DrupalのSocial Auth GitHubモジュールを試します。 https://www.drupal.org/project/social_auth_github/ 本モジュールは以下のように説明されています。 Social Auth GitHub allows users to register and login to your Drupal site with their GitHub account. (日本語訳)Social Auth GitHubは、ユーザーがGitHubアカウントを使用してDrupalサイトに登録およびログインすることを可能にします。 以下のように、GitHubアカウントを使用してログインできるようにすることを目指します。 インストール c v o e m n p d o o s r e / r b . i p n h / a d r r u r s e h q u e i n r e s o ' c d i r a u l p _ a a l u / t s h o _ c g i i a t l h _ u a b u t h _ g i t h u b : ^ 4 . 0 ' 上記のインストールにより、social_authとsocial_apiも有効化されます。 ...

2024年1月2日 · 1 分 · Nakamura

Postmanを使って、DrupalのRESTリソースのcookie認証を試す

概要 以下の記事で、JWTモジュールを使ったJWT認証を試しました。 今回は、cookie認証を試します。 インストール restuiモジュールをインストールしていない場合には、以下のようなコマンドをインストールと有効化を行います。 c v o e m n p d o o s r e / r b . i p n h / a d r r u r s e h q u e i n r e r e ' s d t r u u i p a l / r e s t u i : ^ 1 . 2 1 ' 設定 今回は、以下のように、cookie認証を使用します。設定方法の詳細については、冒頭の関連記事をご確認ください。 ...

2024年1月1日 · 2 分 · Nakamura

Drupal JSON Web Token Authenticationモジュールを試す

概要 DrupalのJSON Web Token Authenticationモジュールを試してみます。 https://www.drupal.org/project/jwt 以下のページを参考にしました。 https://preston.so/writing/decoupled-drupal-authentication-with-json-web-tokens/ なお、類似するモジュールとして、以下があるようです。 https://www.drupal.org/project/rest_api_authentication 上記モジュールを使ったjwt認証は以下で説明されています。 https://www.drupal.org/docs/contributed-modules/api-authentication/jwt-authentication しかし、以下の記事に記載したように、上記モジュールでjwt認証を使用するには有料プランに加入する必要があるようでした。 そこで、今回は、jwtモジュールのほうを試してみます。 インストールと有効化 jwtモジュール 注意点として、jwtだけでなく、jwt_auth_consumerやjwt_auth_issuerも有効化する必要がありました。 c v o e m n p d o o s r e / r b . i p n h / a d r r u r s e h q u e i n r e j w ' t d r j u w p t a _ l a / u j t w h t _ : c ^ o 2 n . s 0 u ' m e r j w t _ a u t h _ i s s u e r restuiモジュール ...

2023年12月31日 · 11 分 · Nakamura

Drupal REST & JSON API Authenticationモジュールの調査

概要 以下の記事を参考に、JWT認証を試してみます。 https://www.drupal.org/docs/contributed-modules/api-authentication/jwt-authentication ただ試してみた結果、JWT認証を行うには、有料プランに加入する必要がありそうで、そこで調査が止まりました。 前提条件: ダウンロードとインストール 以下の2つのモジュールをインストールして有効化します。 https://www.drupal.org/project/rest_api_authentication https://www.drupal.org/project/restui c c v o o e m m n p p d o o o s s r e e / r r b . . i p p n h h / a a d r r r u r r s e e h q q u u e i i n r r e e r e ' ' s d d t r r _ u u a p p p a a i l l _ / / a r r u e e t s s h t t e _ u n a i t p : i i ^ c _ 1 a a . t u 2 i t 1 o h ' n e n t i c a t i o n : ^ 2 . 0 ' JWT ベースの API 認証を構成する手順 以下の説明に従って、APIを有効化して、JWTベースのAPI認証をセットアップします。 ...

2023年12月31日 · 1 分 · Nakamura