我正在使用FileFeild Image字段来获取图像,然后我使用File (Field) Paths将文件重命名为随机字符。
我正在尝试做什么
问题
图片确实已使用File (Field) Paths重命名,并且效果很好。麻烦的是我无法让节点重命名以匹配新重命名的文件名。
我尝试了什么
我尝试使用Pathauto,我为[node:field_image]
的图像内容类型设置了模式,Pathauto无法在初始节点创建时添加别名。我怀疑这与挂钩调用的顺序有关。
我也试过这个钩子
function MYMODULE_node_insert($node) {
if ($node->type == 'image') {
$filename = $node->field_image['und'][0]['filename'];
// do stuff
$node->path['alias'] = $result;
}
}
在这个钩子中,$node->field_image
此时似乎没有所有文件数据,但尚未可用。
问题
有人知道怎么做,即使我写了一个自定义模块吗?什么钩子可以让我这样做?
是否可以通过Custom Tokens获取文件名?
答案
我最终在File(Field)Paths代码中找到了一个钩子来实现和使用下面的@ Clive代码,我能够创建一个别名。我创建了一个模块来执行此操作,因为文件(字段)路径似乎不直接与Pathauto一起使用。
hook_filefield_paths_process_file
答案 0 :(得分:2)
该节点已保存在hook_node_insert()
/ hook_node_update()
中,这就是您的更改未被反映的原因。
幸运的是hook_node_presave()
。如果你把你的代码放在那个钩子里它应该可以工作。
文件字段只包含文件的ID,因此您需要加载该对象以获取文件名:
$items = field_get_items('node', $node, 'field_image');
if ($items) {
$file = file_load($items[0]['fid']);
$filename = $file->filename;
// ...
}
但是,如果安装Pathauto模块,您将能够为包含图像字段文件名的图像节点类型分配模式,而不需要任何代码。