Thêm tiêu đề và văn bản thay thế cho hình ảnh tự động?


6

Trong trang web của tôi người dùng có thể tải lên nội dung và hình ảnh.

Mục tiêu của tôi là khi người dùng đang tải nội dung lên trang web và cả hình ảnh - tiêu đề của nội dung cũng sẽ là tiêu đề hình ảnh và văn bản thay thế của hình ảnh. Hiện tại tôi đang sử dụng trường hình ảnh cốt lõi.

Có cách nào hoặc một mô-đun có thể đạt được tất cả điều đó?

Câu trả lời:


10

Cách trực tiếp nhất có thể là làm một cái gì đó dọc theo các dòng này trong hook_node_presave () trong một mô-đun tùy chỉnh:

function YOURMODULE_node_presave($node) {

  if(isset($node->field_image)) {
    $node->field_image[LANGUAGE_NONE][0]['alt']=$node->title;
    $node->field_image[LANGUAGE_NONE][0]['title']=$node->title;
  }

}

nơi field_imagelà tên thực tế của lĩnh vực hình ảnh bạn có trong nút của bạn.

Nếu bạn không muốn người dùng của mình bị nhìn thấy hoặc cố gắng thay đổi điều này, chỉ cần đảm bảo rằng các hộp alttitlekhông được kiểm tra trong thiết lập trường, ví dụ:

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

vì đây chỉ là cho tiện ích thêm / chỉnh sửa trường trong biểu mẫu; đoạn mã trên vẫn sẽ hoạt động ngay cả khi các thuộc tính này không được "bật".


Có thể đặt văn bản thay thế mặc định thành tên của tệp hình ảnh mà không cần mở rộng không? Điều này có thể giúp nếu một trang web thiếu hàng triệu văn bản thay thế.
CocoSkin

1
@CocoSkin, chắc chắn rồi. Nếu bạn muốn làm điều đó, tôi sẽ điều tra theme_image ( api.drupal.org/api/drupal/includes%21theme.inc/feft/, ) và ghi đè lên nó trong chủ đề của bạn, ví dụ: nếu alt không được đặt, hãy lấy Tên từ đường dẫn, xoa bóp nó theo ý thích của bạn và sau đó sử dụng nó cho văn bản thay thế
Jimajamma

hy vọng tôi không làm phiền bạn nhiều Điều đó có nghĩa là Nó sẽ có cùng mã như trên nhưng sử dụng "function theme_image ($ node)" thay vì "function YourMODULE_node_presave ($ node)"? Nếu vậy, còn $ path thì sao? và $ alt?
CocoSkin

hoàn toàn không phải là vấn đề, bạn sẽ tạo một hàm trong chủ đề của mình có tên THEME_image (....) như được mô tả trong api và sử dụng nó thay vì MODULE_node_presave (....)
Jimajamma

6

Bạn có thể sử dụng Mã thông báo ImageField :

Mô-đun Mã thông báo ImageField mở rộng chức năng mặc định của các trường Hình ảnh thêm khả năng chỉ định giá trị mặc định và sử dụng mã thông báo nút trong văn bản Alt và Tiêu đề.

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


Có vẻ như một mô-đun là không rõ ràng bây giờ. Nhưng phiên bản dev hoạt động tốt.
milkovsky

1

Đây là một quy tắc D7 tôi đã tạo để làm điều đó. Chỉ cần vào Quy tắc> Nhập và Lưu . Sẽ tự động thêm [node:title][site:name]mã thông báo vào trường văn bản thay thế khi nội dung được lưu hoặc cập nhật:

{ "rules_alt_text_default" : {
    "LABEL" : "Alt Text Default",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "TAGS" : [ "Custom" ],
    "REQUIRES" : [ "rules" ],
    "ON" : { "node_insert" : [], "node_update" : [] },
    "IF" : [
      { "entity_has_field" : { "entity" : [ "node" ], "field" : "field_image" } }
    ],
    "DO" : [
      { "data_set" : {
          "data" : [ "node:field-image:alt" ],
          "value" : "[node:title] - Available at [site:name]"
        }
      }
    ]
  }
} 

0

Có 2 Phương pháp dễ dàng để đạt được điều này:

Phương pháp 1 đơn giản hơn; Định cấu hình Mô-đun thực thể tệp của bạn và trong các trường thuộc tính alt và tiêu đề, thay thế mã thông báo bằng [current-page:title]một trong số các mã thông báo có sẵn

Xin lưu ý: đối với phương pháp này ở trên, các trường tiêu đề và thuộc tính được thay thế nếu các trường trống, nếu bất kỳ văn bản nào được nhập vào chúng bất cứ lúc nào, văn bản đó sẽ được sử dụng thay thế.

Phương pháp 2 sử dụng Quy tắc để đạt được điều này và đây là cách:

  1. Tạo quy tắc với các sự kiện sau:

    a. sau khi lưu nội dung mới

    b. sau khi cập nhật nội dung hiện có

  2. Add condition: "content is of type: (add your content type(s) here.....)" Note: without this condition, rules does not seem to pull out the alt and title attributes from your image field. Bạn cũng có thể thêm các điều kiện khác để kiểm tra xem các trường có trống hay không ("sử dụng giá trị dữ liệu trống ....") để bạn không thay đổi văn bản hiện có trong các trường. Điều này cho phép kiểm soát tốt hơn Phương pháp 1 ở trên.

  3. Thêm 2 hành động để đặt giá trị dữ liệu của bạn cho cả trường alt và trường tiêu đề ở đây bằng cách sử dụng tiêu đề nút.

Để kiểm soát tốt hơn, bạn có thể cài đặt mô-đun " Quy tắc có điều kiện " để kiểm tra xem cả hai hoặc một trong hai thuộc tính alt và tiêu đề đã được điền chưa (kịch bản ví dụ là "nếu alt KHÔNG trống và tiêu đề trống, cập nhật thuộc tính tiêu đề" hoặc "nếu alt trống và tiêu đề KHÔNG trống, cập nhật thuộc tính alt ... vv).

Nếu bạn không muốn cài đặt mô-đun quy tắc có điều kiện nhưng vẫn muốn kiểm soát tốt hơn trong việc kiểm tra các trường trống, thì chỉ cần tạo 2 quy tắc khác nhau để kiểm tra độc lập cả hai trường.

  1. Lưu quy tắc của bạn. đó là nó.

Bạn cũng có thể chỉ cần nhập quy tắc này do tôi tạo, thực hiện các bước đơn giản ở trên. Lưu ý rằng trường của tôi được đặt tên là "field_image" và loại nội dung của tôi là "bài viết":

{ "rules_update_image_alt_and_title_automatically" : {
    "LABEL" : "Update image alt and title automatically",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules" ],
    "ON" : { "node_update" : [], "node_insert" : [] },
    "IF" : [
      { "node_is_of_type" : { "node" : [ "node" ], "type" : { "value" : { "article" : "article" } } } }
    ],
    "DO" : [
      { "data_set" : { "data" : [ "node:field-image:alt" ], "value" : "[node:title]" } },
      { "data_set" : { "data" : [ "node:field-image:title" ], "value" : "[node:title]" } }
    ]
  }
}
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.