Эти страницы видны только аутентифицированным пользователям, и кажется, что я не могу получить к ним доступ с php, даже если я запускаю скрипт, когда я вошел в систему как пользователь.
Drupalпроверяет, есть ли у пользователя разрешение на просмотр узла с помощью глобальной переменной $user
.Чтобы сделать то, что вы пытаетесь сделать, если вы не можете поверить, что у текущего вошедшего в систему пользователя есть разрешение на просмотр интересующего вас узла, вы должны прочитать Безопасное олицетворение другого пользователя .
Я не говорю, что вы должны это делать.Прежде чем выдавать себя за другого пользователя, я бы проверил, является ли следующий подход единственно возможным.Например, если вам просто нужно получить доступ к полю, содержащемуся в узле, вы можете использовать node_load()
, который не проверяет, может ли текущий пользователь просмотреть загруженный узел.Если вам нужно показать тело узла, вы можете использовать следующий код:
$node = node_load($nid);
if ($node) {
$body = check_markup($node->body, $node->format, FALSE);
}
Отображение информации, к которой у текущего пользователя нет доступа, считается проблемой безопасности.
Обновление
Проблема с вашим кодом заключается в том, что вы используете file_get_contents('http://mywebsite/admin/store/orders/45/invoice/print')
;при этом вы открываете новое соединение с сайтом, и новое соединение открывается как анонимный пользователь.Именно поэтому узел, который могут видеть прошедшие проверку пользователи, не возвращается.
Даже если код будет работать, вы получите не HTML-код для отображения только узла, а также полную страницу, включая блоки Drupal.обычно показывают сверху и слева / справа.
Если вы заинтересованы в рендеринге узла, вам следует использовать следующий код.(Это просто скелет, и он не полный.)
// $nid is the node ID.
// Check the result, in the case the node has been deleted, or there are other errors.
$node = node_load($nid);
if ($node) {
// The arguments tell the function that you don't want to render a teaser, that the node is
// rendered as it is the only node in the page, and that you don't want the additional
// links that are usually rendered after the node content.
$html = node_view($node, FALSE, TRUE, FALSE);
// This is your code.
$dompdf = new DOMPDF();
$dompdf->load_html($html);
$dompdf->render();
$dompdf->stream("sample.pdf");
}