Калькулятор для нумерологии (кверсумма)

Главные вкладки

Аватар пользователя Reisor Reisor 12 августа 2020 в 22:08

Есть ли кто реализовывал, или готовое решение?
Если кто-то может сделать, отдам в работу.
Модуль https://www.drupal.org/project/numerology_calculator не совсем подходящее решение

Комментарии

Аватар пользователя OldWarrior OldWarrior 13 августа 2020 в 12:27

Reisor wrote: Если кто-то может сделать, отдам в работу.

А алгоритм (метод) расчёта этой вашей кверсуммы у вас имеется?

Аватар пользователя OldWarrior OldWarrior 14 августа 2020 в 12:52

Всё зависит от степени хотелок автора - т.е. от реализации и обвязки.
Сумма приемлема на мой взгляд, если без изысков и наворотов. В любом случае, есть что уточнить и обсудить, но автор пока не отозвался в ЛС. )

Аватар пользователя Punk_UnDeaD Punk_UnDeaD 13 августа 2020 в 16:28
1

я родился сразу тридцатилетним
3+0 = 3
3*0 = 0
3 и 0 = 30
совпадение? не думаю

илюмината три стороны и глаз похож на 0

вывод, илюминат это я

Аватар пользователя rukoved rukoved 29 сентября 2020 в 13:52

Всем здравия!
Хочу довести до ума этот модуль, есть вопрос: В расчете калькуляции я добавила русские буквы, но результат их не видит, подозреваю, что есть ограничения только на латинские символы ($alpha_val), кто подскажет, как исправить?

<?php

/**
 * @file
 * Defines helper functions.
 */

/**
 * Helper function to calculated numerology for name.
 *
 * @param object $num_username
 *   The name string.
 *
 * @return number
 *   The calculated number.
 */

function num_get_results($num_username) {
  $output = "";
  $val_ar = array(
        'A' => 1, 'B' => 2, 'C' => 3, 'D' => 4, 'E' => 5, 'F' => 6, 'G' => 7, 'H' => 8, 'I' => 9,
        'J' => 1, 'K' => 2, 'L' => 3, 'M' => 4, 'N' => 5, 'O' => 6, 'P' => 7, 'Q' => 8, 'R' => 9,
        'S' => 1, 'T' => 2, 'U' => 3, 'V' => 4, 'W' => 5, 'X' => 6, 'Y' => 7, 'Z' => 8,      
        'А' => 1, 'Б' => 2, 'В' => 3, 'Г' => 4, 'Д' => 5, 'Е' => 6, 'Ё' => 7, 'Ж' => 8, 'З' => 9,
        'И' => 1, 'Й' => 2, 'К' => 3, 'Л' => 4, 'М' => 5, 'Н' => 6, 'О' => 7, 'П' => 8, 'Р' => 9,
        'С' => 1, 'Т' => 2, 'У' => 3, 'Ф' => 4, 'Х' => 5, 'Ц' => 6, 'Ч' => 7, 'Ш' => 8, 'Щ' => 9,
        'Ъ' => 1, 'Ы' => 2, 'Ъ' => 3, 'Э' => 4, 'Ю' => 5, 'Я' => 6);  
 
        //получить значение, введенное методом отправки
        $str = $num_username;
       
        //Перевод в верхний регистр.
        $str = strtoupper($str);
       
        //найти длину введенной строки.
        $len = strlen($str);
         
        //установить временное значение для расчета
        $numero_val = 0;
         
        //Цикл добавления значений
        for($i=0; $i<$len; $i++)
        {
        $alpha_val  = $str[$i];
        $numero_val = $val_ar[$alpha_val] + $numero_val;
        }
 
  // Результат
  return $numero_val;
}

Аватар пользователя OldWarrior OldWarrior 29 сентября 2020 в 15:41

rukoved wrote:... подозреваю, что есть ограничения только на латинские символы ...

Просто мультибайтная кодировка, мэм. В Друпале именно она.

Проще говоря, для поддержки кириллических символов, нужно заменить функции для работы со строками на их мультибайтные аналоги:
mb_strtoupper()
mb_strlen()

Аватар пользователя OldWarrior OldWarrior 29 сентября 2020 в 16:55

rukoved wrote:... Добавила $numero_val = mb_strlen($numero_val); ...

То есть, судя по всему, вы пытаетесь numeric-тип ($numero_val) использовать как строку с целью получения её длины. В PHP так не проканает, поскольку сначала нужно числовой тип преобразовать в литеральный. Например, с помощью strval():

<?php
$numero_val 
mb_strlen(strval($numero_val));
?>

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

UPD. Во всех непонятных случаях можно (и нужно) читать и выводить промежуточные результаты (print_r(), var_export()... etc) для установления точной точки, где что-то происходит не так, как задумано.

Аватар пользователя rukoved rukoved 29 сентября 2020 в 18:59

<?php
$numero_val = mb_strlen(strval($numero_val));
?> - это не помогло, либо я что-то не так делаю...

А можно какой-либо пример, как можно использовать (print_r(), var_export()... etc) в моем случае

Аватар пользователя OldWarrior OldWarrior 29 сентября 2020 в 19:40
<?php
        
...
        
//получить значение, введенное методом отправки
        
$str $num_username;
        
        
drupal_set_message("Значение: " .  var_export($strTRUE))
       
        
//Перевод в верхний регистр.
        
$str mb_strtoupper($str);
        
        
drupal_set_message("Перевод в верхний регистр: " .  var_export($strTRUE));
       
        
//найти длину введенной строки.
        
$len mb_strlen($str);
        
        
drupal_set_message("длина введенной строки: " .  var_export($lenTRUE));
         
        
//установить временное значение для расчета
        
$numero_val 0;
        
        
drupal_set_message("временное значение для расчета: " .  var_export($numero_valTRUE));
        
        ...
        
        
$numero_val mb_strlen(strval($numero_val));
        
drupal_set_message(var_export($numero_valTRUE));
        
        ...
        
        
// и т.д. ...
?>
Аватар пользователя rukoved rukoved 29 сентября 2020 в 19:59

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

в логах запись - Error: Call to undefined function drupal_set_message()…

Аватар пользователя OldWarrior OldWarrior 29 сентября 2020 в 20:13

rukoved wrote: в логах запись - Error: Call to undefined function drupal_set_message()…

Вы вообще-то из модуля Друпала этот ваш код выполняете?

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

Если нет, то drupal_set_message() конечно работать не будет. И нужно выводить отладку просто через print_r() или var_export().

Честно говоря, есть ощущение что лучше бы вам пока заняться изучением PHP. Вряд ли кто-то заочно и пошагово будет давать рекомендации, как написать нужный вам функционал.

Аватар пользователя charOFF charOFF 29 сентября 2020 в 20:15
1

Обойти мультибайтовую строку как массив тоже не получится, цикл должен быть таким

<?php
foreach(preg_split('//u'$str, -1PREG_SPLIT_NO_EMPTY) as $alpha_val)
{
  
$numero_val += $val_ar[$alpha_val];
}
?>

или, если версия PHP 7.4

<?php
foreach(mb_str_split($str) as $alpha_val)
{
  
$numero_val += $val_ar[$alpha_val];
}
?>
Аватар пользователя rukoved rukoved 29 сентября 2020 в 16:01

Тут еще такая задачка до рисовалась к вопросу, надо число, которое получается в итоге 2-х значными разделить на символы и их тоже сложить, до тех пор пока число не станет однозначным, здесь достаточно один цикл, что-то моя писанина не работает в таком виде

<?php      if($numero_val>0){
    
// выделение 1-го символа
    
$simv1 $numero_val.charAt($s);               
    
// выделение 2-го символа
    
$simv2 $numero_val.charAt($s+1);
      
    
$numero_val $simv1+$simv2;
      }
    
?>
Аватар пользователя OldWarrior OldWarrior 29 сентября 2020 в 16:59

Здесь также нужно преобразование, только уже из строкового/литерального типа в числовой, например, используя intval().

Азы PHP вообще-то.

Аватар пользователя marassa marassa 29 сентября 2020 в 20:21

rukoved wrote: в логах запись - Error: Call to undefined function drupal_set_message()…

В девятке удалена устаревшая функция drupal_set_message(), надо \Drupal\Core\Messenger\MessengerInterface::addMessage().
Совет: если уж решили вклиниться в чужую тему со своим вопросом, хоть версию Друпал указывайте в явном виде...

Аватар пользователя rukoved rukoved 29 сентября 2020 в 20:47

Спасибо за ответ. У меня:
PHP 7.4.9
drupal 9.0.5
Каким образом это можно использовать? - \Drupal\Core\Messenger\MessengerInterface::addMessage(), я пишу код в модуле