Что нового

Массовая загрузка постеров к фильмам (1 Viewer)

  • Автор темы Oleksandr Miroshnichenko
  • Дата начала
PHP:
<?php

/**
 * @author Maxim Harder <dev@devcraft.club>
 * @description Скрипт по проставлению изображений в базу данных с загрузкой и настройкой, согласно установленным параметрам в доп. поле
 */

/**
 * Подключаем глобальные переменные
 * $db - Подключение к базе данных
 * $config - Конфигурация системы
 * $user_group - Массив с информаций о группах пользователя
 * $member_id - Массив информации о текущем пользователе
 */
global $db, $config, $user_group, $member_id;

/**
 * Устанавливаем глобальные значения
 */
error_reporting(E_ALL^E_WARNING^E_DEPRECATED^E_NOTICE);
ini_set('error_reporting', E_ALL^E_WARNING^E_DEPRECATED^E_NOTICE);

define('DATALIFEENGINE', true);
define('ROOT_DIR', __DIR__);
define('ENGINE_DIR', ROOT_DIR . '/engine');

/**
 * Подключаем класс плагинов
 */
require_once(ENGINE_DIR . '/classes/plugins.class.php');
/**
 * Подключаем функции сайта
 */
require_once(DLEPlugins::Check(ENGINE_DIR . '/modules/functions.php'));
/**
 * Подключаем класс загрузки файлов
 */
include_once(DLEPlugins::Check(ENGINE_DIR . '/classes/uploads/upload.class.php'));
/**
 * Подключаем API внутренних функций
 * Упрощаем работу
 */
include('engine/api/api.class.php');

/**
 * Оформляем текстовой вид параметров доп. поля в массив
 *
 * @param $xfname           Название доп. поля на латинском
 * @return false|string[]
 */
function xfparamload($xfname) {

    $path = ENGINE_DIR . '/data/xfields.txt';
    $filecontents = file($path);

    if (!is_array($filecontents)) {
        return false;
    }

    foreach ($filecontents as $name => $value) {
        $filecontents[$name] = explode("|", trim($value));
        if ($filecontents[$name][0] == $xfname) return $filecontents[$name];
    }

    return false;
}

/**
 * Функция ыводит ответ API по запросу постеров
 *
 * @param $id
 * @return mixed
 */
function kpApi($id) {
    global $apikey;
    
    $headers = [];
    $headers[] = "X-API-KEY: {$apikey}";
    $headers[] = 'Content-Type: application/json';
    $url = "https://kinopoiskapiunofficial.tech/api/v2.2/films/{$id}/images?type=POSTER&page=1";

    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    $resp = curl_exec($curl);
    curl_close($curl);

    return json_decode($resp, true);

}

/**
 * Функция проставления и загрузки постера в новость
 *
 * @param $news_id
 * @return void
 */
