Как я Расширяю Представление Зенда для Реализации Конкретной Функции?

Если вам нужно использовать один SELECT запрос, такой как @ Forty3, о котором говорилось, то несколько REPLACE, как @ Гордон-Линофф, сказал, что, вероятно, лучше (но определенно не идеально).

Если вы можете обновить данные или использовать T-SQL, то вы можете сделать что-то подобное с https://searchsqlserver.techtarget.com/tip/Replacing-non-alphanumeric-characters-in-strings- используя-T-SQL :

while @@rowcount > 0
        update  user_list_original
        set     fname = replace(fname, substring(fname, patindex('%[^a-zA-Z ]%', fname), 1), '')
        where   patindex('%[^a-zA-Z ]%', fname) <> 0

6
задан Charles 1 April 2011 в 02:12
поделиться

4 ответа

Obviously ignore my paths for your own...

  1. Extend Zend_View
  2. Put your method in this extended class
  3. Instantiate the class (in your bootstrap for instance)
  4. Assign it to the ViewRenderer
  5. Pass that viewrenderer to Zend_Controller_Action_HelperBroker's addHelper method
  6. Use it in your view

In /library/MegaHAL/Zend/ create View.php:

class MegaHAL_Zend_View extends Zend_View
{
    public function _($string)
    {
    return Zend_Registry::get('translate')->_($string);
    }
}

In your bootstrap:

require_once APPLICATION_PATH.'../library/MegaHAL/Zend/View.php';

$view = new MegaHAL_Zend_View();

$viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer();
$viewRenderer->setView($view);
Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);

In your view:

<p><?php echo $this->_("Hello");?></p>

I believe that will do what you want, yes?

14
ответ дан 8 December 2019 в 13:49
поделиться

I think that you're looking for a way to create custom view helpers.

Example:

class My_View_Helper extends Zend_View_Helper_Abstract
{
    public function translate($string)
    {
        //...
    }
}

...

$view->setHelperPath('/path/to/helpers', 'My_View_Helper');

...

Then in your views you can use it:

echo $this->translate("Hello, World!");
2
ответ дан 8 December 2019 в 13:49
поделиться

If configured properly Poedit can automatically extract strings from functions other than _().

0
ответ дан 8 December 2019 в 13:49
поделиться

Исходный метод, который вы выбрали (a * b + c * d + e) ​​, было бы очень трудно найти оптимальные решения просто из-за большого пространства поиска возможностей , Вы можете факторизовать число, но это то, что "+ e" усложняет ситуацию, так как вам нужно факторизовать не только это число, а довольно много сразу под ним.

Два метода для Сразу вспоминается пружина сжатия, которая дает вам гораздо более чем 10% экономию пространства от числового представления.

64-разрядное число варьируется от (без знака):

                         0 to
18,446,744,073,709,551,616

или (со знаком):

-9,223,372,036,854,775,808 to
 9,223,372,036,854,775,807

В обоих случаях вам нужно уменьшить количество взятых 20 символов (без запятых) до значения немного меньшего.

Во-первых, это просто BCD-ify число, которое кодирует base64 (на самом деле это слегка измененное base64, поскольку "/" не будет кошерным в URL - вам следует использовать один из допустимых символов, таких как as "_" ).

Преобразование его в BCD сохранит две цифры (или знак и цифру) в одном байте, что даст вам сокращение пространства на 50% (10 байтов). Кодирование с помощью base 64 (который превращает каждые 3 байта в 4 символа base64) превратит первые 9 байтов в 12 символов, а этот десятый байт - в 2 символа, что в сумме составляет 14 символов - это экономия 30%.

лучший способ - просто кодировать base64 двоичным представлением. Это лучше, потому что BCD имеет небольшое количество потерь (каждая цифра требует только 3,32 бит для хранения [log 2 10], но BCD использует 4).

Работая с двоичным представлением, нам нужно только base64 кодировать 64-битное число (8 байт). Это требует 8 символов для первых 6 байтов и 3 символа для последних 2 байтов. Это 11 символов base64 для экономии 45%.

Если вы хотите максимальное максимальное сжатие , для кодирования URL доступно 73 символа:

ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
0123456789$-_.+!*'(),

, так что технически вы можете кодировать base-73, который, из грубых вычислений, все равно будет занимать 11 символов, но с более сложным кодом, который, на мой взгляд, не стоит.

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

1
ответ дан 8 December 2019 в 13:49
поделиться
Другие вопросы по тегам:

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