답변:
매시간 cron 작업을 정의하거나 phpMyAdmin을 사용하여이 SQL을 실행할 수 있습니다.
UPDATE `jos_content` c SET c.checked_out = 0, c.checked_out_time = 0 WHERE HOUR(TIMEDIFF(CONVERT_TZ(NOW(), @@session.time_zone, '+00:00'), c.checked_out_time)) >= 2;
UPDATE `jos_categories` c SET c.checked_out = 0, c.checked_out_time = 0 WHERE HOUR(TIMEDIFF(CONVERT_TZ(NOW(), @@session.time_zone, '+00:00'), c.checked_out_time)) >= 1;
참고 : 교체 jos
테이블 접두사.
위의 SQL 체크인은 각각 2 시간 또는 1 시간 전에 체크 아웃 한 기사 및 범주입니다. 기사와 카테고리는 각각 2 시간과 1 시간 내에 저장되어야한다고 가정합니다. 당신은 그 숫자를 증가시킬 수 있습니다.
가능할 때마다 크론을 피하려고 노력하지만 @Farahmand의 답변에 따라이 코드의 변형을 User Plugin onUserLogout()
이벤트 에 넣었습니다 .
때 모든 사용자가 로그 아웃 , 모든 플러그인에 체크 - 자신 의 콘텐츠뿐만 아니라, 포기되었을 수있는 다른 체크 아웃. 나는 특정 사용자 그룹에 영향을 줄 수하고, 모든 관리자 사용자의 콘텐츠는 것을 보장하고 싶었 결코 우리 자신의 내부 이유 (영향을받지 않습니다 - 아마도 과잉 일반적인 설치를위한, 그러나 우리의 경우에 우리는 여러 가지 일 수 있습니다 사용자 정의 사용자 그룹이 표준 사용자 그룹도 마찬가지입니다.
function onUserLogout() {
$groups_include = '2,4,10'; // Affect Registered, Publishers, and Custom Group
$groups_exclude = '7,8'; // Don't affect Administrators or Super Users
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->update($db->quoteName('#__content'))
->set('checked_out = 0, checked_out_time = 0')
->where('( checked_out = '.JFactory::getUser()->id.' ) OR (
checked_out_time < NOW() - INTERVAL 12 HOUR
AND checked_out IN (SELECT GROUP_CONCAT(user_id) FROM scm_user_usergroup_map WHERE group_id IN ('.$groups_include.'))
AND checked_out NOT IN (SELECT GROUP_CONCAT(user_id) FROM scm_user_usergroup_map WHERE group_id IN ('.$groups_exclude.'))
)'
);
$db->setQuery($query);
$db->execute();
return true;
}
시간대 등에 맞게 SQL을 조정할 수 있다고 확신하지만 결과 SQL 문은 다음과 같습니다.
UPDATE `gdp_content`
SET checked_out = 0, checked_out_time = 0
WHERE ( checked_out = 30 ) OR (
checked_out_time < NOW() - INTERVAL 12 HOUR
AND checked_out IN (SELECT GROUP_CONCAT(user_id) FROM scm_user_usergroup_map WHERE group_id IN (2,10,11))
AND checked_out NOT IN (SELECT GROUP_CONCAT(user_id) FROM scm_user_usergroup_map WHERE group_id IN (7,8))
)
checked_out_time < NOW() - INTERVAL 12 HOUR
와 checked_out_time < JFactory::getDate('now +12 hours')
- 테스트를하지 않습니다.