function setPoster($news_id) {
    global $area, $t_size, $t_seite, $make_thumb, $make_watermark, $m_size, $m_seite, $make_medium, $db, $member_id, $dle_api, $xfkpid, $xfposter;

    /**
     * Автор загрузки постера, текущий авторизованный пользователь
     */
    $author = $db->safesql($member_id['name']);

    /**
     * Получаем данные новости
     */
    $post = $dle_api->load_table(PREFIX . '_post', 'title, alt_name, xfields', "id = {$news_id}");
    /**
     * Достаём данные о доп. полях новости
     */
    $xfieldsdata = xfieldsdataload($post['xfields']);
    /**
     * Получаем ID кинопоиска
     */
    $kp_id = $xfieldsdata[$xfkpid];

    /**
     * Если ID присутствует, то функция продолжит работу, в противном случае - на этом всё
     */
    if(!empty($kp_id)) {
        /**
         * Получаем данные с постерами
         */
        $poster_data = kpApi($kp_id);

        /**
         * Берём первое изображение и проверяем на целостность переменной
         * Если переменная пустая, то функция прекращает работу
         */
        $poster = $poster_data['items'][0]['imageUrl'];
        if (isset($poster)) {

            /**
             * Получаем данные изображения
             */
            $poster_data = file_get_contents($poster);
            /**
             * Преобразуем название новости в название файла с окончанием .jpg
             */
            $poster_title = totranslit(stripslashes( $post['title'] ), true, false) . '.jpg';
            /**
             * Путь постера на сервере
             */
            $new_poster = ROOT_DIR . '/uploads/files/' . $poster_title;
            /**
             * Сохраняем изображение на сервер
             */
            file_put_contents($new_poster, $poster_data);
            /**
             * Получаем мета-данные изображения
             */
            $exif = exif_read_data($new_poster);

            /**
             * Имитируем загрузку файла через форму загрузки
             */
            $_FILES['qqfile'] = [
                'type' => $exif['MimeType'],
                'name' => $exif['FileName'],
                'tmp_name' => $new_poster,
                'error' => 0,
                'size' => $exif['FileSize']
            ];

            /**
             * Начинаем загрузку файла
             */
            $uploader = new FileUploader($area, $news_id, $author, $t_size, $t_seite, $make_thumb, $make_watermark, $m_size, $m_seite, $make_medium);
            $result = json_decode($uploader->FileUpload(), true);

            /**
             * Если при загрузке не было ошибок, то будем проставлять данные в базу данных
             */
            if (!$result['error']) {
                /**
                 * Новое значение для доп. поля постера / изображения
                 */
                $xfieldsdata[$xfposter] = $result['xfvalue'];
                /**
                 * Оформляем массив, куда будут форматироваться доп. поля
                 */
                $new_xfields = [];
                /**
                 * Сводим имя и значения вместе и заносим их в массив
                 */
                foreach($xfieldsdata as $n => $v) $new_xfields[] = "{$n}|{$v}";
                /**
                 * Массив преобразуем в строку по феншую DLE
                 */
                $new_xfields = implode('||', $new_xfields);

                /**
                 * Отправляем новые данные в базу данных
                 */
                $sql = "UPDATE " . PREFIX . "_post SET xfields = '{$new_xfields}' WHERE id = {$news_id}";
                $db->query($sql);

                echo "Новость #{$news_id} ({$post['title']}) обновлена<br>";
            } else echo $result;

            /**
             * Удаляем временный файл
             */
            @unlink($new_poster);
        }
    }
}

/**
 * Вызываем класс DLE API в переменную
 * Проставляем важные переменные
 */
$dle_api = new dle_api();
$dle_api->db = $db;
$dle_api->dle_config = $config;

/**
 * Проверяем на целостность массива информации о группах
 * При отсутствии - создаёт новый и сохраняет массив в кеш
 */
if(!$user_group) $user_group = get_vars( "usergroup" );
if( !$user_group ) {
    $user_group = array ();

    $us = $dle_api->load_table( USERPREFIX . "_usergroups", '*',1,true,0,0, 'id', 'asc');

    foreach ( $us as $row) {

        $user_group[$row['id']] = array ();

        foreach ( $row as $key => $value ) {
            $user_group[$row['id']][$key] = stripslashes($value);
        }

    }
    set_vars( "usergroup", $user_group );
}


/**
 * Проверяем на целостность массива информации о текущем пользователе
 * При отсутствии - создаёт новый и сохраняет массив в кеш
 */
if (!$member_id) $member_id = get_vars( "member_id" );
if (!$member_id) {
    if (!isset($_COOKIE['dle_user_id'])) die("Пройдите авторизацию на сайте!");
    $member_id = $dle_api->load_table(USERPREFIX . '_users', '*', "user_id = {$_COOKIE['dle_user_id']}");
    set_vars('member_id', $member_id);
}

/**
 * Проверяем на целостность массива информации о языковых фразах
 * При отсутствии - создаёт новый и сохраняет массив в кеш
 */
