2010-08-04 71 views
0

是否可以使用CCK向图像附加模块表单添加条件除非我选择了用于内容节点的图像,否则某些字段不可见?只有当图像附加图像时,才可以使字段可见

目前我没有任何操作可用于我的内容类型定义中的图像附加字段,其中configure和remove适用于所有其他字段。

回答

1

这对您的主题来说非常简单,例如节点foo.tpl.php的内容类型FOO,具有现场“视频”

<?php if(!empty($field_video[0]['view'])): ?> 
    <div class="block video"> 
    <?php print $field_video[0]['view'] ?> 
    </div> 
    <?php print $field_some_other[0]['view'] ?> 
    <?php print $field_the_other_one[0]['view'] ?> 
<?php endif; ?> 

风格上的一些注意事项和最佳做法:

我喜欢的if/endif模板,其他更喜欢if(){}。技术上差别不大,我认为elseif;在HTML中更具可读性。

从技术上讲,仅仅打印一个值是不正确的,但应该使用drupal_render()。我个人更喜欢印刷,因为它的透明度和简单性。但是,Drupal_render()会注册它已“渲染”的内容,并允许您在最后使用drupal_render($ node)来渲染所有未渲染的字段;如果您稍后决定添加字段,则无需在每次更改整个模板时使用。 Drupal_render在tpl.php中不可用,但是在预处理中:就像说的那样,透明度稍差,稍微复杂一些。

不!永远!打印$ field_foo [0] ['value'],总是['view']部分:第一个是未转义的,可能(将!)包含XSS注入等。

奇怪的嵌套数组($ field_foo [0] ['value'])是Drupal中多字段选项的结果。一个更好的方法是总是迭代每个字段,而不是只渲染硬编码的第一个([0])项。但是,出于可读性,简单性和透明性的原因,我更愿意在我的模板中对索引进行硬编码。其他人(理所当然)不同意我的看法。

+0

恕我直言,只要您有把握确保该字段在可预见的将来是单一值,那么对第一个([0])项进行硬编码没有任何问题。用foreach来包装它会是不成熟的优化(这当然是所有恶意的根源:-))。 – marcvangend 2010-08-05 08:43:05

+0

“,只要你可以合理确信”确实很好。但是,您的网站不应该中断(例如:trow警告,错误,打开sec.holes):) – berkes 2010-08-05 09:32:26