На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Serafim, fatalist
Страницы: (2) 1 [2]  все  ( Перейти к последнему сообщению )  
    > Создать список классов (селекторов) css или php (возможно с помощью file_get_contents) , Пробую вытащить классы (элементы) из css-файла, можно из php и составить список
      Сам нашел ошибку. Невнимательность. В первом случае был двойной вызов функции get_file_for_change, а во втором забывал переменную прописать. Кому интересно вот работающий код:
      ExpandedWrap disabled
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
         
        </head>
         
        <?php
        if (isset($_POST['find_css']))
        {find_css('.');}
         
        ?>
         
        <!--- Кнопка для сканирования --->
        <form method="post">
        <input name="find_css" type="submit" value="Найти css в корневой папке">
        </form>
         
        <!--- Проверка нажатия кнопки для счетчика  --->
        <?php
        if (isset($_POST['find_css']))
        {calcul();}
         ?>
         
        <!--- Форма списка,куда должны передаваться результаты для дальнейшего выбора  --->
        <div class="form">
        <form action="" method="post">
        <div style="width:100%; height:150px; overflow:auto; border:solid 1px #C3E4FE;">
        <?php
        if (isset($_POST['find_css']))
        {add_strok();}
        ?>  <!--- Вызов функции для добавления строк с проверкой нажатия кнопки --->
        </div>
         <input type="submit" name="vibor_for_change" value="Выполнить">
        </form>
        </div>
         
        <?php
        // Калькулятор найденых файлов
        function calcul()
          {
          global $matchV; global $pic_on; global $parth_on;
                $calc=count($parth_on);      
                 echo "Найдено $calc файла(ов)";
           }
         
        // Функция добавления строк в список
        function add_strok()
           {
         global $pic_on; global $parth_on;
           for ($i=0; $i<count($parth_on); $i++)  // по идее доолжна была проверять количество строк (элементов массива и быть счетчиком)
              {
              echo "
              <input type=\"radio\" name=\"strok\" value=\"$parth_on[$i]\" />
        <div style=\"display:grid; grid-template-columns:80% 20%; \">
        <div style=\" grid-column: 1 / 1;\">$parth_on[$i]</div>
        <div style=\"grid-column: 2 / 2;\">$pic_on[$i]</div></div><br>
              ";
              }
           }
         
         
         
         
        // РАБОЧАЯ Функция для нахождения всех css
        function find_css($dir)
        {
          global $pic_on; global $parth_on;
          foreach (glob($dir.DIRECTORY_SEPARATOR."*") as $annown)
          {
             if (is_dir($annown))
             {
                if (find_css($annown)) continue;
             }
             else
             {
                $parth_annown[] =$annown;
                //echo $annown; echo '<br>';
                        if (preg_match_all("/^.*\.(css)$/i",$annown,$match, PREG_PATTERN_ORDER )) // выбираем все картинки
                     {
                     $matchV=array_values($match[0]); // собираем картинки в массив
                            foreach ($matchV as $key=>$css)
                           {
                              $parth_on[]=$css;
                              $pic_on[] ='<img src="./icon/icons8-css-26.png" width="100%" height="100%" >';   // делаем превью с иконкой
                              // echo $pic; echo '<br>'; // оставил для проверки
                              }
                       }
             }
          }
         
        }
         
        ?>
         
        <?---  тут начало всех форм по вкладкам  --->
           <?php
        if (isset($_POST['strok'])) {$for_change=$_POST['strok']; get_file_for_change($_POST['strok']); }
         
        function get_file_for_change()
        {
             global $block; global $ubr; $count; global $mas1; global $match; global $match1; global $match2; global $matchV; global $matchV1; global $matchV2; global $value;
        global $count; global $ubr; global $for_change;
         
          $block=file_get_contents($for_change);
          {
               preg_match_all('/()(.*)(\b.*{)|(.)(.*)(,\s)/', $block, $match, PREG_PATTERN_ORDER);
               $matchV=array_values($match[0]);
                    function trim_value(&$value)
                    {
                     $value = preg_replace('/(\.)(.*)(\.)/','.', $value);  
                     $value = preg_replace('/(\.)(.*)(\.)/','.', $value);  
                     $value=preg_replace('/,\s+/','', $value);
                     $value = trim($value, ' {');
                     }
              array_walk($matchV, 'trim_value');
         
               preg_match_all('/(,\s.)(.*)(,)/', $block, $match1, PREG_PATTERN_ORDER);
               $matchV1=array_values($match1[0]);
                       function trim_value1(&$value)
                       {
                        $value = preg_replace('/(,\s)(.*)(\.)/','.', $value);  
                        $value = preg_replace('/(,)/','', $value);  
                         }
               array_walk($matchV1, 'trim_value1');
         
              preg_match_all('/(.*,\s)(.*)(,\s+)/', $block, $match2, PREG_PATTERN_ORDER);
              $matchV2=array_values($match2[0]);
                          function trim_value2(&$value)
                          {
                          $value = preg_replace('/(,)(.*)(,)/','', $value);  
                           }
              array_walk($matchV2, 'trim_value2');
         
              $mas1=array_merge($matchV, $matchV1, $matchV2);
         
                          function trim_value3(&$value)
                          {
                           $value = preg_replace('/(\.)(.*)(\.)/','.', $value);  
                           $value = preg_replace('/(\.)(.*)(\.)/','.', $value);  
                           $value=preg_replace('/,\s+/','', $value);
                            }
         
             array_walk($mas1, 'trim_value3');
         
             $ubr=array_unique($mas1);
         
             $count=count($ubr);
            $mas1id=preg_replace('/(\.)/', '', $ubr);
         
                          function add_fields()
                           {
                            global $block; global $ubr; $count; global $mas1; global $match; global $match1; global $match2; global $matchV; global $matchV1; global $matchV2; global $value;
                            global $count;
                            global $ubr;
                                  for ($i=0; $i<$count; $i++)
                                  {
                                  echo "
                                  <input type=\"checkbox\" name=\"add_fields_class[]\" value=\"$ubr[$i]\"  />$ubr[$i] <br>
                                  ";
                                  }
                            }
         
          }
        }
        ?>
         
        <form action="sovm.php" method="post">
        <div style="width:20%; height:100px; overflow:auto; border:solid 1px #C3E4FE;">
        <?php
        //get_file_for_change();
        if (isset($_POST['strok'])) {$for_change=$_POST['strok']; add_fields($_POST['strok']); }
         ?>
        </div>
         <input type="submit" name="formSubmit" value="Выполнить">
        </form>  
            </div>

      По сути основные вопросы изначальной темы решены. Хоть и не все нюансы тут показаны, но направление есть. Кто захочет - разовьет тему или спросит. Ну а я принцип понял, развил. Может и будут ещё вопросы по нюансам, но это уже нюансы.
        Цитата D-G @
        Почитал и про компосер, и понял, что мне туда ещё рано...

        Вполне допускаю.

        1) Но чем раньше попытаешься понять как написать "composer require xxx" и воспользоваться сторонним библиотечным кодом - тем лучше. Т.к. на сторонних решениях можно очень хорошо прокачать скилл.
        2) Чем раньше откажешься от global, тем лучше.


        Ну и небольшой оффтоп, раз разобрался с регулярками, то думаю и с этим разберёшься. Писал как раз для таких случаев: https://github.com/phplrt/phplrt В твоём случае будет интересен вот этот функционал: https://github.com/phplrt/phplrt/blob/master/docs/lexer.md
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0354 ]   [ 16 queries used ]   [ Generated: 28.03.24, 18:55 GMT ]