if (!$langs || !$langtranslit) {
    $selected_language = $config['langs'];

    if (isset($_COOKIE['selected_language'])) {

        $_COOKIE['selected_language'] = trim(totranslit($_COOKIE['selected_language'], false, false));

        if ($_COOKIE['selected_language'] != "" and @is_dir(ROOT_DIR . '/language/' . $_COOKIE['selected_language'])) {
            $selected_language = $_COOKIE['selected_language'];
        }

    }

    if (file_exists(DLEPlugins::Check(ROOT_DIR . '/language/' . $selected_language . '/website.lng'))) {
        include_once(DLEPlugins::Check(ROOT_DIR . '/language/' . $selected_language . '/website.lng'));
    }
}

/**
 * Фильтруем введённые данные в URL
 */
$input_data = filter_input_array(INPUT_GET);

/**
 * Параметр news_id
 * Если нужно проставить изображение к определённой новости
 */
$news_id = (int)$input_data['news_id'] ?: 0;
/**
 * Параметр area
 * Тип поля
 * Если не знаете для чего оно, то не трогайте и не добавляйте ничего
 */
$area = $input_data['area'] ? totranslit($input_data['area']) : "xfieldsimage";
/**
 * Параметр image
 * Название поля с изображением, куда будет проставляться новое изображение
 */
$xfposter = $input_data['image'] ? totranslit($input_data['image']) : "";
/**
 * Параметр kpid
 * Название поля с ID кинопоиска, откуда будет браться информация и по которому будет происходить запрос
 */
$xfkpid = $input_data['kpid'] ? totranslit($input_data['kpid']) : "";
/**
 * Параметр api
 * API ключ сервиса
 */
$apikey = $input_data['api'] ? totranslit($input_data['api']) : "";

if (empty($apikey)) die("В параметры URL добавьте параметр api и через = API неофициального API кинопоиска");
if (empty($xfkpid)) die("В параметры URL добавьте параметр kpid и через = укажите название поля с ID кинопоиска");
if (empty($xfposter)) die("В параметры URL добавьте параметр image и через = укажите название поля с изображением, которое будет обновляться");

/**
 * Получаем параметры доп. поля с изображением
 */
$xfparam = xfparamload($xfposter);

if (!is_array($xfparam)) die("Создайте доп. поле {$xfposter}!");

/**
 * Создаём конфигурацию
 */
$xfname = $xfparam[0];
$t_seite = (int)$config['t_seite'];
$m_seite = $t_seite;
$t_size = $xfparam[13];
$m_size = 0;
$config['max_up_side'] = $xfparam[9];
$config['max_up_size'] = $xfparam[10];
$config['min_up_side'] = $xfparam[22];
$make_watermark = (bool)$xfparam[11];
$make_thumb = (bool)$xfparam[12];
$make_medium = false;

$t_size = explode("x", $t_size);
if (count($t_size) == 2) {
    $t_size = (int)$t_size[0] . "x" . (int)$t_size[1];
} else $t_size = (int)$t_size[0];

$m_size = explode("x", $m_size);
if (count($m_size) == 2) {
    $m_size = (int)$m_size[0] . "x" . (int)$m_size[1];
} else $m_size = (int)$m_size[0];

/**
 * Проставка новых изображений
 * Если не указано определённое ID новости, то будет искать по всей базе данных
 */
if ($news_id === 0) {
    $posts = $dle_api->load_table(PREFIX . '_post', '*', 1, true);

    foreach ($posts as $p) {
        setPoster($p['id']);
    }
} else {
    setPoster($news_id);
}

Написал функционал.

Инструкция:
  • Создаём с любым названием файл в корне сайта и вставляем код выше в него.
  • В браузере переходим по www.вашсайт.ру/файл.php?api=КЛЮЧ АПИ&image=НАЗВАНИЕ ПОЛЯ С ИЗОБРАЖЕНИЕМ&kpid=НАЗВАНИЕ ПОЛЯ С ID Кинопоиска
  • Ждём
 
PHP:
<?php

/**
* @author Maxim Harder <dev@devcraft.club>
* @description Скрипт по проставлению изображений в базу данных с загрузкой и настройкой, согласно установленным параметрам в доп. поле
*/

/**
* Подключаем глобальные переменные
* $db - Подключение к базе данных
* $config - Конфигурация системы
* $user_group - Массив с информаций о группах пользователя
* $member_id - Массив информации о текущем пользователе
*/
global $db, $config, $user_group, $member_id;

/**
* Устанавливаем глобальные значения
*/
error_reporting(E_ALL^E_WARNING^E_DEPRECATED^E_NOTICE);
ini_set('error_reporting', E_ALL^E_WARNING^E_DEPRECATED^E_NOTICE);

define('DATALIFEENGINE', true);
define('ROOT_DIR', __DIR__);
define('ENGINE_DIR', ROOT_DIR . '/engine');

/**
* Подключаем класс плагинов
*/
require_once(ENGINE_DIR . '/classes/plugins.class.php');
/**
* Подключаем функции сайта
*/
require_once(DLEPlugins::Check(ENGINE_DIR . '/modules/functions.php'));
/**
* Подключаем класс загрузки файлов
*/
include_once(DLEPlugins::Check(ENGINE_DIR . '/classes/uploads/upload.class.php'));
/**
* Подключаем API внутренних функций
* Упрощаем работу
*/
include('engine/api/api.class.php');

/**
* Оформляем текстовой вид параметров доп. поля в массив
*
* @param $xfname           Название доп. поля на латинском
* @return false|string[]
*/
function xfparamload($xfname) {

    $path = ENGINE_DIR . '/data/xfields.txt';
    $filecontents = file($path);

    if (!is_array($filecontents)) {
        return false;
    }

    foreach ($filecontents as $name => $value) {
        $filecontents[$name] = explode("|", trim($value));
        if ($filecontents[$name][0] == $xfname) return $filecontents[$name];
    }

    return false;
}

/**
* Функция ыводит ответ API по запросу постеров
*
* @param $id
* @return mixed
*/
function kpApi($id) {
    global $apikey;
  
    $headers = [];
    $headers[] = "X-API-KEY: {$apikey}";
    $headers[] = 'Content-Type: application/json';
    $url = "https://kinopoiskapiunofficial.tech/api/v2.2/films/{$id}/images?type=POSTER&page=1";

    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    $resp = curl_exec($curl);
    curl_close($curl);

    return json_decode($resp, true);

}

/**
* Функция проставления и загрузки постера в новость
*
* @param $news_id
* @return void
*/
function setPoster($news_id) {
    global $area, $t_size, $t_seite, $make_thumb, $make_watermark, $m_size, $m_seite, $make_medium, $db, $member_id, $dle_api, $xfkpid, $xfposter;

    /**
     * Автор загрузки постера, текущий авторизованный пользователь
     */
    $author = $db->safesql($member_id['name']);

    /**
     * Получаем данные новости
     */
    $post = $dle_api->load_table(PREFIX . '_post', 'title, alt_name, xfields', "id = {$news_id}");
    /**
     * Достаём данные о доп. полях новости
     */
    $xfieldsdata = xfieldsdataload($post['xfields']);
    /**
     * Получаем ID кинопоиска
     */
    $kp_id = $xfieldsdata[$xfkpid];

    /**
     * Если ID присутствует, то функция продолжит работу, в противном случае - на этом всё
     */
    if(!empty($kp_id)) {
        /**
         * Получаем данные с постерами
         */
        $poster_data = kpApi($kp_id);

        /**
         * Берём первое изображение и проверяем на целостность переменной
         * Если переменная пустая, то функция прекращает работу
         */
        $poster = $poster_data['items'][0]['imageUrl'];
        if (isset($poster)) {

            /**
             * Получаем данные изображения
             */
            $poster_data = file_get_contents($poster);
            /**
             * Преобразуем название новости в название файла с окончанием .jpg
             */
            $poster_title = totranslit(stripslashes( $post['title'] ), true, false) . '.jpg';
            /**
             * Путь постера на сервере
             */
            $new_poster = ROOT_DIR . '/uploads/files/' . $poster_title;
            /**
             * Сохраняем изображение на сервер
             */
            file_put_contents($new_poster, $poster_data);
            /**
             * Получаем мета-данные изображения
             */
            $exif = exif_read_data($new_poster);

            /**
             * Имитируем загрузку файла через форму загрузки
             */
            $_FILES['qqfile'] = [
                'type' => $exif['MimeType'],
                'name' => $exif['FileName'],
                'tmp_name' => $new_poster,
                'error' => 0,
                'size' => $exif['FileSize']
            ];

            /**
             * Начинаем загрузку файла
             */
            $uploader = new FileUploader($area, $news_id, $author, $t_size, $t_seite, $make_thumb, $make_watermark, $m_size, $m_seite, $make_medium);
            $result = json_decode($uploader->FileUpload(), true);

            /**
             * Если при загрузке не было ошибок, то будем проставлять данные в базу данных
             */
            if (!$result['error']) {
                /**
                 * Новое значение для доп. поля постера / изображения
                 */
                $xfieldsdata[$xfposter] = $result['xfvalue'];
                /**
                 * Оформляем массив, куда будут форматироваться доп. поля
                 */
                $new_xfields = [];
                /**
                 * Сводим имя и значения вместе и заносим их в массив
                 */
                foreach($xfieldsdata as $n => $v) $new_xfields[] = "{$n}|{$v}";
                /**
                 * Массив преобразуем в строку по феншую DLE
                 */
                $new_xfields = implode('||', $new_xfields);

                /**
                 * Отправляем новые данные в базу данных
                 */
                $sql = "UPDATE " . PREFIX . "_post SET xfields = '{$new_xfields}' WHERE id = {$news_id}";
                $db->query($sql);

                echo "Новость #{$news_id} ({$post['title']}) обновлена<br>";
            } else echo $result;

            /**
             * Удаляем временный файл
             */
            @unlink($new_poster);
        }
    }
}

/**
* Вызываем класс DLE API в переменную
* Проставляем важные переменные
*/
$dle_api = new dle_api();
$dle_api->db = $db;
$dle_api->dle_config = $config;

/**
* Проверяем на целостность массива информации о группах
* При отсутствии - создаёт новый и сохраняет массив в кеш
*/
if(!$user_group) $user_group = get_vars( "usergroup" );
if( !$user_group ) {
    $user_group = array ();

    $us = $dle_api->load_table( USERPREFIX . "_usergroups", '*',1,true,0,0, 'id', 'asc');

    foreach ( $us as $row) {

        $user_group[$row['id']] = array ();

        foreach ( $row as $key => $value ) {
            $user_group[$row['id']][$key] = stripslashes($value);
        }

    }
    set_vars( "usergroup", $user_group );
}


/**
* Проверяем на целостность массива информации о текущем пользователе
* При отсутствии - создаёт новый и сохраняет массив в кеш
*/
if (!$member_id) $member_id = get_vars( "member_id" );
if (!$member_id) {
    if (!isset($_COOKIE['dle_user_id'])) die("Пройдите авторизацию на сайте!");
    $member_id = $dle_api->load_table(USERPREFIX . '_users', '*', "user_id = {$_COOKIE['dle_user_id']}");
    set_vars('member_id', $member_id);
}

/**
* Проверяем на целостность массива информации о языковых фразах
* При отсутствии - создаёт новый и сохраняет массив в кеш
*/
if (!$langs || !$langtranslit) {
    $selected_language = $config['langs'];

    if (isset($_COOKIE['selected_language'])) {

        $_COOKIE['selected_language'] = trim(totranslit($_COOKIE['selected_language'], false, false));

        if ($_COOKIE['selected_language'] != "" and @is_dir(ROOT_DIR . '/language/' . $_COOKIE['selected_language'])) {
            $selected_language = $_COOKIE['selected_language'];
        }

    }

    if (file_exists(DLEPlugins::Check(ROOT_DIR . '/language/' . $selected_language . '/website.lng'))) {
        include_once(DLEPlugins::Check(ROOT_DIR . '/language/' . $selected_language . '/website.lng'));
    }
}

/**
* Фильтруем введённые данные в URL
*/
$input_data = filter_input_array(INPUT_GET);

/**
* Параметр news_id
* Если нужно проставить изображение к определённой новости
*/
$news_id = (int)$input_data['news_id'] ?: 0;
/**
* Параметр area
* Тип поля
* Если не знаете для чего оно, то не трогайте и не добавляйте ничего
*/
$area = $input_data['area'] ? totranslit($input_data['area']) : "xfieldsimage";
/**
* Параметр image
* Название поля с изображением, куда будет проставляться новое изображение
*/
$xfposter = $input_data['image'] ? totranslit($input_data['image']) : "";
/**
* Параметр kpid
* Название поля с ID кинопоиска, откуда будет браться информация и по которому будет происходить запрос
*/
$xfkpid = $input_data['kpid'] ? totranslit($input_data['kpid']) : "";
/**
* Параметр api
* API ключ сервиса
*/
$apikey = $input_data['api'] ? totranslit($input_data['api']) : "";

if (empty($apikey)) die("В параметры URL добавьте параметр api и через = API неофициального API кинопоиска");
if (empty($xfkpid)) die("В параметры URL добавьте параметр kpid и через = укажите название поля с ID кинопоиска");
if (empty($xfposter)) die("В параметры URL добавьте параметр image и через = укажите название поля с изображением, которое будет обновляться");

/**
* Получаем параметры доп. поля с изображением
*/
$xfparam = xfparamload($xfposter);

if (!is_array($xfparam)) die("Создайте доп. поле {$xfposter}!");

/**
* Создаём конфигурацию
*/
$xfname = $xfparam[0];
$t_seite = (int)$config['t_seite'];
$m_seite = $t_seite;
$t_size = $xfparam[13];
$m_size = 0;
$config['max_up_side'] = $xfparam[9];
$config['max_up_size'] = $xfparam[10];
$config['min_up_side'] = $xfparam[22];
$make_watermark = (bool)$xfparam[11];
$make_thumb = (bool)$xfparam[12];
$make_medium = false;

$t_size = explode("x", $t_size);
if (count($t_size) == 2) {
    $t_size = (int)$t_size[0] . "x" . (int)$t_size[1];
} else $t_size = (int)$t_size[0];

$m_size = explode("x", $m_size);
if (count($m_size) == 2) {
    $m_size = (int)$m_size[0] . "x" . (int)$m_size[1];
} else $m_size = (int)$m_size[0];

/**
* Проставка новых изображений
* Если не указано определённое ID новости, то будет искать по всей базе данных
*/
if ($news_id === 0) {
    $posts = $dle_api->load_table(PREFIX . '_post', '*', 1, true);

    foreach ($posts as $p) {
        setPoster($p['id']);
    }
} else {
    setPoster($news_id);
}

Написал функционал.

Инструкция:
  • Создаём с любым названием файл в корне сайта и вставляем код выше в него.
  • В браузере переходим по www.вашсайт.ру/файл.php?api=КЛЮЧ АПИ&image=НАЗВАНИЕ ПОЛЯ С ИЗОБРАЖЕНИЕМ&kpid=НАЗВАНИЕ ПОЛЯ С ID Кинопоиска
  • Ждём
Как по мне api встроенное в dle устарело много версий назад, с другой стороны оно и есть "не использовать костыли", пользоваться тем что заложено в dle. На досуге потестирую, интересно как ведет себя код
 
Как по мне api встроенное в dle устарело много версий назад, с другой стороны оно и есть "не использовать костыли", пользоваться тем что заложено в dle. На досуге потестирую, интересно как ведет себя код
Для разрабов много чего устарело. Однако, так проще данные из бд доставать. Они, вроде, кешируются.

Тут вся фишка в классе загрузок. Нашёл баг разраба. Не даёт загрузить по фтп, т.е. локальный файл. Из-за этого пришлось имитировать загрузку файла
 
В dle всегда были баги, последний мной найденный касается функции totranslit, в language/Ukrainian/adminpanel.lng
PHP:
$langtranslit = array(
'а' => 'a', 'б' => 'b', 'в' => 'v',
'г' => 'g', 'д' => 'd', 'е' => 'e',
'ё' => 'e', 'ж' => 'zh', 'з' => 'z',
'и' => 'y', 'й' => 'i', 'к' => 'k',
'л' => 'l', 'м' => 'm', 'н' => 'n',
'о' => 'o', 'п' => 'p', 'р' => 'r',
'с' => 's', 'т' => 't', 'у' => 'u',
'ф' => 'f', 'х' => 'kh', 'ц' => 'c',
'ч' => 'ch', 'ш' => 'sh', 'щ' => 'shch',
'ь' => '', 'ы' => 'y', 'ъ' => '',
'э' => 'e', 'ю' => 'іu', 'я' => 'ia',
"ї" => "i", "є" => "ie", "ґ" => "g",

'А' => 'A', 'Б' => 'B', 'В' => 'V',
'Г' => 'G', 'Д' => 'D', 'Е' => 'E',
'Ё' => 'E', 'Ж' => 'Zh', 'З' => 'Z',
'И' => 'Y', 'Й' => 'Y', 'К' => 'K',
'Л' => 'L', 'М' => 'M', 'Н' => 'N',
'О' => 'O', 'П' => 'P', 'Р' => 'R',
'С' => 'S', 'Т' => 'T', 'У' => 'U',
'Ф' => 'F', 'Х' => 'Kh', 'Ц' => 'C',
'Ч' => 'Ch', 'Ш' => 'Sh', 'Щ' => 'Shch',
'Ь' => '', 'Ы' => 'Y', 'Ъ' => '',
'Э' => 'E', 'Ю' => 'Yu', 'Я' => 'Ya',
"Ї" => "Yi", "Є" => "Ye", "Ґ" => "G",

"À"=>"A", "à"=>"a", "Á"=>"A", "á"=>"a",
"Â"=>"A", "â"=>"a", "Ä"=>"A", "ä"=>"a",
"Ã"=>"A", "ã"=>"a", "Å"=>"A", "å"=>"a",
"Æ"=>"AE", "æ"=>"ae", "Ç"=>"C", "ç"=>"c",
"Ð"=>"D", "È"=>"E", "è"=>"e", "É"=>"E",
"é"=>"e", "Ê"=>"E", "ê"=>"e", "Ì"=>"I",
"ì"=>"i", "Í"=>"I", "í"=>"i", "Î"=>"I",
"î"=>"i", "Ï"=>"I", "ï"=>"i", "Ñ"=>"N",
"ñ"=>"n", "Ò"=>"O", "ò"=>"o", "Ó"=>"O",
"ó"=>"o", "Ô"=>"O", "ô"=>"o", "Ö"=>"O",
"ö"=>"o", "Õ"=>"O", "õ"=>"o", "Ø"=>"O",
"ø"=>"o", "Œ"=>"OE", "œ"=>"oe", "Š"=>"S",
"š"=>"s", "Ù"=>"U", "ù"=>"u", "Û"=>"U",
"û"=>"u", "Ú"=>"U", "ú"=>"u", "Ü"=>"U",
"ü"=>"u", "Ý"=>"Y", "ý"=>"y", "Ÿ"=>"Y",
"ÿ"=>"y", "Ž"=>"Z", "ž"=>"z", "Þ"=>"B",
"þ"=>"b", "ß"=>"ss", "£"=>"pf", "¥"=>"ien",
"І"=>"I", "і"=>"i", "ð"=>"eth", "ѓ"=>"r"
);
А в language/Ukrainian/website.lng
PHP:
$langtranslit = array(
    'а' => 'a', 'б' => 'b', 'в' => 'v',
    'г' => 'g', 'д' => 'd', 'е' => 'e',
    'ё' => 'e', 'ж' => 'zh', 'з' => 'z',
    'и' => 'i', 'й' => 'j', 'к' => 'k',
    'л' => 'l', 'м' => 'm', 'н' => 'n',
    'о' => 'o', 'п' => 'p', 'р' => 'r',
    'с' => 's', 'т' => 't', 'у' => 'u',
    'ф' => 'f', 'х' => 'h', 'ц' => 'c',
    'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sch',
    'ь' => '', 'ы' => 'y', 'ъ' => '',
    'э' => 'je', 'ю' => 'ju', 'я' => 'ja',
    "ї" => "ji", "є" => "ye", "ґ" => "g",
    
    'А' => 'A', 'Б' => 'B', 'В' => 'V',
    'Г' => 'G', 'Д' => 'D', 'Е' => 'E',
    'Ё' => 'E', 'Ж' => 'Zh', 'З' => 'Z',
    'И' => 'I', 'Й' => 'J', 'К' => 'K',
    'Л' => 'L', 'М' => 'M', 'Н' => 'N',
    'О' => 'O', 'П' => 'P', 'Р' => 'R',
    'С' => 'S', 'Т' => 'T', 'У' => 'U',
    'Ф' => 'F', 'Х' => 'H', 'Ц' => 'C',
    'Ч' => 'Ch', 'Ш' => 'Sh', 'Щ' => 'Sch',
    'Ь' => '', 'Ы' => 'Y', 'Ъ' => '',
    'Э' => 'Je', 'Ю' => 'Ju', 'Я' => 'Ja',
    "Ї" => "Ji", "Є" => "ye", "Ґ" => "G",
    "À"=>"A", "à"=>"a", "Á"=>"A", "á"=>"a",
    "Â"=>"A", "â"=>"a", "Ä"=>"A", "ä"=>"a",
    "Ã"=>"A", "ã"=>"a", "Å"=>"A", "å"=>"a",
    "Æ"=>"AE", "æ"=>"ae", "Ç"=>"C", "ç"=>"c",
    "Ð"=>"D", "È"=>"E", "è"=>"e", "É"=>"E",
    "é"=>"e", "Ê"=>"E", "ê"=>"e", "Ì"=>"I",
    "ì"=>"i", "Í"=>"I", "í"=>"i", "Î"=>"I",
    "î"=>"i", "Ï"=>"I", "ï"=>"i", "Ñ"=>"N",
    "ñ"=>"n", "Ò"=>"O", "ò"=>"o", "Ó"=>"O",
    "ó"=>"o", "Ô"=>"O", "ô"=>"o", "Ö"=>"O",
    "ö"=>"o", "Õ"=>"O", "õ"=>"o", "Ø"=>"O",
    "ø"=>"o", "Œ"=>"OE", "œ"=>"oe", "Š"=>"S",
    "š"=>"s", "Ù"=>"U", "ù"=>"u", "Û"=>"U",
    "û"=>"u", "Ú"=>"U", "ú"=>"u", "Ü"=>"U",
    "ü"=>"u", "Ý"=>"Y", "ý"=>"y", "Ÿ"=>"Y",
    "ÿ"=>"y", "Ž"=>"Z", "ž"=>"z", "Þ"=>"B",
    "þ"=>"b", "ß"=>"ss", "£"=>"pf", "¥"=>"ien",
    "І"=>"I", "і"=>"i", "ð"=>"eth", "ѓ"=>"r"
);
разные массивы. Через создание редактирование новостей totranslit срабатывает по одному, а подключая его в файлы движка, в тот же full story срабатывает по другому. Актуальная dle 15.2. Нет активной лицензии чтобы написать о баге. И таких хватает в движке, и никто не видит, не правятся
 
Попробуй модуль кинопостер, работал, сейчас не тестил его.
 
а можно подправить данный код чтобы изображения загружались и в виде url попадали в текстовое доп. поле , а не в загружаемое изображение? и при этом сразу в webp формате
 
а можно подправить данный код чтобы изображения загружались и в виде url попадали в текстовое доп. поле , а не в загружаемое изображение? и при этом сразу в webp формате
Можно
 

Пользователи, просматривающие данную тему

Верх