Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 09.07.2014
Сообщений: 119

Вывод ключей

19.11.2017, 05:00. Показов 1691. Ответов 35
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. У меня есть плагин на wordpress, разширение woocommerce. И есть ньюанс в его работе. Уже на этапе завершения оплаты плагин отдает мне ключи адреса доставки, а не само значение. Выглядит это как на изображении.

Вот код подтягивание к примеру города

PHP
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
class City extends Area
{
 
    /**
     * @param string $type
     * @return string
     */
    public static function key($type = '')
    {
        return parent::_key(self::KEY_CITY, $type);
    }
 
    /**
     * @return void
     */
    public static function ajaxGetCitiesByNameSuggestion()
    {
        $areaRef = ArrayHelper::getValue($_POST, 'parent_area_ref', null);
        $name = $_POST['name'];
        if(is_null($areaRef)){
            $areas = self::findByNameSuggestion($name);
        }else{
            $areas = self::findByNameSuggestionAndParentArea($name, $areaRef);
        }
        foreach ($areas as $area) {
            $area->getRef();
            $area->getDescription();
        }
        echo json_encode($areas);
        exit;
    }
}

А на странице оформления используеться такой выковыривания общего списка городов и тд

PHP
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
private function addNovaPoshtaFields($fields, $location)
    {
        /** @noinspection PhpUndefinedFieldInspection */
        $area = WC()->customer->nova_poshta_region;
        /** @noinspection PhpUndefinedFieldInspection */
        $city = WC()->customer->nova_poshta_city;
        $required = NP()->isGet() ?: (NP()->isNP() && NP()->isCheckout());
        $fields[Region::key($location)] = [
            'label' => __('Region', NOVA_POSHTA_DOMAIN),
            'type' => 'select',
            'required' => $required,
            'default' => '',
            'options' => OptionsHelper::getList(Region::findAll()),
            'class' => array(),
            'custom_attributes' => array(),
        ];
        $fields[City::key($location)] = [
            'label' => __('City', NOVA_POSHTA_DOMAIN),
            'type' => 'select',
            'required' => $required,
            'options' => OptionsHelper::getList(City::findByParentAreaRef($area)),
            'class' => array(),
            'value' => '',
            'custom_attributes' => array(),
        ];
        $fields[Warehouse::key($location)] = [
            'label' => __('Nova Poshta Warehouse (#)', NOVA_POSHTA_DOMAIN),
            'type' => 'select',
            'required' => $required,
            'options' => OptionsHelper::getList(Warehouse::findByParentAreaRef($city)),
            'class' => array(),
            'value' => '',
            'custom_attributes' => array(),
        ];
        return $fields;
    }
Миниатюры
Вывод ключей  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.11.2017, 05:00
Ответы с готовыми решениями:

Вывод значения ключей массива по условию совпадения других ключей
Есть массив $arElements Array ( => Array ( => first => Name =>...

Вывод ключей и значений массива
Как вывести скажем 1color:blue не получаеться $a = array( '1color' => 'red', '2color' => 'grin' , '3color' => 'blue'); ...

Убрать вывод ключей с тильдой
Здравствуйте! Скажите, пожалуйста, как убрать при выводе массивов ключи с тильдой? var_dump($arItems);

35
ytf
276 / 259 / 185
Регистрация: 15.08.2017
Сообщений: 1,483
19.11.2017, 11:46
попробуйте сделать экспорт таблиц woocommerce или всей бд, в ней найти нужные значения,
определив, в какой таблице и полях хранятся значения их можно будет получать по ключу
0
0 / 0 / 0
Регистрация: 09.07.2014
Сообщений: 119
19.11.2017, 12:44  [ТС]
ytf, значения тянуться не с бд, а через АРI плагина разширения
Миниатюры
Вывод ключей  
0
ytf
276 / 259 / 185
Регистрация: 15.08.2017
Сообщений: 1,483
19.11.2017, 15:26
В файле woo-shipping-for-nova-poshta/classes/base/OptionsHelper.php

указан код
PHP
1
2
3
        foreach ($locations as $location) {
            $result[$location->ref] = $location->description;
        }
соответственно форма при отправке передаёт ref, а отображает description,
можно изменить код

PHP
1
2
3
        foreach ($locations as $location) {
            $result[$location->description] = $location->description;
        }
тогда форма будет отправлять description

Добавлено через 2 минуты
или добавить вторую функцию

PHP
1
2
3
4
5
6
7
8
9
10
11
    public static function getList2($locations, $enableEmpty = true)
    {
        $result = array();
        if ($enableEmpty) {
            $result[''] = __('Choose an option', NOVA_POSHTA_DOMAIN);
        }
        foreach ($locations as $location) {
            $result[$location->description] = $location->description;
        }
        return $result;
    }
и в classes/Checkout.php добавить "2" после "OptionsHelper::getList"
0
0 / 0 / 0
Регистрация: 09.07.2014
Сообщений: 119
19.11.2017, 15:36  [ТС]
ytf, ничего не изменилось. В первом варианте перестали подтягиваться отделения НП, а второй просто ничего не дал.
0
ytf
276 / 259 / 185
Регистрация: 15.08.2017
Сообщений: 1,483
19.11.2017, 18:12
вы говорите плагин отдаёт ключи (ref) места доставки вместо названия (description) на странице завершения оплаты,
судя по картинке речь шла о выводе информации, пользователь должен ещё раз увидеть адрес доставки,
можете написать адрес, который вы видите в адресной строке браузера в этот момент?
0
0 / 0 / 0
Регистрация: 09.07.2014
Сообщений: 119
20.11.2017, 04:59  [ТС]
ytf, ну да, эта старница подтвержения оплаты. Аналогичные ключи приходять покупателю и на емейл. http://ibai.com.ua/checkout/or... 236bd1aa7e - а вот адрес
0
ytf
276 / 259 / 185
Регистрация: 15.08.2017
Сообщений: 1,483
20.11.2017, 08:43
попробовал установить вордпресс, вукомерс, плагин новая почта, требуется api key для "новая почта"
0
0 / 0 / 0
Регистрация: 09.07.2014
Сообщений: 119
20.11.2017, 11:01  [ТС]
ytf, 28c4d3ca52c57f3864be7120582ddacc
0
ytf
276 / 259 / 185
Регистрация: 15.08.2017
Сообщений: 1,483
20.11.2017, 18:30
ввёл в настройках api key, при оформлении заказа пользователь не может выбрать регион
0
0 / 0 / 0
Регистрация: 09.07.2014
Сообщений: 119
20.11.2017, 18:32  [ТС]
ytf, может в настройках плагина добавить место отправки? Оно подтягиваеться по АПИ?
0
ytf
276 / 259 / 185
Регистрация: 15.08.2017
Сообщений: 1,483
20.11.2017, 21:44
В админке указал Area/City/Warehouse Харьков, при вводе кружок вертится, но варианты не появляются
В phpmyadmin в таблице novaya_poshta нет строк

Добавлено через 2 часа 28 минут
судя по всему в таблице wp_usermeta если сделать поиск по user_id можно узнать
shipping_nova_poshta_region
shipping_nova_poshta_city
shipping_nova_poshta_warehouse
но там будут коды

а также
shipping_address_1
shipping_city
shipping_state
там будет адрес, написанный словами
0
0 / 0 / 0
Регистрация: 09.07.2014
Сообщений: 119
21.11.2017, 19:42  [ТС]
ytf, тоесть в woocmmerce на cheсkout надо выводить shipping_address_1 shipping_city shipping_state?

Добавлено через 21 час 7 минут
ytf,

PHP
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
private function createTableAreas()
    {
        $table = Area::table();
        $region = Area::KEY_REGION;
        $city = Area::KEY_CITY;
        $warehouse = Area::KEY_WAREHOUSE;
 
        // http://stackoverflow.com/questions/766809/whats-the-difference-between-utf8-general-ci-and-utf8-unicode-ci
        $tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB';
 
        $query = <<<QUERY
            CREATE TABLE IF NOT EXISTS {$table} (
                `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
                `ref` VARCHAR(50) NOT NULL,
                `area_type` ENUM('$region','$city','$warehouse') NOT NULL,
                `description` TINYTEXT NOT NULL,
                `description_ru` TINYTEXT,
                `parent_area_ref` VARCHAR(50) DEFAULT NULL,
                `updated_at` INT(10) UNSIGNED NOT NULL,
                `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
                PRIMARY KEY `id` (`id`),
                UNIQUE KEY `uk_ref` (`ref`)
            ){$tableOptions}
QUERY;
        $this->db->query($query);
    }
А разве не в этом участке Database.php идет занесение значений в БД? На сколько понимаю оно как раз тут ключи заганяет.

Добавлено через 24 минуты
А те значения, они в wp_postmeta, и их замена ничего не изменила.
0
ytf
276 / 259 / 185
Регистрация: 15.08.2017
Сообщений: 1,483
21.11.2017, 20:28
Цитата Сообщение от BohdanchukVL Посмотреть сообщение
тоесть в woocmmerce на cheсkout надо выводить shipping_address_1 shipping_city shipping_state?
точно можно узнать лишь после просмотра полного бэкапа бд, и тогда решать из user_meta или order_meta брать информацию
0
0 / 0 / 0
Регистрация: 09.07.2014
Сообщений: 119
22.11.2017, 00:50  [ТС]
ytf, https://fex.net/#!355370856731 - бекап БД
0
ytf
276 / 259 / 185
Регистрация: 15.08.2017
Сообщений: 1,483
22.11.2017, 13:07
ref которые я вижу на скриншоте хранятся в таблице wp_postmeta
SQL
1
2
3
(18256, 14550, '_billing_nova_poshta_region', '7150812b-9b87-11de-822f-000c2965ae0e'),
(18257, 14550, '_billing_nova_poshta_city', 'f7062316-4078-11de-b509-001d92f78698'),
(18258, 14550, '_billing_nova_poshta_warehouse', '67381462-92b5-11e5-a023-005056887b8d'),
по ним можно узнать текстовое значение из другой таблицы
SQL
1
SELECT description_ru FROM wp_nova_poshta_area WHERE `ref`='67381462-92b5-11e5-a023-005056887b8d' AND area_type='nova_poshta_warehouse' LIMIT 1;
SQL
1
SELECT description_ru FROM wp_nova_poshta_area WHERE `ref`='f7062316-4078-11de-b509-001d92f78698' AND area_type='nova_poshta_city' LIMIT 1;
SQL
1
SELECT description_ru FROM wp_nova_poshta_area WHERE `ref`='7150812b-9b87-11de-822f-000c2965ae0e' AND area_type='nova_poshta_region' LIMIT 1;
0
0 / 0 / 0
Регистрация: 09.07.2014
Сообщений: 119
22.11.2017, 16:08  [ТС]
ytf, окей, а где текстовые значения?
0
ytf
276 / 259 / 185
Регистрация: 15.08.2017
Сообщений: 1,483
22.11.2017, 16:28
в таблице wp_nova_poshta_area
0
0 / 0 / 0
Регистрация: 09.07.2014
Сообщений: 119
22.11.2017, 16:45  [ТС]
ytf, тоесть нужно заменить значение которое заноситься в '_billing_nova_poshta_region' (к примеру) с ключа на description. На сколько я вижу это происходит в Checkout.php?

Добавлено через 1 минуту
Нужны ли вообще ключи для функционирования плагина в БД?

может заменить зачения полей при создании в Databse.php?

MySQL
1
2
3
4
5
6
7
8
9
10
11
12
CREATE TABLE IF NOT EXISTS {$table} (
                `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
                `ref` VARCHAR(50) NOT NULL,
                `area_type` ENUM('$region','$city','$warehouse') NOT NULL,
                `description` TINYTEXT NOT NULL,
                `description_ru` TINYTEXT,
                `parent_area_ref` VARCHAR(50) DEFAULT NULL,
                `updated_at` INT(10) UNSIGNED NOT NULL,
                `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
                PRIMARY KEY `id` (`id`),
                UNIQUE KEY `uk_ref` (`ref`)
            ){$tableOptions}
0
ytf
276 / 259 / 185
Регистрация: 15.08.2017
Сообщений: 1,483
22.11.2017, 17:36
Цитата Сообщение от BohdanchukVL Посмотреть сообщение
тоесть нужно заменить значение которое заноситься в '_billing_nova_poshta_region' (к примеру) с ключа на description
но выводится именно ref поле, а не _billing_nova_poshta_region, поэтому нужно искать шаблон страницы, в которой выводятся данные с ошибкой, находить контроллер/плагин передающий в шаблон данные, и в нём выполнить Sql запросы в бд, чтобы узнать description, эти дескриптионы передать в шаблон в виде дополнительных переменных или в замен существующих ref
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.11.2017, 17:36
Помогаю со студенческими работами здесь

Массив ключей из ключей двух массивов
Добрый день. Необходимо собрать все ключи с двух массивов как можно эффективнее и менее ресурсозатратно. Например есть два...

генератор ключей
как сделать код чтобы он генерировал рандомные ключи , чтобы получалось чтото вроде этого -&gt; jTf34-jYFG1-uTV5X-pEc4m-EbMu7 ?

usort и сохранение ключей
Здравствуйте! В общем юзаю разреженный 2-у мерный массив. Надо отсортировать его по определенному полю с сохранением отношения...

Подсветка ключей в тексте
Здравствуйте уважаемые знатоки. Появилась такая идея. Написать программу, в которую можно вставить текст в один текст бокс и вставить...

Сортировка ключей массива
Подскажите пожалуйста, как можно из массива =&gt; ВОПРОС - ... =&gt; ОТВЕТ - .... =&gt; ВОПРОС - ... =&gt; ОТВЕТ -...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru