media https://www.vincentliefooghe.net/ fr Migration Media et Images Inline https://www.vincentliefooghe.net/content/migration-media-et-images-inline <span class="field field--name-title field--type-string field--label-hidden">Migration Media et Images Inline</span> <div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>Dans la série d'articles sur la migration de mon site <a href="https://www.vincentliefooghe.net/content/migration-drupal-7-vers-drupal-8">https://www.vincentliefooghe.net/content/migration-drupal-7-vers-drupal-8 </a> j'en viens maintenant à une partie qui m'a pris pas mal de temps et demandé un peu de développement.</p> <p>Sur mon site en Drupal 7, j'avais utilisé le module Media_Wysiwyg et Colorbox, qui me permettaient d'insérer des images directement dans le texte.</p> <p>Je n'ai pas trouvé d'équivalent sous Drupal 8, mais en utilisant comme format d'affichage "Colorbox" pour le champ media_image, ceci répond à mon besoin : ouvrir un champ image dans une "lightbox".</p> <article class="media media--type-image media--view-mode-default" data-align="center"> <div class="field field--name-field-media-image field--type-image field--label-visually_hidden"> <div class="field__label visually-hidden">Image</div> <div class="field__item"> <a href="https://www.vincentliefooghe.net/sites/default/files/2020-04/Capture%20d%E2%80%99%C3%A9cran%20de%202020-04-20%2021-58-11.png" title="Définition du format d'affichage Media Image" data-colorbox-gallery="gallery-all-xZn7aBMxKLk" class="colorbox" data-cbox-img-attrs="{&quot;alt&quot;:&quot;Définition du format d'affichage Media Image&quot;}"><img src="/sites/default/files/styles/large/public/2020-04/Capture%20d%E2%80%99%C3%A9cran%20de%202020-04-20%2021-58-11.png?itok=nlAgY3jD" width="480" height="154" alt="Définition du format d'affichage Media Image" typeof="foaf:Image" class="image-style-large" /> </a> </div> </div> </article> <p>Il reste donc à convertir les fichiers en média, et ensuite à convertir, dans le corps du texte de chaque contenu, les tags "colorbox" en tags "drupal media".</p> <h2>Création des Media liés aux fichiers</h2> <p>Lors de la migration, les fichiers ont bien été importés. Par contre ils ne sont pas reconnus comme <em>media</em> par Drupal ,et donc pas réutilisables.</p> <p>Après avoir cherché - en vain - des modules qui géraient ceci, j'ai fini par passer par un bout de programme PHP qui utilise les fonctions de Drupal pour réaliser cette opération.</p> <p>Le code php est le suivant :</p> <pre style="margin: 0px; text-indent: 0px;"> &lt;?php // Create Media images from file use Drupal\media\Entity\Media; // Requete pour recupérer les fichiers de type Image $results = \Drupal::database()-&gt;query("select * from file_managed where filemime like 'image%'")-&gt;fetchAll(); foreach ($results as $file ) { echo "File name:",$file-&gt;filename," Id : ",$file-&gt;fid," mime : ",$file-&gt;filemime," uid : ",$file-&gt;uid; echo "Creation du Media Image pour ",$file-&gt;filename,PHP_EOL; $media = Media::create([ 'bundle' =&gt; 'image', 'uid' =&gt; $file-&gt;uid, 'langcode' =&gt; $file-&gt;langcode, 'field_media_image' =&gt; [ 'target_id' =&gt; $file-&gt;fid, 'alt' =&gt; $file-&gt;filename ] ]); $media-&gt;setPublished(TRUE); $retour=$media-&gt;save(); if ( $retour != 1 ) { echo "Retour KO ? ",$retour,PHP_EOL; } } return (TRUE);</pre><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">On peut le lancer avec drush, via la commande :</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> </p> <pre> drush --uri=drupal.loc scr /chemin/vers/mon/fichier.php</pre><p>Après cette étape, on récupère bien dans la librairies de media tous les fichiers</p> <h2 style="margin: 0px; text-indent: 0px;">Reprise des images inline</h2> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> </p> <p class="western">Pour convertir les tags, j'ai développé un programme PHP qui va remplacer les instructions inline Colorbox, par exemple</p> <pre> &lt;p&gt;[[{"type":"media","view_mode":"colorbox","fid":"88","attributes":{"alt":"","class":"media-image","height":"300","typeof":"foaf:Image","width":"494"}}]]&lt;/p&gt;</pre><p class="western">par</p> <pre> &lt;drupal-media data-align="center" data-entity-type="media" data-entity-uuid="b5631639-11f9-4945-85b7-85a477cbdcf8"&gt;&lt;/drupal-media&gt;</pre><p class="western">Le script sera lancé avec en paramètre le Node Id à traiter :</p> <pre> php mediaInline.php -i nid</pre><p class="western">Par exemple</p> <pre> php mediaInline.php -i 136</pre><p class="western">Note : j'ai fait le choix de traiter les contenus un par un. Au total, j'avais identifié une vingtaine d'articles concernés. La migration unitaire me permettait de vérifier le traitement pour chacun.</p> <p class="western">Afin de voir le résultat, il faut vider le cache Drupal avec la commande :</p> <pre> drush cr</pre><p> </p> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span lang="" about="/users/vincentl" typeof="schema:Person" property="schema:name" datatype="">vincentl</span></span> <span class="field field--name-created field--type-created field--label-hidden">lun 20/04/2020 - 21:54</span> <div class="field field--name-field-categorie field--type-entity-reference field--label-above"> <div class="field__label">Catégorie</div> <div class="field__item"><a href="/cat%C3%A9gorie/cms" hreflang="fr">CMS</a></div> </div> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field__label">Tag</div> <div class="field__items"> <div class="field__item"><a href="/taxonomy/term/1" hreflang="fr">Drupal</a></div> <div class="field__item"><a href="/tags/media" hreflang="fr">media</a></div> </div> </div> <div class="field field--name-field-fichier field--type-file field--label-above"> <div class="field__label">Fichier</div> <div class="field__items"> <div class="field__item"> <span class="file file--mime-application-pdf file--application-pdf"> <a href="https://www.vincentliefooghe.net/sites/default/files/mediaInline.php_.pdf" type="application/pdf; length=53900" title="mediaInline.php_.pdf">Script de migration Colorbox vers media</a></span> </div> </div> </div> <section class="field field--name-comment-node-book field--type-comment field--label-hidden comment-wrapper"> <h2 class="title comment-form__title">Ajouter un commentaire</h2> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=205&amp;2=comment_node_book&amp;3=comment_node_book" token="fPxOoNJNWdkHGUVo_eQPh31e8VYhG0jBWRM4c513qDE"></drupal-render-placeholder> </section> Mon, 20 Apr 2020 19:54:26 +0000 vincentl 205 at https://www.vincentliefooghe.net File_entity : image_dimensions does not exists https://www.vincentliefooghe.net/content/fileentity-imagedimensions-does-not-exists <span property="dc:title" class="field field--name-title field--type-string field--label-hidden">File_entity : image_dimensions does not exists</span> <div property="content:encoded" class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>Suite à une alerte de sécurité Drupal (PSA-2014-001), j'ai procédé à la mise à jour du module Media 7.1.x, et de File_entity, qui est compris dans ce module.</p> <p>Problème en retournant sur les pages, une belle erreur :</p> <pre>PDOException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'mysite.image_dimensions' doesn't exist: SELECT * FROM {image_dimensions} id WHERE id.fid IN (:fids_0); Array ( [:fids_0] =&gt; 75 ) in file_entity_file_load() (line 225 of /home/mysite/domains/mysite.be/public_html/dev/sites/all/modules/media/file_entity/file_entity.module). </pre><h2>Identification du problème</h2> <p>Lorsqu'on vérifie dans la base de données, la table n'existe pas dans le schéma. Elle est pourtant créée dans le fichier .install de la nouvelle version de file_entity, qui fait partie du module Media 7.1.x. Dans l'update du module, elle porte la version 7101. On peut alors vérifier dans la base quel est le numéro de schéma référencé par Drupal. Par exemple avec une connexion MySQL ou MariaDB :</p> <pre>select name, type, schema_version from system where name = 'file_entity'; +-------------+--------+----------------+ | name        | type   | schema_version | +-------------+--------+----------------+ | file_entity | module | 7215 | +-------------+--------+----------------+ 1 row in set (0.00 sec) </pre><p>Dans le fichier <em>file_entity.install</em>, on trouve :</p> <pre>function file_entity_update_7101() { ... } </pre><p>Ce qui correspond à une version 7101,  inférieure à celle en base. Dans ce cas, le lancement de update.php ne va rien déclencher.</p> <h2>Solution</h2> <p>Forcer la version dans la table à une numéro inférieur à celui de l'update :</p> <pre>update system set schema_version = '7100' where name = 'file_entity'; </pre><p>On relance ensuite update.php et la table est alors créée.</p> <h2>Retour sur la cause du problème</h2> <p>Dans mon cas, la cause primaire était une première installation de Media 7.1 avec le module File Entity téléchargé séparément sur le site Drupal, qui est en version 7.2. En effet, dans la version Media 7.2, le module File entity n'est plus inclus.</p> <p>Ce souci n'apparaît donc que dans un cas bien particulier : installation de Media 7.1 avec File_entity 7.2,(ce qui de toute manière pose des problèmes), puis désinstallation de file_entity 7.2, suppression du module, pour pouvoir utiliser le module inclus dans Media 7.1.</p> <p> </p> </div> <span rel="sioc:has_creator" class="field field--name-uid field--type-entity-reference field--label-hidden"><span lang="" about="/users/vincentl" typeof="schema:Person" property="schema:name" datatype="">vincentl</span></span> <span property="dc:date dc:created" content="2014-01-11T12:02:06+00:00" datatype="xsd:dateTime" class="field field--name-created field--type-created field--label-hidden">sam 11/01/2014 - 13:02</span> <div class="field field--name-field-categorie field--type-entity-reference field--label-above"> <div class="field__label">Catégorie</div> <div class="field__item"><a href="/cat%C3%A9gorie/cms" hreflang="fr">CMS</a></div> </div> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field__label">Tag</div> <div class="field__items"> <div class="field__item"><a href="/taxonomy/term/1" hreflang="fr">Drupal</a></div> <div class="field__item"><a href="/tags/fileentity" hreflang="fr">file_entity</a></div> <div class="field__item"><a href="/tags/media" hreflang="fr">media</a></div> </div> </div> <section class="field field--name-comment-node-blog field--type-comment field--label-hidden comment-wrapper"> <article data-comment-user-id="8" id="comment-19" class="comment js-comment by-node-author"> <mark class="hidden" data-comment-timestamp="1421943789"></mark> <footer class="comment__meta"> <p class="comment__submitted">Soumis par <span lang="" about="/users/vincentl" typeof="schema:Person" property="schema:name" datatype="">vincentl</span> le jeu 22/01/2015 - 17:23</p> <a href="/comment/19#comment-19" hreflang="en">Permalien</a> </footer> <div class="content"> <h3><a href="/comment/19#comment-19" class="permalink" rel="bookmark" hreflang="en">For our english speaking</a></h3> <div class="clearfix text-formatted field field--name-comment-body field--type-text-long field--label-hidden field__item">For our english speaking users, the idea is to update the system table, and change schema_version to a number below the update (in .install file).For example, in the example, in <em>file_entity.install</em>, we have update# 7101, but in system table, the schema_version was #7215.I had to do : update system set schema_version = '7100' where name = 'file_entity'; And then re-run update.php. Drupal will then search for all updates numbers which are more than 7100. And the new table will be created (the update_7101 will be triggered).  </div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=19&amp;1=default&amp;2=en&amp;3=" token="pFM0YP_kPDKouK2EtUL6FOjpmw7K7wAbolYISDNrUb4"></drupal-render-placeholder> </div> </article> <article data-comment-user-id="0" id="comment-20" class="comment js-comment by-anonymous"> <mark class="hidden" data-comment-timestamp="1422461471"></mark> <footer class="comment__meta"> <p class="comment__submitted">Soumis par <span lang="" typeof="schema:Person" property="schema:name" datatype="">A.Torkzadeh</span> le lun 26/01/2015 - 16:37</p> <a href="/comment/20#comment-20" hreflang="fr">Permalien</a> </footer> <div class="content"> <h3><a href="/comment/20#comment-20" class="permalink" rel="bookmark" hreflang="fr">Dear Vincent, Thank you so</a></h3> <div class="clearfix text-formatted field field--name-comment-body field--type-text-long field--label-hidden field__item"><p><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: small; line-height: normal;">Dear Vincent, Thank you so much for your post and also the email you sent me in response to my request for help. </span></p> <div style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: small; line-height: normal;"> I ended up going into phpmyadmin, found the row for "file_entity" in the "system" table and changed the "schema_version" column to "7000", which then triggered 4 updates when I ran update.php. Problem solved now. </div> <div style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: small; line-height: normal;"> </div> <div style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: small; line-height: normal;">However, I now have the following question now: Do you think wise to upgrade to media 2.x ? I believe this problem is related to those of us who at one point upgraded to media 2.x and then downgraded back 1.x. I can't remember why I downgraded but I recall there were a lot of issues with the 2.x  when I tried it about a year ago. </div> <div style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: small; line-height: normal;"> </div> <div style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: small; line-height: normal;">If you did upgrade yourself please let us know what was your experience. </div> <div style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: small; line-height: normal;"> </div> <div style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: small; line-height: normal;">Also one more question: when I had the same file_entity issue a year ago, I changed the name on the media modules folder from 'media' to 'media_1.3'  That name seems to be have become hardcoded in drupal because when drush upgraded to media 1.4 recently (and changed the folder name back to 'media'), drupal could no longer find the media module. It was looking for .../media_1.3/...  Does this make any sense? I was under the impression that module folder names don't matter and drupal only cares about what it finds inside the folders. </div> <div style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: small; line-height: normal;"> </div> <div style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: small; line-height: normal;"> </div> <div style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: small; line-height: normal;"> </div> <div style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: small; line-height: normal;"> </div> </div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=20&amp;1=default&amp;2=fr&amp;3=" token="go1-yc8-iaKQAu4LZqy7nUu-VxMbxobEpzAAldtCbE4"></drupal-render-placeholder> </div> </article> <div class="indented"> <article data-comment-user-id="8" id="comment-21" class="comment js-comment by-node-author"> <mark class="hidden" data-comment-timestamp="1422461452"></mark> <footer class="comment__meta"> <p class="comment__submitted">Soumis par <span lang="" about="/users/vincentl" typeof="schema:Person" property="schema:name" datatype="">vincentl</span> le mer 28/01/2015 - 17:10</p> <p class="parent visually-hidden">En réponse à <a href="/comment/20#comment-20" class="permalink" rel="bookmark" hreflang="fr">Dear Vincent, Thank you so</a> par <span lang="" typeof="schema:Person" property="schema:name" datatype="">A.Torkzadeh</span></p> <a href="/comment/21#comment-21" hreflang="en">Permalien</a> </footer> <div class="content"> <h3><a href="/comment/21#comment-21" class="permalink" rel="bookmark" hreflang="en">Folder name</a></h3> <div class="clearfix text-formatted field field--name-comment-body field--type-text-long field--label-hidden field__item"><p>Well, if you look at <em>system</em> table structure, the first column is <em>filename</em>, which is the full path to the module file.</p> <p>That means that if you rename your directory, then you will be facing a problem.</p> <p>For example, for module <em>popup_message</em>, the content of the table is :</p> <pre>mysql&gt; select filename, name, type from system where name = 'popup_message' ; +------------------------------------------------------+---------------+--------+ | filename | name | type | +------------------------------------------------------+---------------+--------+ | sites/all/modules/popup_message/popup_message.module | popup_message | module | +------------------------------------------------------+---------------+--------+ 1 row in set (0.00 sec) </pre><p>I guess Drupal is scanning directories in search of all <em>*.info</em> files, to check modules or themes.</p> </div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=21&amp;1=default&amp;2=en&amp;3=" token="Ggjh53CjBkn-negFdWrONd_yCijxV8Mb1wMgJ0wJqUw"></drupal-render-placeholder> </div> </article> </div> <article data-comment-user-id="0" id="comment-26" class="comment js-comment by-anonymous"> <mark class="hidden" data-comment-timestamp="1445344623"></mark> <footer class="comment__meta"> <p class="comment__submitted">Soumis par <span lang="" typeof="schema:Person" property="schema:name" datatype="">Alex Kirienko</span> le mar 20/10/2015 - 14:37</p> <a href="/comment/26#comment-26" hreflang="fr">Permalien</a> </footer> <div class="content"> <h3><a href="/comment/26#comment-26" class="permalink" rel="bookmark" hreflang="fr"> Hello,  Vincent.Thank you</a></h3> <div class="clearfix text-formatted field field--name-comment-body field--type-text-long field--label-hidden field__item"> Hello,  Vincent.Thank you for solution. It works perfectly!</div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=26&amp;1=default&amp;2=fr&amp;3=" token="Nr7WqY4eYWdRH0LSW16SBOQJvhZl0M3YsdPsWTCPf5U"></drupal-render-placeholder> </div> </article> </section> Sat, 11 Jan 2014 12:02:06 +0000 vincentl 86 at https://www.vincentliefooghe.net https://www.vincentliefooghe.net/content/fileentity-imagedimensions-does-not-exists#comments