PDA

Zobacz pełną wersję : Media manager - sortowanie grafik wysłanych na serwer



oliver87
22-07-2011, 12:43
Czy jest alternatywa dla systemowego media managera? Otóż grafiki wysyłane na serwer wczytują się nie w kolejności dodatnia tylko chyba według nazwy. Jest to uciażliwe, kiedy korzysta z zaplecza 10 osób, każdy coś wrzuca i musi szuuukać i szuuukać przesłanego zdjęcia na serwer.

Szukałem pliku php od edytora ale jakoś do nie go nie dotarłem - możliwe że byłaby możliwość dopisanie funkcji sortowania.

Podejrzewam, że temat ten mógł się już kiedyś pojawić ale nie udało mi się go wyłuskać tutaj na forum. Będę wdzięczny za pomoc w dobraniu alternatywy lub wskazaniu podobnego tematu do tego. Pozdrawiam serdecznie.

Jola
22-07-2011, 14:27
Witam,
myślę, że mniej uciążliwe jest skłonienie każdego użytkownika do korzystania z własnego folderu niż pisanie funkcji sortujących do komponentu Joomla. :)

oliver87
22-07-2011, 15:13
Nie zmienia to pewnego faktu. Niech każdy uzytkownik ma swój folder do grafik i pisze dziennie 2 artykuły w których jest minimum jeden obrazek. Po pewnym czasie zgubi się on jak "Andzia w parku" nawet i w swoim katalogu. Znalazłem pliki php odpowiadająca za wyświetlanie obrazków w managerze obrazków. Niestety nie jestem obeznany z php, ale może przekleję kody z tcyh plików - może ktoś podpowie gdzie wpisać funkcje sortowania - oczywiście o ile ona zadziała i nie będzie wymagała dalszych, głębszych przeróbek i odwołań.

plik default.plp


<?php defined('_JEXEC') or die('Restricted access'); ?>
<?php if (count($this->images) > 0 || count($this->folders) > 0) { ?>
<div class="manager">

<?php for ($i=0,$n=count($this->folders); $i<$n; $i++) :
$this->setFolder($i);
echo $this->loadTemplate('folder');
endfor; ?>

<?php for ($i=0,$n=count($this->images); $i<$n; $i++) :
$this->setImage($i);
echo $this->loadTemplate('image');
endfor; ?>

</div>
<?php } else { ?>
<table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
<div align="center" style="font-size:large;font-weight:bold;color:#CCCCCC;font-family: Helvetica, sans-serif;">
<?php echo JText::_( 'No Images Found' ); ?>
</div>
</td>
</tr>
</table>
<?php } ?>


plik default.image.php


<?php defined('_JEXEC') or die('Restricted access'); ?>
<div class="item">
<a href="javascript:ImageManager.populateFields('<?php echo $this->_tmp_img->path_relative; ?>')">
<img src="<?php echo $this->baseURL.'/'.$this->_tmp_img->path_relative; ?>" width="<?php echo $this->_tmp_img->width_60; ?>" height="<?php echo $this->_tmp_img->height_60; ?>" alt="<?php echo $this->_tmp_img->name; ?> - <?php echo MediaHelper::parseSize($this->_tmp_img->size); ?>" />
<span><?php echo $this->_tmp_img->name; ?></span></a>
</div>


plik default.folder.php

<?php defined('_JEXEC') or die('Restricted access'); ?>
<div class="item">
<a href="index.php?option=com_media&amp;view=imagesList&amp;tmpl=co mponent&amp;folder=<?php echo $this->_tmp_folder->path_relative; ?>">
<img src="<?php echo JURI::base() ?>components/com_media/images/folder.gif" width="80" height="80" alt="<?php echo $this->_tmp_folder->name; ?>" />
<span><?php echo $this->_tmp_folder->name; ?></span></a>
</div>


Nie radzę sobie z php ale właśnie zacząłem naukę składni, od czegoś trzeba zacząć ;) niemniej będę zadowolony z ewentualnej podpowiedzi, może z jakiejś linii dodatkowego kodu ;)

Jola
23-07-2011, 03:48
Plik libraries/joomla/filesystem/folder.php linia 408 zamiast użytej oryginalnie funkcji wstaw:

function files($path, $filter = '.', $recurse = false, $fullpath = false, $exclude = array('.svn', 'CVS'))
{
// Initialize variables
$arr = array();
$czas = array();
// Check to make sure the path valid and clean
$path = JPath::clean($path);

// Is the path a folder?
if (!is_dir($path)) {
JError::raiseWarning(21, 'JFolder::files: ' . JText::_('Path is not a folder'), 'Path: ' . $path);
return false;
}

// read the source directory
$handle = opendir($path);
while (($file = readdir($handle)) !== false)
{
if (($file != '.') && ($file != '..') && (!in_array($file, $exclude))) {
$dir = $path . DS . $file;
$isDir = is_dir($dir);
if ($isDir) {
if ($recurse) {
if (is_integer($recurse)) {
$arr2 = JFolder::files($dir, $filter, $recurse - 1, $fullpath);
} else {
$arr2 = JFolder::files($dir, $filter, $recurse, $fullpath);
}

$arr = array_merge($arr, $arr2);
}
} else {
if (preg_match("/$filter/", $file)) {
if ($fullpath) {
$arr[] = $path . DS . $file;
$czas[] = date ('y-m-d H:i',filemtime($path . DS . $file));
} else {
$arr[] = $file;
$czas[] = date ('y-m-d H:i',filemtime($path . DS . $file));
}
}
}
}
}
closedir($handle);
//
array_multisort($czas, SORT_DESC, SORT_STRING, $arr);
// asort($arr);
return $arr;
}Najpierw jednak kopia pliku.
Musisz również wiedzieć, że taka modyfikacja skutkuje zmianą sortowania dla wszystkich plików.
Sortowanie (wybór) można zmodyfikować dodając warunek do:

array_multisort($czas, SORT_DESC, SORT_STRING, $arr);co odpowiada za sortowanie wg daty; oryginalnie:

asort($arr);:)

oliver87
23-07-2011, 12:15
Nawet nie wiesz jak bardzo jestem wdzięczny!

Skromnie proponuję przykleić ten post, ponieważ brakuje alternatwnego rozwiązania dla sortowania grafik w menadżerze, a rzesze joomlistów wybierający tego cms-a na blog będą nie spać po nocach z powodu niewygodnego sortowania grafik. W ten sposób nie trzeba co rusz tworzyć nowych katalogów na serwerze, żeby nie przewijać okienka z tysiącami innych grafik w poszukiwaniu tej świeżo wczytanej :)

Pozdrawiam serdecznie! :