Lập trình cập nhật một thuật ngữ phân loại


7
$term = Term::load($_tid);
$term->field_league_id = 'ID value';
$term->Save();

Tôi đang cập nhật các điều khoản theo mã ở trên nhưng nó không hoạt động. Tạo thuật ngữ theo thuật ngữ-> Save () hoạt động bình thường. Mọi người đã có kinh nghiệm với điều đó xin vui lòng giúp đỡ.

Cập nhật:

$term = Term::load($_tid);
$term->field_league_id->setValue($league_id);
$term->Save();

Giải pháp này không hiệu quả, nó đang ném:

Gọi một hàm thành viên setValue () trên một đối tượng không phải trong ..

Ở đầu, tôi tuyên bố ref. đã sẵn sàng.

use Drupal\taxonomy\Entity\Term;

Mã để tạo phân loại mới đang hoạt động tốt, nhưng không phải để cập nhật.

$term = Term::create([
            'name' => $league->caption,
            'vid' => 'league',
            'field_league_id' => $league_id,
            'field_league_code' => $league->league,
            'field_league_year‎' => $league->year,
            'field_league_numberofteams' => $league->numberOfTeams,
        ]);

        $term->Save();

Câu trả lời:


8
$term = Term::load($_tid);
$term->field_league_id->setValue('ID value');
$term->Save();

Thông tin bổ sung (được yêu cầu trong ý kiến):

Nếu bạn in ra đối tượng, bạn sẽ thấy các trường sử dụng lớp lõi / lib / Drupal / Core / Field / FieldItemList.php.

Bằng cách duyệt qua các phương thức, bạn sẽ thấy một vài hàm để tương tác với đối tượng FieldItemList, chẳng hạn như setValue (),

Khi tôi đang phát triển trong Drupal 8, để tìm hiểu API, tôi sử dụng

dump () hoạt động rất nhiều để xem loại đối tượng tôi đang xử lý và kiểm tra các phương thức của nó.

dump($term); die();

Trong thực tế, trong tệp settings.local.php của tôi, tôi có một tệp đính kèm

include 'my_settings.php';

và trong đó tôi có chức năng này:

function nprint($obj) {
  dump($obj);
  die();
}

Đây là thứ tôi đã sử dụng trong nhiều năm để kiểm tra đồ vật. Bây giờ drupal hướng đối tượng nhiều hơn, in ra các đối tượng để tìm ra lớp chúng sử dụng là điều cần thiết.

Một công cụ thiết yếu khác đối với tôi là sử dụng trình chỉnh sửa cho phép tìm kiếm theo tên tệp (tôi sử dụng phần mềm miễn phí Aptana Studio 3).

Vì vậy, nếu bạn thấy bạn đang xử lý một "FieldItemList", bạn có thể thực hiện "lệnh + t" để tìm kiếm theo tên tệp và nhập vào "FieldItemList". Điều này tiết kiệm rất nhiều nghiên cứu dựa trên web. Và nó giúp bạn tìm hiểu cơ sở mã.

nhập mô tả hình ảnh ở đây


bạn có thể thêm một số lời giải thích?
Adrian Cid Almaguer

Câu trả lời trong đây là ở đâu?
Kevin

Tôi sẽ khuyên bạn nên sử dụng PHPStorm để xem qua các phương pháp và kiểm tra lớp ... nó tiên tiến hơn nhiều so với Aptana. Tôi cũng sẽ khuyên bạn nên sử dụng các câu lệnh xdebug over dump () và die ().
Kevin

Vâng, đó là nhanh hơn. Tôi nên làm điều đó. Tôi thích Aptana vì nó miễn phí.
oknate

1
Loại trường nào là field_league_id, văn bản? hoặc tham chiếu thực thể? Nếu đó là thực thể, bạn có thể cần phải thực hiện setValue (['target_id' => $ League_id]);
oknate

1

Đây là một ví dụ đơn giản:

$term = \Drupal\taxonomy\Entity\Term::load($tid);
if (!empty($term)) {
  $term->field_league_id = 123; // For multivalue fields, use array().
  $term->save();
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.