JoomGallery быстрое добавление фото
Стояла задача добавить много фотографий с различным описанием и именами.
Стандартных возможностей в Joom Gallery для этого нет. Написал свой класс.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
define('JOOM_HTTP', 'http://site.ru'); define('JOOM_ADM_PASS', 'admin'); define('JOOM_ADM_LOGIN', 'admin'); //******************************* class JGPoster { // Joom Gallery Poster private static function defOptions() { $options = Array(); return $options; } // end of function public static function doAuth() { $ret = false; $options = self::defOptions(); $options['url'] = JOOM_HTTP.'/administrator/index.php'; $result = SP::Get($options); if (!emptyempty($result['return']['data'])) { $html = $result['return']['data']; if (strpos($html, 'task=logout')) { $ret = true; } else { $options = self::defOptions(); $options['url'] = JOOM_HTTP.'/administrator/index.php'; $options['post'] = Array(); $options['post']['lang'] = ''; $options['post']['option'] = 'com_login'; $options['post']['username'] = JOOM_ADM_LOGIN; $options['post']['passwd'] = JOOM_ADM_PASS; $options['post']['task'] = 'login'; if (preg_match('|<input\s+type="hidden"\s+name="([a-z0-9]{32})"\s+value="([^"]+)"|Usix', $html, $regs)) { $options['post'][$regs[1]] = $regs[2]; } $result = SP::Get($options); if (!emptyempty($result['return']['data'])) { $html = $result['return']['data']; if (strpos($html, 'task=logout')) $ret = true; } } } return $ret; } // end of function public static function getJGCatList($likeSelect=true, $name='f_cat', $selectMax=true) { $ret = false; $options = self::defOptions(); $options['url'] = JOOM_HTTP.'/administrator/index.php?option=com_joomgallery&controller=upload'; $result = SP::Get($options); if (!emptyempty($result['return']['data'])) { $html = $result['return']['data']; if (preg_match('|<select\s+name="catid".+/select|Usix', $html, $regs)) { if (preg_match_all('|<option\svalue="(\d+)">([^<]+)</option>|Usix', $regs[0], $regs)) { $ret = Array(); for ($i=0; $i<count($regs[0]); $i++) $ret[$regs[1][$i]] = trim($regs[2][$i]); if ($ret && $likeSelect) { $oret = '<select name="'.$name.'">'; $max=0; if ($selectMax) foreach ($ret as $k=>$r) if ($k>$max) $max=$k; foreach ($ret as $k=>$r) { $oret.='<option value="'.$k.'"'; if ($selectMax && ($max==$k)) $oret.=' selected="selected"'; $oret.='>'.$r.'</option>'; } $ret = $oret.'</select>'; } } } } return $ret; } // end of function public static function addCategory($catName, $parentid=0) { $ret = false; $options = self::defOptions(); $options['url'] = JOOM_HTTP.'/administrator/index.php'; $options['post'] = Array(); $options['post']['alias'] =''; $options['post']['cid'] ='0'; $options['post']['controller'] ='categories'; $options['post']['description'] =''; $options['post']['details[access]'] ='0'; $options['post']['details[catimage]'] =''; $options['post']['details[img_position]'] ='0'; $options['post']['details[owner]'] ='0'; $options['post']['meta[metadesc]'] =''; $options['post']['meta[metakey]'] =''; $options['post']['name'] =$catName; $options['post']['option'] ='com_joomgallery'; $options['post']['ordering'] ='0'; $options['post']['parent'] =$parentid; $options['post']['published'] ='1'; $options['post']['task'] ='apply'; $result = SP::Get($options); if (!emptyempty($result['return']['data'])) { $html = $result['return']['data']; if (preg_match('|<strong>ID\sкатегории</strong>.{0,20}</td>.{0,20}<td>\D*(\d+)\D*</td>|Usix', $html, $regs)) $ret=$regs[1]; } return $ret; } // end of function public static function postImage($catid, $imagepath, $title = 'Image', $desc='') { $ret = false; $options = self::defOptions(); $options['url'] = JOOM_HTTP.'/administrator/index.php'; $options['post'] = Array(); $options['post']['catid'] = $catid; $options['post']['gentitle'] = $title; $options['post']['gendesc'] = $desc; $options['post']['photocred'] = ''; $options['post']['option'] = 'com_joomgallery'; $options['post']['controller'] = 'upload'; $options['post']['task'] = 'upload'; for ($i=1; $i<10; $i++) $options['post']['arrscreenshot['.$i.']']=''; $options['post']['arrscreenshot[0]']='@'.$imagepath; $result = SP::Get($options); if (!emptyempty($result['return']['data'])) { $html = $result['return']['data']; if (preg_match('|<dl\sid="system-message">.+</dl>|Usix', $html, $regs)) { if (preg_match_all('|<li>(.+)</li>|Usix', $regs[0], $regs)) { $ret = Array(); for($i=0; $i<count($regs[0]); $i++) $ret[] = trim($regs[1][$i]); } } } return $ret; } // end of function } // end of class |
класс работает по http и эмулирует пользователя, дабы использовать уже имеющийся функционал joomgallery по добавлению, изменению размеров и т.д.
Класс SP выкладывать в паблик пока не буду, скажу что он реализует работу с Curl. Поэтому если хотите использовать эту наработку, то прийдется либо самим написать класс SP, либо переписать его на использование своих функций. Из передаваемых параметров, думаю ясно, что и как определяется.
p.s. Скрипт для Joomla 1.5.17
Author: | Tags: /
| Rating:
Leave a Reply