Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam

Пикабу Игры +1000 бесплатных онлайн игр

Динамичный карточный батлер с PVE и PVP-боями онлайн! Собери коллекцию карточных героев, построй свою боевую колоду и вступай в бой с другими игроками.

Cards out!

Карточные, Ролевые, Стратегии

Играть
Игра рыбалка представляет собой полноценный симулятор рыбалки и дает возможность порыбачить в реально существующих местах из жизни и поймать рыбу, которая там обитает.

Рыбный дождь

Спорт, Симуляторы, Рыбалка

Играть
Постройте новое королевство и разблокируйте все постройки! Средневековое фэнтези погрузит вас в сказочную атмосферу. Онлайн-игра понравится детям, подросткам и увлечет даже взрослых! Головоломка доступна бесплатно и без регистрации. Играть можно в браузере с ПК или смартфона.

Волшебное Королевство: Собирай Гексы

Головоломки, Казуальные, Таймкиллер

Играть
Archer Ragdoll Masters — экшн-игра со стрельбой из лука стикменом с физикой тряпичной куклы.

Archer Ragdoll Masters

Аркады, Гиперказуальные, 2D

Играть
Погрузись в мир куриных перестрелок! Хватай пушку и пусть только перья останутся на месте твоих врагов!

Чикен Страйк

Шутер, Экшены, Для мальчиков

Играть

Топ прошлой недели

  • Oskanov Oskanov 8 постов
  • alekseyJHL alekseyJHL 6 постов
  • XpyMy XpyMy 1 пост
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Новости Пикабу Помощь Кодекс Пикабу Реклама О компании
Команда Пикабу Награды Контакты О проекте Зал славы
Промокоды Скидки Работа Курсы Блоги
Купоны Biggeek Купоны AliExpress Купоны М.Видео Купоны YandexTravel Купоны Lamoda
Мобильное приложение

Синхронизация

С этим тегом используют

Кот Вертикальное видео YouTube Юмор Android Мужчины Смартфон Все
194 поста сначала свежее
Staryi42
1 год назад

Ексель на складе⁠⁠

Прошу коллективный интеллект помочь мне с работой на складе (нет, таскать ничего не надо).
Перепробовали довольно много складских программ. В итоге понял что мне удобнее работать в Ексель, там я могу настроить всё как мне надо и функционал не будет уступать ни одному облачному сервису, т.к. есть только нужное мне, онлайн-сервисы же или очень сложные или примитивные.
Теперь сама задача - как синхронизировать этот файл на ПК с какой-нибудь простейшей программой-сканером штрихкодов? Может связки посоветуете или любой другой способ.

Малый бизнес Торговля Предпринимательство Предприниматель Склад Microsoft Excel Синхронизация Сканер штрихкодов Текст
51
2
El.consado
El.consado
1 год назад

Синхронизация браузера через nextcloud⁠⁠

Здравствуйте друзья! Многие знают и пользуются функцией синхронизации в браузере. А чо, удобно же, на работе и дома в браузере синхронизированы закладки, плагины, история. И вот возник у меня вопрос, а возможно ли завернуть эту синхронизацию не на сервера браузера, а на свой сервер? Пароли я давно уже в сторонем приложении синхронизирую. Но вот со всем остальным как то не получается. Вопрос возник не столько из-за парноидальных наклонностей, сколько из-за криво работающей штатной синхронизации, в частности оперы. Буквально на днях, на работе, отвалился профиль оперы, просто хлоп и опера в дефолте, все ручками настраивать жутко лениво, да и на работе нужно работу работать, а не оперу настраивать... Собственно, вот и возник вопрос. Имею домашний nextcloud. Не задавался подобным вопросом никто? Нагуглить чего-то толкового не удалось.
p.s. оказывается firefox позволяет изменить путь к папке с профилем. Расположил его в папке NC, но nextcloud в процессе работы браузера пытается синхронизировать файлы, учитывая, что они в этот момент заняты, получаю постоянные ошибки синхронизации. Может быть есть возможность синхронизацию папки профиля в винде 7 сделать по событию (закрытия браузера)?

Windows Nextcloud Браузер Синхронизация Текст
3
44
Radrigosen
Radrigosen
1 год назад
Видеохостинг на Пикабу

Изумительная синхронизация⁠⁠

Источник: ТК.

Дети Мяч Синхронизация Музыка Одновременность В такт музыке Видео Вертикальное видео Telegram
5
Typical.chelik
Typical.chelik
1 год назад

Синхронизация payday 2⁠⁠

У меня есть payday в epic games но я хочу установить в стиме, сохраниться ли мой прогресс?

Payday 2 Синхронизация Steam Epic Games Текст Вопрос
8
489
Historyworl
Historyworl
1 год назад

Синхронизация⁠⁠

Синхронизация Милота Видео Вертикальное видео Кот Повтор
7
2580
MEMEzya
MEMEzya
1 год назад
Twitter

Иначе не комильфо⁠⁠

Иначе не комильфо X (Twitter), Скриншот, Еда, Синхронизация

https://t.me/memezya/4092

X (Twitter) Скриншот Еда Синхронизация
118
Zexlerru
Zexlerru
2 года назад

Как автоматически менять цены на сайте без загрузки и выгрузки Excel файла с прайсом⁠⁠

Сегодня на связи отдел разработки и поддержки сайтов Зекслер. Рассказываем, как автоматизируем бизнес процессы клиентов. В этот раз сделали синхронизацию цен из Google-таблицы (дабы не грузить Excel и прочее) и цен на сайте производителя гаражей и хозблоков SKOGGY (да, для многих производственников делаем полный цикл по маркетингу, продажам, автоматизации и управленческому учету).

Как автоматически менять цены на сайте без загрузки и выгрузки Excel файла с прайсом Гайд, Программирование, Инструкция, Цены, Синхронизация, Длиннопост

В статье будут строчки кода и прочая внутрянка, но донесению сути она не должна помешать. А если всё же помешала, пиши в комментариях, учтём в следующих материалах.

Подписывайтесь на наш Телеграм-канал, где мы ежедневно публикуем посты по теме не только разработки, но и дизайна, маркетинга, продвижения и т.д. Будем рады новым подписчикам!

Возвращаемся к модулю. Задача состояла в разработке модуля для CMS Drupal, который синхронизирует данные из гугл документа формата Excel (Google Spreadsheet) в колонке с ценами в поля для цен на сайте.

Подготовка колонки с артикулами в Google таблице

Предварительно необходимо было задать связь записи продукта и таблицы. Для это в файле документа организовали колонку с уникальными полями (Артикулы), отвечающими за связь этой строки (продукта) с вариантом продукта в Drupal.

Как автоматически менять цены на сайте без загрузки и выгрузки Excel файла с прайсом Гайд, Программирование, Инструкция, Цены, Синхронизация, Длиннопост

В нашем случае, это колонка C.

Колонка с ценами – это N.

Начальная строка 5, а конечная 105.

После добавления всех артикулов в таблицу и правильных цен, переходим к следующему этапу.

Создание приложения в Google консоли

Следующий шаг – создание приложения. Переходим в Google Cloud Console и создаем отдельное приложение. Подключаем к нему (ENABLE APIS AND SERVICES) Google Drive API.

Далее нужно получить доступ к приложению. Для этого переходим в credentials и нажимаем Create credentials. После заполнения и добавления тестового пользователя, нужно скачать Client secrets в формате json (справа в строке).

После этого необходимо дать разрешения для доменов Authorized JavaScript origins и Authorized redirect URIs. В нашем случае это localhost и localhost/state.

Сохраненный файл json нужен для получения токена, который будем получать с помощью php-файла в отдельном скрипте в консоле.

Получение токена для ClientApi Google

Теперь нужно организовать получение токена. Для этого создаем в папке микропроекта composer.json и добавим туда google/apiclient посредством команды:

composer require google/apiclient

Делаем файл php с подгрузкой require __DIR__ . '/vendor/autoload.php';

А скачанный файл credentials размещаем в той же папке composer.json

{

"name": "my/google_spreadsheet_api",

"type": "my-api",

"description": "Library for google api",

"require": {

"google/apiclient": "^2.0"

},

"minimum-stability": "dev"

}

Файл index.php:

require __DIR__ .'/vendor/autoload.php';

if (php_sapi_name() != 'cli') {

throw new Exception('This application must be run on the command line.');

}

$pre_dir = __DIR__ . '/';

$relocation_url  = 'http://localhost/state';

$path_to_credentials  = $pre_dir.'credentials.json';

$path_to_result_token = $pre_dir. 'token.json';

use Google\Client;

/**

* Returns an authorized API client.

* @return Client the authorized client object

*/

function getClient()

{

global $relocation_url, $path_to_credentials, $path_to_result_token;

$client = new Google\Client();

$client->setApplicationName('Google Sheets API PHP Quickstart');

$client->setScopes('https://www.googleapis.com/auth/spreadsheets');

$client->setAuthConfig($path_to_credentials);

$client->setAccessType('offline');

$client->setPrompt('select_account consent');

$client->setRedirectUri($relocation_url);

// Load previously authorized token from a file, if it exists.

// The file token.json stores the user's access and refresh tokens, and is

// created automatically when the authorization flow completes for the first

// time.

$tokenPath = $path_to_result_token;

if (file_exists($tokenPath)) {

$accessToken = json_decode(file_get_contents($tokenPath), true);

$client->setAccessToken($accessToken);

}

// If there is no previous token or it's expired.

if ($client->isAccessTokenExpired()) {

// Refresh the token if possible, else fetch a new one.

if ($client->getRefreshToken()) {

$client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());

} else {

// Request authorization from the user.

$authUrl = $client->createAuthUrl();

printf("Open the following link in your browser:\n%s\n", $authUrl);

print 'Enter verification code: ';

$authCode = trim(fgets(STDIN));

// Exchange authorization code for an access token.

$accessToken = $client->fetchAccessTokenWithAuthCode($authCode);

$client->setAccessToken($accessToken);

// Check to see if there was an error.

if (array_key_exists('error', $accessToken)) {

throw new Exception(join(', ', $accessToken));

}

}

// Save the token to a file.

if (!file_exists(dirname($tokenPath))) {

mkdir(dirname($tokenPath), 0700, true);

}

file_put_contents($tokenPath, json_encode($client->getAccessToken()));

}

return $client;

}

// Get the API client and construct the service object.

$client = getClient();

Показываем пример файла credentials.json

{"web":{"client_id":"...","project_id":"gpru-artdetox-driven-bulwark","auth_uri":
"https://accounts.google.com/o/oauth2/auth","token_uri"
:"https://oauth2.googleapis.com/token","auth_provider_x509_cert_url":"https://www.googleapis.

com/oauth2/v1/certs","client_secret":"...","redirect_uris":["http://localhost/state"],"javascript_origins":

["http://localhost"]}}

Скрипт в index.php выполняется только в консоли php index.php

В результате выполнения скрипта в терминале (консоли) получим примерно следующее:

Как автоматически менять цены на сайте без загрузки и выгрузки Excel файла с прайсом Гайд, Программирование, Инструкция, Цены, Синхронизация, Длиннопост

Копируем полученную ссылку и вводим в строку браузера. Сейчас нужно получить код авторизации для того адреса email, который будет работать с этим приложением.

После авторизации и получения доступа к приложению, к вашим файлам Excel будет перенаправление примерно по такой ссылке:

http://localhost/state?code=4/0AWyig&scope=https://www.googleapis.com/auth/spreadsheets

Копируем code и вставляем в терминал. После этого получим файл token.json.

Как автоматически менять цены на сайте без загрузки и выгрузки Excel файла с прайсом Гайд, Программирование, Инструкция, Цены, Синхронизация, Длиннопост

Возможные проблемы получения токена

При получении токена могут возникнуть ошибки. Рассмотрим наиболее частые из них.

Проблема 1: Нет доступа к приложению или приложение не проверялось.

Решение: Добавьте тестового пользователя в разделе OAuth consent screen.

Проблема 2: Fatal error: Uncaught InvalidArgumentException: Redirect URI must be absolute in /var/www/vendor/google/auth/src/OAuth2.php:793

Как автоматически менять цены на сайте без загрузки и выгрузки Excel файла с прайсом Гайд, Программирование, Инструкция, Цены, Синхронизация, Длиннопост

Решение: Эта ошибка связана с тем, что в разделе credentials (https://console.cloud.google.com/apis/credentials) проекта не указаны Authorized JavaScript origins и Authorized redirect URIs. Необходимо их заполнить и сохранить. При этом сохранение будет происходит в течение 5 минут.

Завершение настройки модуля

После проведения всех манипуляций, организация получения данных и отправление их на обработку в Batch-процесс выглядит так.

Важно! Файл с которым работаете должен быть доступен для тестового пользователя, либо должен быть открыт доступ по ссылке (чтение).

К примеру, SheetId с файла https://docs.google.com/spreadsheets/d/3xS34U5аZ8zVzU65ho-VF... – это «3xS34U5аZ8zVzU65ho-VFRVg».

use Drupal\mw_google_spreadsheet\GetClient;

use Google\Service\Sheets;

/*

Это колонка - например E.

Колонка с ценами - например N

Начальная строка 5, а конечная 105.

*/

/* Получаем доступ к гугл файлу */

$columnArticul = 'E';

$columnPrice = 'N';

$start = 5;

$end = 105;

/* Ид рабочей области - файла гугл, берётся со ссылки на файл. */

$spreadsheetId = '1xS34U5vZ8z5jyblSJOvLUUShINhgKEVzU35ho-VFRVg';

$client = new GetClient();

$cl = $client->get();

$service = new Sheets($cl);

$range = $columnArticul . $start . ':' . $columnPrice . $end;

try {

$response = $service->spreadsheets_values->get($spreadsheetId, $range);

$values = $response->getValues();

}catch (Exception $e){

\Drupal::messenger()->addMessage( 'Выброшено исключение: ',  $e->getMessage(), "\n
", 'error', TRUE);  // Displays nothing (at UID=235)

die();

}

$num_operations = count($values);

$this->messenger()->addMessage($this->t('Creating an array of @num operations', ['@num' => $num_operations]));

$operations = [];

$i = 1;

foreach ($values as $value){

$operations[] = [

'mw_google_spreadsheet_op_1',

[

$value,

$this->t('(Operation @operation)', ['@operation' => $i]),

],

];

$i++;

}

$batch = [

'title' => $this->t('Creating an array of @num operations', ['@num' => $num_operations]),

'operations' => $operations,

'finished' => 'mw_google_spreadsheet_finished',

];

return $batch;

Функция обработки каждой строки 'mw_google_spreadsheet_op_1' в Batch-процессе выглядит так (описание в комментариях):

/**

* Batch operation for batch 1: one at a time.

*

* This is the function that is called on each operation in batch 1.

*/

function mw_google_spreadsheet_op_1($rowFromExcel, $operation_details, &$context) {

/* Пример полученной строки из файла

0 => "КХС-03-П-Т-Б"

1 => "Контейнер"

2 => "Стандарт"

3 => "3,06м"

4 => "2,16"

5 => "2,06"

6 => "200"

7 => "Торцевая"

8 => "Плоская"

9 => "Пол OSB"

10 => "Цинк"

11 => "р.106 800"

*/

//название поля из настройки сущности вариантов продукта - field_excele_artikul

/* получение всех записей вариантов для обработки по артикулу с колонки 0 */

$query = \Drupal::database()->select('commerce_product_variation__field_excele_artikul', 'cv_fea');

$query->fields('cv_fea', ['entity_id', 'revision_id', 'bundle', 'field_excele_artikul_value', 'langcode']);

$query->where('field_excele_artikul_value = :name', [':name' => $rowFromExcel[0]]);

$result = $query->execute()->fetchAll();

$ids = []; // все ид вариантов

foreach ($result as $item){

$ids[] = $item->entity_id;

}

// загружаем все варианты

$variations = \Drupal\commerce_product\Entity\ProductVariation::loadMultiple($ids);

//считаем их количество

$cont = count($rowFromExcel);

//из колонки цены удаляем все записи (кстати цена должна быть без копеек)

$price_new = preg_replace('/([^0-9]+)/','', $rowFromExcel[$cont - 1]);

/** @var \Drupal\commerce_product\Entity\ProductVariation $variation */

foreach ($variations as &$variation){

// в полученную из коллекции сущностей по артиклу вариантов записываем цену в нужном формате

// валюту можно брать из настроек магазина


$variation->setPrice(new \Drupal\commerce_price\Price($price_new, 'RUB'));

$variation->save();

}

$context['results'][] = implode(',', $ids);

// Optional message displayed under the progressbar.

$context['message'] = t('Running Batch "@id" @details',

['@id' => implode(',', $ids), '@details' => $operation_details]

);

}

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

Можно менять строки начальной и конечной строки, не обновляя старые.

Как это работает для менеджера

Если цена меняется, менеджер исправляет ее в Google таблице. После этого в админке сайта необходимо выполнить одну простую команду «Обновить цены».

Как автоматически менять цены на сайте без загрузки и выгрузки Excel файла с прайсом Гайд, Программирование, Инструкция, Цены, Синхронизация, Длиннопост

В результате на сайте автоматически цены будут обновлены.

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

Пишите комментарии, если остались вопросы по настройкам.

Показать полностью 5
[моё] Гайд Программирование Инструкция Цены Синхронизация Длиннопост
2
22
Pekitanto
2 года назад
Мото

Самостоятельная синхронизация карбюраторов нипочем⁠⁠

Купил я как-то раз себе "некрояпа" 97 года. И встал тут неожиданно вопрос о том, что его и обслуживать надо, и ремонтировать, и настраивать там, и тд. Быстрый обзвон нескольких мотосервисов результатов положительных не дал. Некоторые даже говорили не возьмёмся за такую старую технику, но в основном очень нещаинтересованным тоном говорили перезвоните через месяц может будет время. Вопрос на самом деле выеденного яйца не стоит. А именно синхронизация карбюраторов. И озадачился я сам её проводить научиться/приспособиться. Но! Вакуумметр стоит порядка 1000 руб за штуту! А их надо 4. Как можно сделать это подешевле? В идеале вообще бесплатно! И придумал я такую штуку. Может и было где раньше, но то что я находил на тот момент (3 года назад) в интернете это в основном трубка с маслом которая подключается на 2 карба двумя концами. А как быть с 4 карбами? Взял я прозрачный шланг силиконовый, разрезал на 4 части, один конец на штуцер карбюратора, второй конец перекинул через обрешетку крыши бани высотой примерно 4 метра и в ведро с водой. Все! Готово! Устройство для синхронизации карбюраторов за 600 рублей! Ну и баня ещё нужна...

Подкрашиваю обычно воду, но тут как назло красители все поскончалися. Ну и фото на всякий)

Самостоятельная синхронизация карбюраторов нипочем Мото, Карбюратор, Синхронизация, Ремонт, Техническое обслуживание, Видео, Длиннопост
Показать полностью 1
[моё] Мото Карбюратор Синхронизация Ремонт Техническое обслуживание Видео Длиннопост
8
Посты не найдены
О Нас
О Пикабу
Контакты
Реклама
Сообщить об ошибке
Сообщить о нарушении законодательства
Отзывы и предложения
Новости Пикабу
RSS
Информация
Помощь
Кодекс Пикабу
Награды
Команда Пикабу
Бан-лист
Конфиденциальность
Правила соцсети
О рекомендациях
Наши проекты
Блоги
Работа
Промокоды
Игры
Скидки
Курсы
Зал славы
Mobile
Мобильное приложение
Партнёры
Промокоды Biggeek
Промокоды Маркет Деливери
Промокоды Яндекс Путешествия
Промокоды М.Видео
Промокоды в Ленте Онлайн
Промокоды Тефаль
Промокоды Сбермаркет
Промокоды Спортмастер
Постила
Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии