{"id":14104,"date":"2023-08-10T20:37:07","date_gmt":"2023-08-10T14:37:07","guid":{"rendered":"https:\/\/shra.ru\/?p=14104"},"modified":"2023-08-10T20:37:09","modified_gmt":"2023-08-10T14:37:09","slug":"programmnoe-sozdanie-stati-s-perevodom-v-drupal","status":"publish","type":"post","link":"https:\/\/shra.ru\/2023\/08\/programmnoe-sozdanie-stati-s-perevodom-v-drupal\/","title":{"rendered":"\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u0441 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u043c \u0432 Drupal"},"content":{"rendered":"\n
\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 — \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a, \u0442\u0435\u043a\u0441\u0442 \u0441\u0442\u0430\u0442\u044c\u0438, \u0438 \u0442\u0435\u0433\u0438. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0430 \u0434\u0432\u0443\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 — ‘ru’ \u0438 ‘en’. \u0412\u0430\u043c \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e \u0438 \u0435\u0451 \u043f\u0435\u0440\u0435\u0432\u043e\u0434.<\/p>\n\n\n\n\n\n\n\n
\u042f \u043f\u043e\u043b\u0430\u0433\u0430\u044e, \u0447\u0442\u043e \u0443\u0436\u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d \u043c\u043e\u0434\u0443\u043b\u044c Content Translation<\/em>, \u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d \u0442\u0438\u043f \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0435\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c. <\/p>\n\n\n\n \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u0434\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u043c\u0438 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u043d\u0430\u0431\u043e\u0440 \u0442\u0435\u0433\u043e\u0432. <\/p>\n\n\n\n \u0414\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u0443\u0441\u0442\u044c \u044d\u0442\u043e \u0431\u0443\u0434\u0443\u0442 \u0434\u0432\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u0433\u0434\u0435 \u0432 \u043e\u0434\u043d\u043e\u043c \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0442\u0435\u0433\u0438 \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u043c \u044f\u0437\u044b\u043a\u0435, \u0430 \u0432 \u0434\u0440\u0443\u0433\u043e\u043c — \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u0435\u0440\u0432\u043e\u043c\u0443 \u043c\u0430\u0441\u0441\u0438\u0432\u0443 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<\/p>\n\n\n\n \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0430\u0439\u0434\u0438 \u044d\u0442\u0438\u0445 \u0442\u0435\u0433\u043e\u0432 \u0432 \u043e\u0434\u043d\u043e\u043c \u0441\u043f\u0438\u0441\u043a\u0435.<\/p>\n\n\n\n \u041f\u0443\u0441\u0442\u044c \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u043c \u0440\u0443\u0441\u0441\u043a\u043e\u0435 \u0438 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0430 \u043e\u043d\u0430 \u0432\u0435\u0440\u043d\u0435\u0442 \u043d\u0430\u043c \u043e\u0431\u044a\u0435\u043a\u0442 \u0442\u0435\u0440\u043c\u0438\u043d\u0430 \u0442\u0430\u043a\u0441\u043e\u043d\u043e\u043c\u0438\u0438 (\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0430 \u0438\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0433\u043e).<\/p>\n\n\n\n \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0432\u0437\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u043d\u0430 \u0441\u0430\u043c\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e. \u042f \u0435\u0451 \u043e\u0444\u043e\u0440\u043c\u0438\u043b \u0432 \u0432\u0438\u0434\u0435 \u0442\u0440\u0435\u0439\u0442\u0430, \u0447\u0442\u043e\u0431\u044b \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u0431\u044b\u043b\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0432 \u0440\u0430\u0437\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b.<\/p>\n\n\n\n \u0422\u0430\u043a \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0442\u0435\u0433\u0438 \u0432 \u0442\u0430\u043a\u0441\u043e\u043d\u043e\u043c\u0438\u0438 \u0441 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430\u043c\u0438 \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0438\u0445 \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n\n\n\n \u0412\u0430\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0445 \u043f\u043e\u043b\u0435\u0439, \u0432\u0440\u043e\u0434\u0435 field_body<\/em>, \u0431\u044b\u043b\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043e, \u0447\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442\u044c \u044d\u0442\u043e \u043f\u043e\u043b\u0435. \u042d\u0442\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442 drupal \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u044f\u0437\u044b\u043a\u043e\u0432.<\/p>\n","protected":false},"excerpt":{"rendered":" \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 — \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a, \u0442\u0435\u043a\u0441\u0442 \u0441\u0442\u0430\u0442\u044c\u0438, \u0438 \u0442\u0435\u0433\u0438. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0430 \u0434\u0432\u0443\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 — ‘ru’ \u0438 ‘en’. \u0412\u0430\u043c \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e \u0438 \u0435\u0451 \u043f\u0435\u0440\u0435\u0432\u043e\u0434.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11],"tags":[163],"acf":[],"yoast_head":"\n\u0422\u0435\u0433\u0438<\/h2>\n\n\n\n
\/\/ $listTerm - \u044d\u0442\u043e \u0442\u0435\u0433\u0438 \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u043c\n\/\/ \u0430 $listTermEn - \u043d\u0430 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u043c\nforeach($listTerm as $i => $termName) {\r\n $term = $this->getTerm($termName, $listTermEn[$i], 'tags');\r\n $tags[] = ['target_id' => $term->id()];\r\n}\r<\/code><\/pre>\n\n\n\n
<?php\r\n\r\nnamespace Drupal\\MYMODULE\\Trait;\r\n\r\nuse Drupal\\taxonomy\\Entity\\Term;\r\n\r\ntrait TaxonomyTrait {\r\n function getTerm(string $termNameRu, string $termNameEn, string $vid): Term {\r\n \/\/ \u0438\u0449\u0435\u0442 \u0442\u0435\u0440\u043c\u0438\u043d \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u043e\u0432\u0430\u0440\u0435 $vid\n \/\/ \u043f\u043e \u0440\u0443\u0441\u0441\u043a\u043e\u043c\u0443 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0443\r\n $terms = \\Drupal::entityTypeManager()\r\n ->getStorage('taxonomy_term')\r\n ->loadByProperties([\r\n 'name' => trim($termNameRu),\r\n 'langcode' => 'ru',\r\n 'vid' => $vid\r\n ]);\r\n\r\n if (!sizeof($terms)) {\n \/\/ \u0435\u0441\u043b\u0438 \u0442\u0435\u0440\u043c\u0438\u043d \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d,\n \/\/ \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0435\u0433\u043e\r\n $term = Term::create([\r\n 'name' => trim($termNameRu),\n 'langcode' => 'ru',\n 'vid' => $vid,\r\n ]);\r\n $term->save();\r\n \/\/ \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u043d\u0430 \u0430\u043d\u0433\u043b.:\r\n $term_en = $term->addTranslation('en');\r\n $term_en->name->value = trim($termNameEn);\r\n $term_en->save();\r\n\r\n return $term;\r\n }\r\r\n return array_pop($terms);\r\n }\r\r\n}<\/code><\/pre>\n\n\n\n
\/\/ $title_ru, $title_en, $descr_ru, $descr_en \n\/\/ - \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u0438 \u0442\u0435\u043a\u0441\u0442\u044b \u043d\u0430 \u0434\u0432\u0443\u0445 \u044f\u0437\u044b\u043a\u0430\u0445\n$user = \\Drupal::currentUser();\n$node = \\Drupal\\node\\Entity\\Node::create([\n 'uid' => $user->id(),\n 'type' => 'pic',\n 'status' => 1,\n 'langcode' => 'ru',\n 'title' => $title_ru,\n 'field_body' => [\n 'value' => $descr_ru,\n 'format' => 'full_html',\n ],\n 'field_tags' => $tags\n]);\n$node->save();\n\n$node_en = $node->addTranslation('en', [\n 'title' => $title_en,\n 'field_body' => [\n 'value' => $descr_en,\n 'format' => 'full_html',\n ],\n]);\n$node_en->save();<\/code><\/pre>\n\n\n\n