萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> PHP技巧:Elgg 獲取文件圖標地址的方法

PHP技巧:Elgg 獲取文件圖標地址的方法

   elgg本身有一套模板系統,可以加載圖標。但是如果自己寫了新的模板,怎樣獲得img的src地址呢?過程如下:

  首先,實體保存的時候用這個方法(系統本身的):

  比如有一個Activity類,繼承自ElggObject,創建了一個它的實例 activity,

  // Now see if we have a file icon

  if ((isset($_FILES['icon'])) && (substr_count($_FILES['icon']['type'],'image/'))) {

  $prefix = "activity/".$activity->guid;

  $filehandler = new ElggFile();

  $filehandler->owner_guid = $activity->owner_guid;

  $filehandler->setFilename($prefix . ".jpg");

  $filehandler->open("write");

  $filehandler->write(get_uploaded_file('icon'));

  $filehandler->close();

  $thumbtiny = get_resized_image_from_existing_file($filehandler->getFilenameOnFilestore(),25,25, true);

  $thumbsmall = get_resized_image_from_existing_file($filehandler->getFilenameOnFilestore(),40,40, true);

  $thumbmedium = get_resized_image_from_existing_file($filehandler->getFilenameOnFilestore(),100,100, true);

  $thumblarge = get_resized_image_from_existing_file($filehandler->getFilenameOnFilestore(),200,200, false);

  if ($thumbtiny) {

  $thumb = new ElggFile();

  $thumb->owner_guid = $activity->owner_guid;

  $thumb->setMimeType('image/jpeg');

  $thumb->setFilename($prefix."tiny.jpg");

  $thumb->open("write");

  $thumb->write($thumbtiny);

  $thumb->close();

  $thumb->setFilename($prefix."small.jpg");

  $thumb->open("write");

  $thumb->write($thumbsmall);

  $thumb->close();

  $thumb->setFilename($prefix."medium.jpg");

  $thumb->open("write");

  $thumb->write($thumbmedium);

  $thumb->close();

  $thumb->setFilename($prefix."large.jpg");

  $thumb->open("write");

  $thumb->write($thumblarge);

  $thumb->close();

  }

  }

  這個過程後,文件將被保存至一個由用戶名字符串組成的一個目錄結構下,比如用戶名是abc,則被保存在了a/b/c/下,然後由圖片的guid+size+.jpg組成一個文件名。

  獲取src地址的時候,通過實體->getIcon();方法來獲取。getIcon是entities.php中的方法。然後這個方法會調用get_entity_icon_url方法,在get_entity_icon_url方法中有一行:

  $url = trigger_plugin_hook('entity:icon:url', $entity->getType(), array('entity' => $entity, 'viewtype' => $viewtype, 'size' => $size), $url);

  它會觸發一個鉤子(hook),這個hood需要在插件的start.php中注冊。注冊時這樣寫:

  register_plugin_hook('entity:icon:url', 'object', 'activity_activityicon_hook');

  第一個參數是鉤子類型,第二個是實體類型,也就是activity的類型,第三個是鉤子函數名。

copyright © 萬盛學電腦網 all rights reserved