Làm cách nào để ẩn nội dung của các nút / hoàn toàn và vẫn duy trì sử dụng trong Drupal?


7

Vì vậy, để bắt đầu, tôi đã thấy:

Tất cả các câu trả lời cho những câu hỏi đó làm cho đề xuất làm cho nút không được công bố, đó là giải pháp có vẻ sạch nhất đối với tôi, với điều kiện là tôi đang tạo một số loại nội dung được xem riêng với trình chiếu, tức là www.mysite.com/node/40hiển thị danh sách tất cả các bản thô hình ảnh tạo nên trình chiếu của tôi trong một khối ở nơi khác không phải là thứ tôi muốn. Tôi chỉ muốn hình ảnh có thể xem được trong bối cảnh trình chiếu.

Tuy nhiên, khi tôi làm theo những câu trả lời này và làm cho nội dung của nút không được công bố, nội dung không thể truy cập được vào trình chiếu Xem: Hiện tại nó trống đối với người xem ẩn danh. Có điều gì đó tôi đã bỏ lỡ trong cách làm cho một nút không được xuất bản, nhưng vẫn cho phép nội dung của nó được truy cập thông qua Chế độ xem, dưới dạng một khối?

Tôi đang tìm cách để làm điều này mà không cần sử dụng các tùy chọn htaccess, hook hoặc javascript mà tôi đã thấy được đề cập trong các liên kết ở trên.

Tôi không thể tưởng tượng rằng có một danh sách nội dung có thể truy cập một cách trần trụi nodes/123thực sự là một tính năng có chủ ý.

Một phẩm chất khác làm cho vấn đề này trở nên khó khăn --- có nhiều cách để ngăn chặn truy cập node/123, nhưng chúng cũng có thể cản trở khả năng của bạn trong việc tạo hoặc chỉnh sửa các nút!


xin chào các bạn. IMHO, tôi đề nghị xem lại một lần nữa các liên kết của bạn, không xuất bản không phải là câu trả lời duy nhất, có các móc nối, lượt xem và các cách khác được liệt kê.
cigotete

Cảm ơn, moon.watcher, tôi hiểu, nhưng tôi nghĩ việc tạo ra sự khác biệt giữa khu vực tổ chức riêng tư và khu vực trưng bày công cộng có vẻ rất hữu ích (và dễ dàng). Tôi hiểu có những cách khác, nhưng anh bạn, tôi ước tôi có thể làm theo cách này để làm việc!
Găng tay

Bạn đã thử sử dụng htaccess chưa?
ram4nd

Vâng, và tôi hiểu rằng sẽ đạt được hành vi đúng --- tuy nhiên, có vẻ như nên có một cách trong hệ thống để làm việc này, phải không? Một số mặc định hoặc hộp kiểm ở đâu đó? Hãy để tôi sửa đổi câu hỏi của tôi để làm rõ phần đó. Cảm ơn!
Găng tay

1
Câu trả lời được chấp nhận để drupal.stackexchange.com/questions/5622/... nào không yêu cầu làm cho nội dung chưa được công bố.
mpdon Arena

Câu trả lời:


5

Có hai mô-đun Drupal cung cấp chức năng này:


Cảm ơn vì những điều này! Tôi sẽ đề xuất một mô-đun tùy chỉnh để làm việc này, nhưng tất nhiên có một mô-đun cho nó. Vấn đề thực sự của câu hỏi này là: làm thế nào để xử lý các bit nội dung chỉ nên thấy trong một bản mashup nào đó, không bao giờ tự nó và đó chính xác là những gì hai mô-đun này xử lý. Tóm tắt hơn, bất cứ khi nào bạn có nội dung như vậy, tốt nhất không nên biến nó thành một nút, mà là một thực thể không phải nút, vì lý do này và các lý do khác (ví dụ: bạn có thể không muốn tất cả các nút đó bắn vào nó).
Alan Dixon

Upvote để giới thiệu Rabbit Hole. Đã thử nó và làm công việc dễ dàng. Không thử Node nội bộ nên không thể so sánh.
consuela

2

Johan Falk của nodeone.se vừa mới thực hiện một loạt video xuất sắc trên Trình quản lý trang (một phần của cTools, một mô-đun rất phổ biến) và anh ấy đã trình bày một trường hợp sử dụng như bạn đang mô tả rất tốt. liên kết .

Về cơ bản, bạn thiết lập một biến thể trong Trình quản lý trang và có phản hồi là mã yêu cầu http (có thể là 301 trong trường hợp của bạn) để chuyển hướng đến đích dự định của bạn. Trong ví dụ của anh ấy (tôi nghĩ đó là video thứ 2 hoặc thứ 3 trong sê-ri, tất cả đều khá nhanh) anh ấy đã sử dụng các tham chiếu nút và anh ấy không muốn ai đến được 'nút phụ' mà chuyển hướng bạn đến phụ huynh nút nếu bạn đã cố gắng truy cập nó. Trường hợp sử dụng của bạn nghe có vẻ đơn giản hơn nữa, chỉ cần có ai đó cố gắng truy cập vào một trong các nút trình chiếu của bạn được chuyển hướng đến trang hiển thị trình chiếu đầy đủ chính xác.

Bạn thậm chí không cần bảng để có được tất cả các phép thuật này để làm việc. Và bạn có thể trở nên khá phức tạp trong các quy tắc chuyển hướng của mình nếu bạn có những thứ như tham chiếu nút được cài đặt để tải các nút liên quan.


Cảm ơn, cơ hội G! Tôi đang xem qua các hướng dẫn bây giờ, và có lẽ điều đó sẽ chăm sóc nó.
Găng tay

Thực sự là loạt video xuất sắc (mặc dù không "gần đây" nữa). Và FYI: nodeone.se links không hoạt động nữa. Bạn muốn cập nhật liên kết của bạn?
Pierre.Vriens

1

Nếu đó chỉ là vấn đề về khả năng truy cập của công cụ tìm kiếm, bạn có thể sử dụng tệp robot.txt , điều này ngăn công cụ tìm kiếm truy cập vào trang nhất định trên trang web của bạn.

Mặc dù sử dụng Technic này, người dùng trang web của bạn vẫn có thể truy cập các URL như trong ví dụ của bạn www.mysite.com/node/40


Cảm ơn! Điều đó có ý nghĩa, nhưng cũng có một cách để làm cho nó hoàn toàn không thể tiếp cận được với cả người và người? Tôi cho rằng có mã .htaccess dễ dàng cho việc này, nhưng điều đó cũng có vẻ như quá mức cần thiết. Có thể tôi sai, nhưng có vẻ như đó là sự phân biệt dễ dàng và rõ ràng. Ý tôi là: tôi không thể tưởng tượng ai đó sẽ cố tình muốn có một danh sách rác được định dạng kém trong menu nút, bạn biết không?
Găng tay

Vâng sau đó tôi sẽ lưu câu hỏi của bạn sau này vì tôi tự hỏi bản thân mình tự hỏi làm thế nào để đạt được điều đó là tốt. Tôi chưa có thời gian để điều tra vấn đề này, nhưng nếu tôi nhận được câu trả lời sớm, tôi chắc chắn sẽ đăng nó ở đây. Mặc dù như moon.watcher đề nghị bạn nên chỉnh sửa tiêu đề câu hỏi của mình, điều này hơi khó hiểu.
lụaAdmin

OK, tuyệt, tôi đã điều chỉnh tiêu đề để làm rõ "hoàn toàn" thay vì tiêu điểm "công cụ tìm kiếm". Cảm ơn!
Găng tay

0

EDIT: KHÔNG BAO GIỜ, ĐÂY KHÔNG LÀM VIỆC!

Tôi phát hiện ra rằng bất kỳ quy tắc truy cập nào tôi có thể thêm để cho phép quản trị viên tạo và chỉnh sửa nội dung, bởi vì chỉnh sửa nội dung nằm trong "/ node / add / ..." cũng giúp hạn chế quyền truy cập của người dùng ẩn danh và cho phép tất cả người dùng xem nội dung. Sắp xếp lại nơi tôi đã bắt đầu, nhưng để lại điều này trong trường hợp nó giúp bất kỳ ai khác nhìn thấy đường đi. Câu trả lời gốc sau:

OK, đây là công thức để đạt được điều này theo cách không lập trình, đơn giản như tôi có thể (giải thích tại sao sau đây):

  1. Kích hoạt mô-đun Trình quản lý trang (một phần của ctools), cài đặt và bật mô-đun Chuyển hướng của Trình quản lý trang: http://drupal.org/project/page_manager_redirect .
  2. Trong menu quản trị, đi đến Cấu trúc >> Trang
  3. Trong bảng bên dưới, xác định trang tùy chỉnh "System node_view Node template / node /% node" và nhấp vào "chỉnh sửa" ở bên phải.
  4. Đối với tôi, theo mặc định, tôi đã có "Trang cơ bản" và "Người kể chuyện". Tôi nhấn vô hiệu hóa cả hai thứ này (nhưng bạn có thể muốn giữ chúng, nếu bạn sử dụng các tính năng này --- tôi thì không).
  5. Nhấp vào "Thêm biến thể"
  6. Tiêu đề: "chuyển hướng đến chính." Kiểu biến thể: "Mã phản hồi HTTP." Và kiểm tra "Quy tắc lựa chọn." Nhấp vào "Tạo biến thể."
  7. Bây giờ, thêm quy tắc lựa chọn.
    7.a. Trong hộp thả xuống, đi đến "người dùng: Vai trò", nhấp vào "Thêm." >> KHÔNG (Người dùng đã đăng nhập có vai trò "quản trị viên")
    7.b. Thêm quy tắc lựa chọn khác >> nút: type. Nhấp vào mọi loại nội dung mà bạn không muốn người dùng có thể thấy các nút trần. Sau đó bấm KHÔNG. Đối với tôi, vì tôi không bao giờ muốn các nút trần hiển thị, tôi đã nhấp vào mọi loại nội dung tôi có.
  8. Đặt mã phản hồi HTTP thành 301 và để trống chuyển hướng (= thành chính).

Cơ sở lý luận:

  • Tôi đã đi tuyến đường này thay vì htaccess hoặc tạo các mô-đun vì đây có vẻ như là loại vấn đề có thể truy cập được trong giao diện. Một lần nữa, tôi không tin rằng sẽ có một nhóm kêu gọi cho tất cả nội dung hiển thị dưới các nút /, được đánh số, nếu đó không phải là hành vi mặc định.
  • Về quy tắc lựa chọn: Nhóm đầu tiên, đối với quản trị viên (hoặc bất kỳ nhóm cấp biên tập viên nào bạn có), đảm bảo rằng bạn vẫn có thể tạo và chỉnh sửa nội dung! Nếu bạn bỏ qua phần này, khi bạn cố gắng thêm nội dung mới, bạn sẽ được chuyển hướng đến chính. Loại thứ hai, về các loại nội dung, là cần thiết để cho phép xem các trang dưới bí danh URL của chúng. Nếu không có kiểm tra này, khi tôi nhấp vào nói, bài đăng trên blog, tôi không thể xem chúng ở toàn trang, chỉ có lời trêu ghẹo của họ. Không chắc chắn tại sao đây là trường hợp, hoặc tại sao tôi cần phải thực hiện các quyền phủ định ở đây, thay vì các quyền tích cực. Nhưng đây là những gì tôi đã phải thay đổi để cho phép các biên tập viên chỉnh sửa và người xem ẩn danh để xem các loại nội dung được định dạng và không phải nút /.

Cạm bẫy tiềm năng:

Nếu bạn tạo một loại nội dung mới, bạn sẽ cần nhớ quay lại trình quản lý trang và cập nhật (nghĩa là chọn hộp của nó trong quy tắc lựa chọn thứ hai).

Cải thiện trong tương lai:

Nếu ai đó thực sự tuyệt vời, họ sẽ tạo một mô-đun duy nhất thực hiện quy trình này một cách tự động và gọi nó là "Ẩn các nút". =) Một lần nữa, tôi muốn ẩn "nút /" là hành vi Drupal mặc định và tôi chắc chắn tôi không phải là người duy nhất. Tôi thực sự xem đây là khu vực dàn dựng và sưu tập --- có vẻ rất lạ khi cho phép chúng được hiển thị cho công chúng. Nó giống như nhìn thấy nhà ảo thuật nhét chim bồ câu trong tay áo của mình!

Cảm ơn Chance G đã chỉ cho tôi ở đó và hướng dẫn của Johan Falk để giúp tôi đi!

EDIT: CẬP NHẬT

Từ những điều trên, tôi sẽ nói câu trả lời cho câu hỏi này là không có cách nào để làm điều này. Bạn đang bị mắc kẹt với các nút!


Nói thêm một chút, có vẻ như vấn đề là tôi muốn "trang cơ bản" luôn hiển thị để cho phép, giả sử, các bài đăng trên blog cá nhân được hiển thị, nhưng thật không may, nhìn thấy nút / 123 cũng là một trang cơ bản . Tuy nhiên, có lẽ điều này chỉ ra một giải pháp khác? Làm cách nào tôi có thể lấy nút / 123 để không được tính là một trang cơ bản, nhưng blog / my-blog-post để tính?
Găng tay

Thay vào đó, bạn có phiền khi chấp nhận một câu trả lời khác không?
leymannx

0

Vì không ai đưa ra câu trả lời mã ở đây nên một lựa chọn khác:

/**
 * Implements hook_init().
 */
function HOOK_init() {
  $object = menu_get_object();
  $action = arg(2);
  if(isset($object->type) && $object->type == 'TYPE_OF_NODE' && (empty($action) || $action == 'view')) {
    drupal_goto();
  }
}

Thay thế HOOKbằng tên của mô-đun của bạn và thay thế TYPE_OF_NODEbằng tên của loại nút mà bạn muốn ẩn.

Điều này sẽ chỉ chuyển hướng khi đường dẫn là node/123hoặc node/123/view. node/123/edithoặc node/123/whateverđược cho phép. Lưu ý đây là đường dẫn, không phải URL tôi đang nói đến. Bí danh đường dẫn của nút không liên quan ở đây.


0

Sử dụng mô-đun Quy tắc, bạn có thể thực hiện quy tắc tương tự như sau:

{ "rules_check_url" : {
    "LABEL" : "Disallow node/* access",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules" ],
    "ON" : { "init" : [] },
    "IF" : [
      { "text_matches" : {
          "text" : [ "site:current-page:url" ],
          "match" : "node\/\\d+$",
          "operation" : "regex"
        }
      }
    ],
    "DO" : [
      { "drupal_message" : {
          "message" : "Sorry, URLs like [site:current-page:url] are not allowed around here ...",
          "type" : "error"
        }
      },
      { "redirect" : { "url" : "no_access" } }
    ]
  }
}

Bất kỳ ai sử dụng URL như node/...sẽ được chuyển hướng đến một trang có đường dẫn no_access(điều chỉnh đường dẫn đó để phù hợp với nhu cầu của bạn).

Quy tắc trên không (chưa) tính đến việc chỉ áp dụng "hành động" cho các vai trò được chọn (chẳng hạn như người dùng ẩn danh) mà thôi. Nhưng đối với bất kỳ ai quen thuộc với mô-đun Quy tắc, đó là "Điều kiện" thẳng tiến để thêm ... Nếu bạn chỉ muốn ngăn chặn quyền truy cập đó vào danh sách hạn chế (một vài) nút, thì không cần sử dụng hoạt động "regex" trong điều kiện "text_matches" (chỉ cần thay thế nó bằng một khớp chính xác của (các) nút có liên quan).

Để thử nghiệm quy tắc này trong trang web của riêng bạn, chỉ cần sao chép toàn bộ mã Quy tắc ở trên và dán quy tắc mới vào trang web của riêng bạn, được tạo thông qua chức năng "Nhập". Sau đó chỉnh sửa / tinh chỉnh thêm để làm cho nó phù hợp với môi trường của chính bạn (ví dụ: thông báo "Xin lỗi, ..." sẽ được hiển thị).

Chú ý : quy tắc này thực hiện nghiêm túc phần "hoàn toàn" từ tiêu đề câu hỏi ... Với quy tắc này được bật (không có điều kiện Quy tắc bổ sung nào được thêm vào để chỉ áp dụng quy tắc này cho quy tắc đã chọn), ngay cả quản trị viên (hoặc người dùng / 1 ... ) sẽ không thể có quyền truy cập vào bất kỳ (lặp lại: bất kỳ) URL nào như node/.... Cách duy nhất để giải quyết vấn đề đó là (tạm thời) vô hiệu hóa quy tắc này, thêm các điều kiện Quy tắc có liên quan (để cho phép các vai trò được chọn bằng mọi cách) và bật lại quy tắc.

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.