Там кто-либо кэширует Платформы для Delphi?

Сначала код целевого купона должен быть установлен как ограниченный только для целевого продукта:

enter image description here

Следующий код будет применяться определенный купон (скидка) только на определенный товар в корзине, если промежуточный итог корзины (исключая этот конкретный товар) составляет до $40:

add_action('woocommerce_before_calculate_totals', 'discount_based_on_total_threshold');
function discount_based_on_total_threshold( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        return;

    // Your settings
    $coupon_code      = 'summer'; // Coupon code
    $amount_threshold = 40; // Total amount threshold
    $targeted_product = 37; // Targeted product ID

    // Initializing variables
    $total_amount     = 0;
    $applied_coupons  = $cart->get_applied_coupons();
    $coupon_code      = sanitize_text_field( $coupon_code );
    $found            = false;

    // Loop through cart items
    foreach( $cart->get_cart() as $cart_item ) {
        if( ! in_array( $targeted_product, array( $cart_item['product_id'], $cart_item['data']->get_id() ) ) ) {
            // Get the cart total amount (excluding the targeted product)
            $total_amount += $cart_item['line_total'] + $cart_item['line_tax'];
        } else {
            // Targeted product is found
            $found = true;
        }
    }

    // Applying coupon
    if( ! in_array($coupon_code, $applied_coupons) && $found && $total_amount >= $amount_threshold ){
        $cart->add_discount( $coupon_code );
    }
    // Removing coupon
    elseif( in_array($coupon_code, $applied_coupons) && ( $total_amount < $amount_threshold || ! $found ) ){
        $cart->remove_coupon( $coupon_code );
    }
}

код помещается в файл function.php вашего активного ребенка тема (или активная тема). Проверено и работает.

5
задан jamiei 4 May 2009 в 10:12
поделиться

6 ответов

Я использовал memcached для Linux (есть версии для Windows и MacOS, а также почти для любой другой ОС), это довольно просто.

Я имел дело с непосредственно, используя TIDTelnet, читая документацию протокола , я использовал только set , get , delete и quit .

Я использовал команды такого типа (я установил и получил «name», 14 - это число байтов, которое нужно сохранить):

osama@osama:~$ telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
set name 0 0 14
Osama Alassiry
STORED
get name
VALUE name 0 14
Osama Alassiry
END
quit

memcached позволяет хранить до 1 МБ на ключ кеша, I использовали составные ключи, такие как «Person | 17 | name», «Person | 17 | picture», «Employee | 7 | Salary | Basic» (это вымышленные имена, не связанные с тем, что я действительно делал) ... Я сохранил некоторые двоичные файлы в кеше как base64, что позволяет использовать до 768k двоичных данных.

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

4
ответ дан 13 December 2019 в 05:41
поделиться

The caching mechanism needs hand-rolling.

Splay Trees are a useful and straightforward mechanism for storing cached objects, and also detecting how stale they are.

1
ответ дан 13 December 2019 в 05:41
поделиться

Если вы хотите создать свой собственный, вы, вероятно, хотите сделать это во Freepascal, как это имеет работающую 64-битную поддержку. Вместо бинарных деревьев сплайнов я бы предложил k-ary.

1
ответ дан 13 December 2019 в 05:41
поделиться

Эти платформы предоставляют некоторый способ кэширования объектов

В зависимости от ваших точных требований, эти может быть сверх. Если вы попытаетесь реализовать собственное решение, я бы посоветовал вам взглянуть на различные контейнеры в VCL джедая в качестве отправной точки.

1
ответ дан 13 December 2019 в 05:41
поделиться

Хорошо. Я, вероятно, в конечном итоге буду чувствовать себя глупо по этому поводу, но в чем проблема с TStringList? Я использовал динамический массив довольно структурированных данных с TStringList, чтобы найти элемент на основе идентификатора строки. Недавно я обновил TStringList до THashedStringList. Это может быть немного быстрее, но пока ничего особенного. Компоновка StringList / Array обеспечила отличную производительность моего приложения.

До сих пор я кэшировал от 100 до 150 записей, но я ожидаю, что он будет работать нормально, возможно, до нескольких тысяч. В бизнесе, которым я занимаюсь, это довольно большая операция.

1
ответ дан 13 December 2019 в 05:41
поделиться

Клиент Delphi для Memcached можно найти в коде Google:

http://code.google.com/p/delphimemcache/

4
ответ дан 13 December 2019 в 05:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: