Кнопка для загрузки изображений

Светлана Меркулова

Пользователь
Здравствуйте. На некоторых трекерах есть кнопка "Загрузить" напротив полей "Постер" и "Скриншоты" при создании нового релиза, что соответственно позволят загружать картинки непосредственно на сервер, не используя различные хостинги картинок. Подскажите, пожалуйста (если не сложно, то пошагово, как новичку), как реализовать подобную опцию? В идеале хотелось бы добавить подобные кнопочки, а стандартные поля для ввода URL адресов вовсе удалить оттуда. :) Добавляю скриншот того, что хотелось бы реализовать. :)
 

Вложения

  • , 20h30m56s.png
    , 20h30m56s.png
    49.9 KB · Просмотры: 78

Светлана Меркулова

Пользователь
Ну там и инструкция... :( Ничего не написано, куда вставлять куски кода (после или до)... Кто-нибудь сможет помочь расшифровать? :) Там видимо для профи написано...
 
S

Sarymian

Гость
Светлана Меркулова, там все прекрасно написано. Вопрос в том, что если Вам не понятно то может и не стоило трекер "запускать" или стоит найти человека который понимает что "там" написано и что делать надо.
З.Ы. ава ужасная... :mad: не люблю детей!


Please Login or Register to view hidden text.

/topic_templates.php
В функцию function build_tpl_item ($item, $val)
Вставить 2 ИФа и объявление глобальной переменной, получится что-то типа:
PHP:
function build_tpl_item ($item, $val)
{
    global $HTTP_POST_FILES;

    if($item == 'screen_shots')
    {
        $screen_shots = '';
        for ($i = 0; $i < count($HTTP_POST_FILES['screen_shots']['size']); $i++)
        {
            $screen_shots .= upload_file($HTTP_POST_FILES['screen_shots'], $i);
        }
        $screen_shots = ($screen_shots) ? "\n" . '[spoiler="'. $GLOBALS['lang']['tpl']['screen_shots'] .'"]'. "\n" .'[align=center]'. "\n" . $screen_shots . "[/align]\n[/spoiler]" : '';

        return $screen_shots;
    }

    if($item == 'poster')
    {
        return upload_file($HTTP_POST_FILES['poster'], 0, 'right');
    }
 
        if (strpos($item, '--BR--') === 0)
        {
                return "\n\n";
        }
        if (!$val)
        {
                return '';
        }
 
        if (function_exists("tpl_func_$item"))
        {
                return call_user_func("tpl_func_$item", $item, $val);
        }
        else if (isset($GLOBALS['tpl_sprintf'][$item]))
        {
                return sprintf($GLOBALS['tpl_sprintf'][$item], $val);
        }
        else
        {
                return '[b]'. $GLOBALS['lang']['TPL'][strtoupper($item)] .'[/b]: '. $val ."\n";
        }
}
После:
PHP:
function tpl_func_screen_shots ($item, $val)
{
        if (!$val) return '';
 
        $img = preg_replace('#(?<=\s)(http\S+?(jpg|gif|png))(?=\s)#i', '[img]$1[/img]', " $val ");
 
        return '[spoiler="'. $GLOBALS['lang']['TPL'][strtoupper($item)] .'"]' . trim($img) ."\n" ."[/spoiler]";
}
Вставить:
PHP:
function upload_file($files_ary, $idx, $align = false)
{
    global $bb_cfg, $lang;
 
    $allowed_ext = array('jpeg', 'jpg', 'png', 'gif');
    $max_size = $bb_cfg['pic_max_size'];
 
    $dir = $bb_cfg['pic_dir'];
    $url = make_url('/');
 
    $pic = '';
    if ($files_ary['size'][$idx] < $max_size)
    {
        $name = strtolower($files_ary['name'][$idx]);
        $ext  = substr(strrchr($name, '.'), 1);
 
        $allow = in_array($ext, $allowed_ext);
        $type  = '.'. $ext;
 
        if ($allow)
        {
            $name = md5_file($files_ary['tmp_name'][$idx]);
 
            if (file_exists($dir . $name . $type))
            {
                $pic = $url . $dir . $name . $type;
            }
            else
            {
                if (copy($files_ary['tmp_name'][$idx], $dir.$name.$type))
                {
                    $pic = $url . $dir . $name . $type;
                }
            }
        }
 
        if($align)
        {
            $pic = ($pic) ? "[hr]\n[img=".$align."]". $pic ."[/img]\n\n" : '';
        }
        else
        {
            $pic = ($pic) ? "[img]". $pic ."[/img]\n" : '';
        }
    }
    return $pic;
}


Please Login or Register to view hidden text.

/

Please Login or Register to view hidden text.

/

Please Login or Register to view hidden text.

/
Тут находятся шаблоны-визарды оформления их-то и надо править в зависимости от того что Вам надо (видео, аудио, книги и т.п.) соответствующий и надо править.
Допустим файл Video:
После
PHP:
var quality = ['{SEL_VIDEO_QUALITY}'];
var translation = ['{SEL_TRANSLATION}'];
var torrent_sign = "{TORRENT_SIGN}";
Вставить:
PHP:
var ml_vals = Array();

Между:
PHP:
}
</script>
Вставить:
PHP:
function mlCheckForLast (name)
{
    if (document.getElementById) {
        var btns = document.getElementsByName('drop_'+name);
        for (var i = 0; i < btns.length; i ++)
        {
            btns[i].disabled = (btns.length == 1) ? true : false;
            document.getElementsByName('insert_'+name)[i].disabled = (btns.length == 6) ? true : false;
        }
    }
}
 
function mlAddVal (btn)
{
    if (document.getElementById) {
        var name = btn.name.substr(7);
        var tr = btn;
        while (tr.tagName.toLowerCase() != 'tr')
        {
            tr = tr.parentNode;
        }
        var tr_new = tr.parentNode.insertBefore(tr.cloneNode(true),tr.nextSibling);
 
        var tds = tr_new.getElementsByTagName('td');
        for (var i = 0; i < ml_vals[name].length; i ++)
        {
            var el = tds[ml_vals[name][i][0]].getElementsByTagName(ml_vals[name][i][1])[0];
            el.value = ml_vals[name][i][2];
        }
 
        mlCheckForLast(name);
    }
}
 
function mlDropVal (btn)
{
    if (document.getElementById) {
        var name = btn.name.substr(5);
        var tr = btn;
        while (tr.tagName.toLowerCase() != 'tr') {
            tr = tr.parentNode;
        }
        tr.parentNode.removeChild(tr);
        mlCheckForLast(name);
    }
}

За место:
PHP:
<tr>
<td><b><!-- IF PICTURE_HREF --><a href="{PICTURE_HREF}" target="_blank">{L_PICTURE}</a><!-- ELSE -->{L_PICTURE}<!-- ENDIF --></b>:</td>
<td><input type="text" name="msg[picture]" size="80" /> <span class="med">URL</span></td>
</tr>
Вставить:
PHP:
<tr>
    <td><b>{L_PICTURE}</b>:</td>
    <td><input type="file" name="poster[]" size="65" /></td>
</tr>
<tr>
За место:
PHP:
    <td><b>{L_SCREEN_SHOTS}</b>:</td>
<td><textarea name="msg[screen_shots]" rows="3" cols="100" class="editor"></textarea> <span class="med">URLs</span></td>
Вставить:
PHP:
<td><b>{L_SCREEN_SHOTS}<font color="#FF0080">*</font></b>:</td>
    <td><table class="borderless">
        <tr>
            <td><input type="file" name="screen_shots[]" style="width:532px;" />
                <input type="button" value="+" onclick="mlAddVal(this);" name="insert_s">
                <input type="button" value="-" onclick="mlDropVal(this);" name="drop_s">
                <script type="text/javascript">ml_vals['s'] = new Array(); mlCheckForLast('s');</script>
            </td>
        </tr>
        </table>
    </td>
</tr>
Возможно со скриншотами чуть по другому надо поступить, я пишу но не проверяю на работающем сервере.

После чего осталось в соответствующий файл php шаблона-визарда добавить пару строк. Т.е. в файл

Please Login or Register to view hidden text.

/

Please Login or Register to view hidden text.

/ video.php добавить:
PHP:
        'poster',
        'screen_shots',
Т.е. получится, было:
PHP:
if (isset($_REQUEST['preview']) && is_array($_POST['msg']))
{
        $tpl_items = array(
                'release_name',
                'picture',
                'original_name',
                'manufacturer',
                'year',
                'lang',
                'country',
                'genre',
                'playtime',
                'translation',
                '--BR--1',
                'director',
                '--BR--2',
                'casting',
                '--BR--3',
                'description',
                '--BR--4',
                'moreinfo',
                '--BR--5',
                'quality',
                'format',
                'video_codec',
                'audio_codec',
                'video',
                'audio',
                'screen_shots',
        );
Станет:
Код:
if (isset($_REQUEST['preview']) && is_array($_POST['msg']))
{
        $tpl_items = array(
                'release_name',
                'poster',
                'original_name',
                'manufacturer',
                'year',
                'lang',
                'country',
                'genre',
                'playtime',
                'translation',
                '--BR--1',
                'director',
                '--BR--2',
                'casting',
                '--BR--3',
                'description',
                '--BR--4',
                'moreinfo',
                '--BR--5',
                'quality',
                'format',
                'video_codec',
                'audio_codec',
                'video',
                'audio',
                'screen_shots',
        );
И все.
 

Светлана Меркулова

Пользователь
Спасибо, за подробное разъяснение инструкции. :)

Вопрос в том, что если Вам не понятно то может и не стоило трекер "запускать"
Я всё-же попробую, ок? ;)

З.Ы. ава ужасная...
А я не спрашивала никакого мнения о моём аватаре. Для меня это самая лучшая ава в мире! :)

не люблю детей!
Мне грустно за Вас. :)
 
S

Sarymian

Гость
Я всё-же попробую, ок? ;)
Да мне вообще все равно сейчас. Мой внутренний мир порвали на куски. Мне пофигу.

А я не спрашивала никакого мнения о моём аватаре. Для меня это самая лучшая ава в мире! :)
Читайте выше.

Мне грустно за Вас. :)
А мне грустно на наш мир, в котором им предстоит рости. Вот и не хочу своих иметь, чтоб не мучились.
 

krumax

Пользователь
А мне грустно на наш мир, в котором им предстоит рости. Вот и не хочу своих иметь, чтоб не мучились.
Зря ты так.
Не стоит обижать человека, темболее из написанного выше я понял, что на аве её ребёнок.
У самого растёт двое детей, и уж поверь они приносят только радость, и тот мир в котором мы живём мы сами же и создаём.
 
Сверху