Перейти к содержимому


Фото
* * * * * 2 голосов

Склонение по падежам

Склонение Падежи Simpla 2.3.x

Best Answer mishanya , 13.05.2016 - 09:26

UPD 3.0 с новым апи и записью падежей в базу

 
 
1. делаем запрос в базу
CREATE TABLE IF NOT EXISTS `s_declination` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `phrase` varchar(255) NOT NULL,
  `declination` varchar(1024) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8

2. Регистрируем плагин, для этого в файл api/Design.php (примерно строка 42) добавляем:

$this->smarty->registerPlugin('modifier', 'declination', array($this, 'declination_modifier'));
3. Дальше добавим в самый конец функцию для обработки нового апи и возвращения падежей (если у вас была старая ф-я версии 1 или 2, нужно ее удалить):
public function declination_modifier($text, $numForm = null, $numType = 'О') {

	// Смотрим есть ли в базе сколонение
	$query = $this->db->placehold("SELECT d.id, d.phrase, d.declination FROM __declination d WHERE d.phrase=? LIMIT 1", $text);
	$this->db->query($query);
	$d = $this->db->result();

	if($d) {
		$result = unserialize($d->declination);
	} else {
		$urlXml = "https://ws3.morpher.ru/russian/declension?s=".urlencode($text);
		$d = @simplexml_load_file($urlXml);
		$d = (array)$d;
	    if(!empty($d)){
	        $arrData = array();

	        $arrData['И']['О'] = (string) $text;
	        foreach ($d as $key=>$val) {
	        	if(!is_object($val))
	            	$arrData[$key]['О'] = (string) $val;
	            else {
	            	$multiple = (array)$val;
	            	foreach ($multiple as $key=>$m) {
	            		$arrData[$key]['М'] = (string) $m;
	            	}
	            }
	        }
	        $result = $arrData;

			$query = $this->db->placehold("INSERT INTO __declination SET ?%", array('phrase'=>$text, 'declination'=>serialize($result)));
			$this->db->query($query);
	    }
	}

    if($numForm) {
    	if( isset($result[$numForm][$numType]) ) {
    	     return $result[$numForm][$numType];
    	} else
    	     return $text;
   	} else {
    	return $result;
    }
}

 

Как использовать: для нужной переменной добавляем модификатор |declination:падеж:тип_падежа

например:

{$product->name|declination:'Д':'О'}
{'Главная'|declination:'Р':'М'}

Список падежей:

И - Именительный падеж
Р - Родительный падеж
Д - Дательный падеж
В - Винительный падеж
Т - Творительный падеж
П - Предложный падеж
 
Тип падежа:
О - единственный
М - множественный
Перейти к посту


  • Чтобы отвечать, сперва войдите на форум
50 ответов в теме

#41 chocolate_moles

chocolate_moles
  • Фрилансер
  • 399 сообщений
  • Верстка
  • Версия CMS:2.x
  • Откуда:Санкт-Петербург

Опубликовано 21.08.2017 - 06:51

Или может кто знает более изящное решение этой проблемы.

 
Измените запрос добавив в него BINARY 

 

 $query = $this->db->placehold("SELECT ... FROM __declination d WHERE  d.phrase=BINARY ? LIMIT 1", $text);


 


Изменено: chocolate_moles, 21.08.2017 - 07:14


#42 bananovsv

bananovsv
  • Пользователь
  • 76 сообщений

Опубликовано 22.08.2017 - 02:35

 
Измените запрос добавив в него BINARY 

 


 

Спасибо.



#43 FDA

FDA
  • Пользователь
  • 45 сообщений
  • Пользователь
  • Версия CMS:2.x
  • Откуда:РФ

Опубликовано 22.09.2017 - 09:55

Спасибо


Изменено: FDA, 22.09.2017 - 10:40


#44 service79

service79
  • Пользователь
  • 60 сообщений
  • Заказчик
  • Версия CMS:2.x

Опубликовано 22.09.2017 - 10:32

Теперь в функции надо поменять адрес

с:

$urlXml = "https://ws3.morpher....n/declension?s=".urlencode($text);

на

$urlXml = "http://ws3.morpher.r...n/declension?s=".urlencode($text);

зачем? по https работает же?!



#45 FDA

FDA
  • Пользователь
  • 45 сообщений
  • Пользователь
  • Версия CMS:2.x
  • Откуда:РФ

Опубликовано 22.09.2017 - 10:46

зачем? по https работает же?!

Сори, у меня не работало какое-то время, я переделал. Но теперь опять все нормально, исправил пост



#46 bananovsv

bananovsv
  • Пользователь
  • 76 сообщений

Опубликовано 17.11.2017 - 17:38

У всех перестало работать?



#47 service79

service79
  • Пользователь
  • 60 сообщений
  • Заказчик
  • Версия CMS:2.x

Опубликовано 17.11.2017 - 20:17

У всех перестало работать?

все работает нормально.. вот для проверки:

https://ws3.morpher....lension?s=товар


Изменено: service79, 17.11.2017 - 20:17


#48 bananovsv

bananovsv
  • Пользователь
  • 76 сообщений

Опубликовано 18.11.2017 - 10:09

все работает нормально.. вот для проверки:

https://ws3.morpher....lension?s=товар

 

У меня ошибка по ссылке:

Screen%20Shot%202017-11-18%20at%2010.08.

 

Насколько я понял, у него просрочен сертификат.


Изменено: bananovsv, 18.11.2017 - 10:11


#49 service79

service79
  • Пользователь
  • 60 сообщений
  • Заказчик
  • Версия CMS:2.x

Опубликовано 18.11.2017 - 10:10

У меня ошибка по ссылке:

Screen%20Shot%202017-11-18%20at%2010.08.

Это не ошибка, а вопрос принятия сертификата безопасности.

По факту вот так: http://prntscr.com/hbzm1o


Изменено: service79, 18.11.2017 - 10:11


#50 bananovsv

bananovsv
  • Пользователь
  • 76 сообщений

Опубликовано 18.11.2017 - 10:14

Это не ошибка, а вопрос принятия сертификата безопасности.

По факту вот так: http://prntscr.com/hbzm1o

 

В браузере-то я могу его принять. А сервер мой — нет. Что с этим делать?



#51 service79

service79
  • Пользователь
  • 60 сообщений
  • Заказчик
  • Версия CMS:2.x

Опубликовано 18.11.2017 - 10:20

В браузере-то я могу его принять. А сервер мой — нет. Что с этим делать?

хз.. я для теста создал на сайте товар и проверил его склонение - работает







Также с меткой «Склонение, Падежи, Simpla 2.3.x»

0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых