Как показать сообщение о прогрессе при получении данных из базы данных - используя dupal 7 - PullRequest
0 голосов
/ 03 марта 2020

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

Мой. js файл:

(function ($) {
    $(document).ready(function(){
        $('#my-form-loading')
            .hide()  // Hide it initially
            .ajaxStart(function() {
                $(this).show();
            })
            .ajaxStop(function() {
                $(this).hide();
            });
    });
})(jQuery);

My hook_menu:

$items['admin/config/network_drives/%/scan'] = array(
    'title'             =>  'Scan Network Drive',  //page title
    'description'       =>  'Scan a network drive',  //description show when mouse hover on link
    'page callback'     =>  'drupal_get_form',  //callback function which is invoked when menu item is called.
    'page arguments'    =>  array('_network_drive_scan'), //Module Form Function
    'type'              =>  MENU_LOCAL_TASK,
    'access callback'   =>  true,  //any user having add_network_drive can access this page
);

и моя функция:

function _network_drive_scan($form, &$form_state) {
    $arguments = arg();
    $id = $arguments[count($arguments) - 2];

    ini_set('max_execution_time', 0);
    require_once ('reader.class.php');
    require_once ('readerException.class.php');

    try{

        $query = db_select('network_drive','ndrive');
        $query
            ->fields('ndrive', array('ndid','username','password','host','path','type','algo'))
            ->condition('ndid',$id,'=')
            ->orderBy('ndrive.ndid');
        $results = $query->execute();

        $ND = $results->fetchAssoc();

        $reader = new Reader($ND); //DMS


        /**
         * Mysql query to insert network drive id into network drive listing table().
         */
        $arguments = arg();
        $id = $arguments[count($arguments) - 1];
        $query = db_select('network_drive','ndrive');
        $query
            ->fields('ndrive', array('ndid'))
            ->condition('ndid',$id,'=')
            ->orderBy('ndrive.ndid');
        $results = $query->execute();
        $network_drive_id = $results->fetchAssoc();

        /**
         * mysql query to fetch the directory name from path and insert into scanning process().
         */
        $directory_name = $arguments = arg();
        $networkdriveid = $arguments[count($arguments) - 2];
        $query = db_select('network_drive','networkd');
        $query
            ->fields('networkd', array('path'))
            ->condition('ndid',$networkdriveid,'=')
            ->orderBy('networkd.ndid');
        $results = $query->execute();
        foreach($results as $result){
            $array = explode("\\", $result->path);
            $networkpath =  isset($array[count($array) - 2]) ? $array[count($array) - 2] :   "Directory not available";
        }

        $array = $reader->scanFolder("",true);



        makeArrayFromNested($array,$networkdriveid,"root");

      $form['#prefix'] = '<div id="my-form-loading" style="display:none;">Loading..please wait>';
      $form['#suffix'] = '</div>';

        drupal_set_message(t('Network drive has been scanned successfully.'));

        $form_state['redirect'] = '/admin/config/network_drives';

      $module_path = drupal_get_path('module', 'nd');
      $element['#attached'] = array(
        'js' => array($module_path . '/page_load.js'),
      );

      return $element;

    }catch(ReaderException $e){

        die($e->message);

    }
}

Я создал «префикс, суффикс, идентификатор» и передаю их в свою функцию. js, но ничего не происходит. Я застрял в этой проблеме на несколько дней, что я делаю не так.
Пожалуйста, мне нужна ваша помощь. Спасибо!

...