2012-10-13 3 views
1

highlight.js 라이브러리를 기반으로 기사의 코드 샘플을 강조 표시하는 모듈을 만들었습니다. 이 라이브러리는 <> < 코드> ... </code> </pre> 태그에 코드 샘플을 삽입해야합니다. 기사를 쓸 때 < pre> 태그를 추가하고 싶지 않습니다. 다른 형광펜 라이브러리는 필요 없기 때문에 기사를 수정하지 않고 라이브러리를 전환 할 수 있기를 원합니다. 그래서 동적으로 < 코드> 태그 < 미리 포장해야합니다. 내가 성공하지 _node_view (그리고 _node_view_alter (후크를 구현하기 위해 노력했다. 내가Drupal 8의 모듈을 통해 노드 본문을 수정하는 방법

<pre> 
    <?php  
     ob_start("minimal_htmlspecialchars_callback"); 
     print_r($content); 
     ob_end_flush(); 
    ?> 
</pre> 

내 템플릿의 내용을 인쇄 할 경우

function highlight_node_view($node, $view_mode, $langcode) { 
    $node->content['body']['und'][0]['safe_value'] = "test"; 
    $node->body['und'][0]['safe_value'] = "test"; 
    $node->content['body']['und'][0]['value'] = "test"; 
    $node->body['und'][0]['value'] = "test"; 
} 

function highlight_node_view_alter($build, $node) { 
    $build["body"]["#items"]["0"]["value"] = "TEST"; 
    $build["body"]["#items"]["0"]["safe_value"] = "TEST"; 
    $build["body"]["#formater"]["0"]["#markup"] = "TEST"; 
} 

같은 내 코드를 보면 내가 확인할 수 있습니다

모든 값은 "test"로 올바르게 바뀌지 만

<?php print render($content['body']); ?> 

으로 전화하면 원래의 문제가 여전히 해결됩니다. 시험 대신에 텐트

기사의 내용을 모듈에서 바꾸는 적절한 방법은 무엇입니까?

+1

드루팔 (8)는 아직 안정 버전이없는 및 테스트 이외의 사용하지 않아야합니다 ... 당신은 드루팔 7을 의미하지 않는다 당신이 확인되어 사용하고 있습니다? – Clive

+0

드루팔 (Drupal 8)은 아직 준비가 안됐지만 실험을 좋아합니다. 나는 Symfony2로 자신 만의 매우 기본적인 블록 시스템을 개발하고 있었기 때문에 Drupal 8이이 프레임 워크를 기반으로한다는 사실을 발견했을 때 나는 그것을 시도하기로 결정했다. – MathieuLescure

답변

0

나는 마지막으로 이전 stackoverflow 질문 (Modify how a node in drupal will look when viewed)의 솔루션을 발견하고 다음 코드를 잘 작동합니다.

function highlight_node_view($node, $view_mode, $langcode) { 
    $alteredBody = $node->body['und'][0]['safe_value']; 
    $alteredBody = str_replace("<code>", "<pre><code>", $alteredBody); 
    $alteredBody = str_replace("</code>", "</code></pre>", $alteredBody); 

    $node->content['body'] = array(
     '#markup' => $node->body['und'][0]['safe_value'] = $alteredBody 
    ); 
} 

그러나 렌더링 시스템을 완전히 이해할 수 있는지 확실하지 않습니다. 누군가가 더 나은 해결책이나 더 자세한 설명을한다면, 나는 그것을 고맙게 생각합니다.

+1

Drupal 8이 ['hook_ENTITY_TYPE_view()'] (https://api.drupal.org/api/drupal/core!lib!Drupal!Core!Entity!entity.api.php/)를 사용하기 때문에이 답변은 정확하지 않습니다. function/hook_ENTITY_TYPE_view/8) 대신에'hook_node_view()'를 사용합니다. 인수가 다르므로 구현해야 할 코드도 마찬가지입니다. – kiamlaluno

1

본문 필드 데이터를 성공적으로 변경 했으므로 다음과 같이 모듈 파일에 코드를 추가해야합니다. BTW 내가 드루팔 8.2

use Drupal\Core\Entity\EntityInterface; 
use Drupal\Core\Entity\Display\EntityViewDisplayInterface; 
/** 
* Implements hook_ENTITY_TYPE_view() for node entities. 
*/ 

function module_name_node_view(array &$build, EntityInterface $node, EntityViewDisplayInterface $display, $view_mode) { 
    $build['body'][0]['#text'] = 'test by ajay'; 
} 
관련 문제