Điểm:1

Làm cách nào tôi có thể khởi động trang web của mình từ một tập lệnh bên ngoài?

lá cờ cn

Cộng đồng đã hỏi .. Vui lòng làm rõ vấn đề cụ thể của bạn ...

Nhận xét công bằng. Những gì tôi muốn giúp đỡ với là làm cách nào để sửa đoạn mã bên dưới để nó hoạt động với D9.

<?php


use Drupal\Core\DrupalKernel;

$autoloader = require_once 'autoload.php';

// This next line is the problem
$request = Request::createFromGlobals();


$kernel = DrupalKernel::createFromRequest($request, $autoloader, 'prod');

$kernel->boot();

require_once 'core/includes/database.inc';
require_once 'core/includes/schema.inc';


$em = $kernel->getContainer()->get('entity_type.manager');

$entity = $em->getStorage('node')->create(array(

    'type'        => 'article',
    'title'       => 'Druplicon test',
    
 ));       


$entity->save();

?>

Điều này giống như tập lệnh D8 bên dưới hoạt động - ngoại trừ tôi có:

  • loại bỏ việc sử dụng dòng giao hưởng;
  • đã thay thế chức năng không dùng nữa ( cảm ơn leymannx )

Tập lệnh không thành công như đã lưu ý trên dòng
$request = Request::createFromGlobals(); với tin nhắn

chrome-error://chromewebdata/:1 Không tải được tài nguyên: máy chủ phản hồi với trạng thái 500 () VM10:7288 crbug/1173575, các tệp mô-đun không phải JS không được dùng nữa.

Ai đó có thể chỉ ra điều gì sai với dòng này trong D9 (mà tôi đoán có liên quan đến việc loại bỏ tuyên bố sử dụng bản giao hưởng) và nếu có bất kỳ dòng mã nào khác mà D9 không thích.

Cảm ơn vì đã trợ giúp thêm về vấn đề này và xin lỗi vì sự nhầm lẫn trước đó và vì tôi vẫn chưa hiểu sâu về D9.


bài viết này cung cấp mã D8 để tạo một thực thể từ tập lệnh bên ngoài. Tôi đang ở cùng một chiếc thuyền với người đã hỏi câu hỏi này - muốn chuyển đổi từ drupal_bootstrap của D7.

Mặc dù yêu cầu của tôi là D9, nhưng tôi nghĩ tôi nên thử và làm cho tập lệnh D8 hoạt động bằng cách sử dụng bài đăng trên. Ứng dụng của anh ấy là với một thực thể. Tôi muốn tạo các mục bài viết.

Đây là mã tôi lấy từ liên kết trên được cho là hoạt động..

<?php

use Drupal\Core\DrupalKernel;
use Symfony\Component\HttpFoundation\Request;

$autoloader = require_once 'autoload.php';

$request = Request::createFromGlobals();

$kernel = DrupalKernel::createFromRequest($request, $autoloader, 'prod');

$kernel->boot();

require_once 'core/includes/database.inc';
require_once 'core/includes/schema.inc';

$em = $kernel->getContainer()->get('entity.manager');

$entity = $em->getStorage('node')->create(array(

    'type'        => 'article',
    'title'       => 'Druplicon test',
    
 ));       

$entity->save();

?>

Mã này chạy và tạo một mục trong node_field_data bảng nhưng bài viết là không được liệt kê dưới dạng nội dung trên trang web.

Tôi rất cảm thấy theo cách của mình với mã hóa D8/D9, vì vậy hãy thông cảm cho tôi nếu tôi đang làm điều gì đó ngớ ngẩn!

Khi tôi có thể làm cho nó hoạt động, sau đó tôi cần tìm hiểu những thay đổi nào cần thiết cho D9 - vì vậy mọi trợ giúp ở đây đều tốt. Ví dụ: mã D8 sử dụng bản giao hưởng nhưng tôi tin đó không phải là một phần của D9.

Cảm ơn cho bất kỳ sự giúp đỡ về điều này để có được điều này để làm việc. Và để giúp tôi thay thế trải nghiệm D7 của mình bằng D8/D9!

Xin lỗi... Mã này hiển thị trong nội dung - Tôi đang xem trang web D9, không phải trang D8 thử nghiệm mà tôi đã thiết lập. Xin lỗi!

Nhưng tôi vẫn muốn được trợ giúp về những thay đổi mà tôi cần thực hiện đối với tập lệnh này để chạy trong D9.

leymannx avatar
lá cờ ne
entity.manager không được dùng nữa, thay vào đó hãy sử dụng entity_type.manager.
lá cờ in
_"tạo thực thể từ tập lệnh bên ngoài"_ - lý do để thực hiện việc này là gì?
lá cờ cn
Cảm ơn bạn đã lưu ý chức năng không dùng nữa. Tạo các thực thể thông qua tập lệnh bên ngoài là một cách để đồng bộ hóa Drupal với hệ thống khác - ví dụ: một cơ sở dữ liệu MS Access. Có vẻ đơn giản hơn so với sử dụng Dịch vụ.
Kevin avatar
lá cờ in
Bạn có thể "đồng bộ hóa" dữ liệu bằng Di chuyển và cron theo lịch trình. Tôi đã làm điều này trên một số dự án. Lợi ích của việc này là nó sẽ xử lý hầu như mọi thứ cho bạn.
lá cờ cn
Cảm ơn Kevin - Di chuyển (mô-đun lõi) là thứ mà tôi không biết gì về nó. Đang đồng bộ hóa! Âm thanh tuyệt vời. Tôi sẽ kiểm tra. Bit cron là thứ tôi đã sử dụng với tập lệnh bên ngoài, drupal_bootstrap.
Kevin avatar
lá cờ in
Có một số ví dụ ngoài kia. Nhìn vào mô-đun Migrate Plus.
lá cờ cn
Cảm ơn Kevin. Đây có vẻ là một mô-đun đáng kể. Khi bạn nói một số ví dụ, ý của bạn là sử dụng Migrate Plus hoặc tự động tải Drupal trong một tập lệnh bên ngoài? Sử dụng Di chuyển có thể là giải pháp tốt nhất - vấn đề của tôi là chuyển đổi trang web D7 hiện có khoảng một tá tập lệnh bên ngoài. Đó là lý do tại sao tôi muốn sắp xếp tập lệnh trên cho D9, nếu có thể. Nếu D9 không hoạt động như D7/D8 thì mô-đun này có thể không chỉ là giải pháp tốt nhất mà còn là giải pháp duy nhất! Cảm ơn một lần nữa.
Kevin avatar
lá cờ in
Đi theo hướng khác, xác định nguồn cho việc di chuyển. Nó có thể kết nối với cơ sở dữ liệu, api JSON/XML, đọc tệp dữ liệu JSON hoặc XML hoặc tệp CSV. Đừng bận tâm đến việc khởi động và cố gắng cập nhật các bảng ngẫu nhiên, nó hoạt động nhiều hơn gấp 10 lần.
lá cờ cn
Tôi đang tìm kiếm tất cả tài liệu về Migrate Plus mà tôi có thể tìm thấy. Từ những gì bạn vừa nói nếu tôi có MySQL DB được MS Access sử dụng, thì tôi có thể đồng bộ hóa. điều này với một thực thể D9? Điều này sau đó sẽ phản ánh chính xác những gì tôi hiện đang làm trong D7 với Báo cáo Forena (không có phiên bản D9) và sẽ cung cấp, như bạn nói, một giải pháp tốt hơn nhiều. Cảm ơn một lần nữa.
Điểm:2
lá cờ cn

Đây là mã cho phép tạo thực thể trong trang web D9 từ tập lệnh từ xa - chạy từ cùng miền với trang web D9 chứ không phải từ thư mục gốc của D9.

<?php
//drupal root directory
chdir('/var/www/vhosts/example.org/httpdocs/dev3');

use Drupal\Core\DrupalKernel;
use Symfony\Component\HttpFoundation\Request;

$autoloader = require_once 'autoload.php';

$request = Request::createFromGlobals();

$kernel = DrupalKernel::createFromRequest($request, $autoloader, 'prod');

$kernel->boot();

require_once 'core/includes/schema.inc';

$em = $kernel->getContainer()->get('entity_type.manager');

$entity = $em->getStorage('node')->create([
  'type'        => 'article',
  'title'       => 'Druplicon test' . date("d/m/Y")." ". date("h:i:sa"),
]);

$entity->save();

?>

Manh mối cho mã này đến từ bài viết này giải thích cách Drupal tải một trang. Nó nói "hãy xem index.php trong thư mục gốc, nếu bạn muốn xem Drupal làm điều đó như thế nào". Khoảng 6 dòng mã!

Tại sao tập lệnh trước đó của tôi, được chuyển từ D8, không hoạt động? Dưới đây là một số điều tôi đã học được:

  • dòng $request = Request::createFromGlobals(); đã dừng chạy tập lệnh trước đó hoạt động tốt trong mã này;
  • không có tệp database.inc trong thư mục gốc trên trang D9;
  • Tôi đã thay đổi entity.manager không dùng nữa thành entity_type_manager thành leymannx khuyên;
  • D9 dường như sử dụng Symphony - nó xuất hiện trong index.php trong bản phát hành 9.2.7. Nhưng nó là phiên bản mới hơn D8;
  • tập lệnh bên ngoài không được nằm trong thư mục gốc của Drupal - thậm chí không phải để thử nghiệm - nếu không thì trang web kích hoạt với lỗi 404;
  • Nếu bạn muốn tìm thông tin về bootstrapping trên Google, đừng sử dụng Bootstrap - nếu không, tất cả những gì bạn thấy là thông tin. về chủ đề!

Làm cho điều này hoạt động có nghĩa là tôi có thể thay thế các tập lệnh bên ngoài D7 bằng D9. tôi lấy điểm kevin làm về việc sử dụng mô-đun di chuyển nhưng tôi nghĩ việc khởi động lại là một giải pháp tốt hơn cho các trường hợp sử dụng của tôi. Ví dụ: người dùng thêm bản ghi vào cơ sở dữ liệu MySQL trong Microsoft Access dưới sự kiểm soát của chương trình. Sau đó, mã sẽ chạy tập lệnh bên ngoài để thêm các trường đã chọn vào thực thể Drupal. Ngay lập tức người dùng Access và người dùng web sẽ thấy cùng một dữ liệu cập nhật.

Cảm ơn tất cả những người đã đóng góp về điều này. Tôi hy vọng bài đăng này sẽ làm sáng tỏ cách lộn xộn mà tôi đã bắt đầu câu hỏi này.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.